Я пытаюсь реализовать алгоритм деления в VHDL. Для этого первым шагом является удвоение количества битов, которые находятся в делимом и делителе. Следующий шаг - выполнить вычитание с этими расширенными значениями. Когда vhdl выполняет вычитание, он заполняет верхние биты (те, которые были добавлены) символом «X», но результат младших битов верен.
Ниже мой код:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity Divider is
generic(
n : positive := 4 -- bit number of adder
);
port (
dividend : in std_logic_vector(n-1 downto 0);
divisor : in std_logic_vector(n-1 downto 0);
quotient: out std_logic_vector(2*n-1 downto 0);
remainder: out std_logic_vector(2*n-1 downto 0)
);
end Divider;
architecture archDivider of Divider is
begin
process (divisor, dividend)
variable intermediary_divisor: std_logic_vector(2*n-1 downto 0) := (others => '0');
variable intermediary_remainder: std_logic_vector(2*n-1 downto 0) := (others => '0');
variable intermediary_quotient: std_logic_vector(n-1 downto 0) := (others => '0');
begin
intermediary_divisor(2*n-1 downto n) := divisor;
intermediary_remainder(n-1 downto 0) := dividend;
-- for i in 0 to n-1 loop
intermediary_remainder := std_logic_vector(to_unsigned(to_integer(unsigned(intermediary_remainder)) - to_integer(unsigned(intermediary_divisor)), 2*n));
-- if (intermediary_remainder >= 0) then
-- intermediary_quotient := to_stdlogicvector(to_bitvector(intermediary_quotient) sll 1);
-- intermediary_quotient(0) := '1';
-- else
-- intermediary_remainder := intermediary_remainder + intermediary_divisor;
-- intermediary_quotient := to_stdlogicvector(to_bitvector(intermediary_quotient) sll 1);
-- end if;
intermediary_divisor := to_stdlogicvector(to_bitvector(intermediary_divisor) srl 1);
-- end loop;
quotient <= intermediary_divisor(2*n-1 downto 0);
remainder <= intermediary_remainder(2*n-1 downto 0);
end process;
end archDivider;
В настоящее время большая часть алгоритма закомментирована, пока я пытаюсь отладить свой код, и некоторые выходные данные не установлены на то, что они должны быть для фактического алгоритма, но это для целей отладки. Что в моем коде может привести к такой странной проблеме?