Я пытаюсь смоделировать мой код VHDL. Кажется, существует расхождение, так как бит q (0 до 0) и q1 (0 до 0) имеют некоторое значение, но тогда, когда я назначаю их новым векторам, они имеют неправильные значения (в том же цикле) see ModelSim simulation here. Поскольку моя следующая логика состояния зависит от этих двух бит, это оказывается неправильным.VHDL Непосредственный результат сравнения
Здесь r и t назначаются q (0 до 0) и q1 (0 до 0), как показано в коде. В этом примере r должно принимать значение 1, поскольку q [0] равно единице. Но это получается 0.
Мне интересно, что может быть причиной этой проблемы?
when S0 => state <= S0;
funct <= '0';
load_m <= '0';
load_a <= '0';
load_q <= '0';
load_q1 <= '0';
shift <= '0';
dc <= '0';
rst_counter <= '0';
rst_shifter <= '0';
done <= '0';
--q0 <= to_bit(q(0 downto 0));
--q11 <= to_bit(q1);
r <= q(0 downto 0);
t <= q1(0 downto 0);
if ((q(0 downto 0) = "1" and q1(0 downto 0) = "1") or (q(0 downto 0) = "0" and q1(0 downto 0) = "0")) then
next_state <= S4;
elsif (q(0 downto 0) = "0" and q1(0 downto 0) = "1") then
next_state <= S2;
elsif (q(0 downto 0) = "1" and q1(0 downto 0) = "0") then
next_state <= S1;
end if;
Ваш пример кода не является [Минимальным, полным и проверяемым примером] (http://stackoverflow.com/help/mcve). В VHDL обычно полезно видеть декларации, структуру, полные процессы и все назначенные назначения сигналов. Недостаточно информации для ответа. Есть ли причина, по которой вы используете типы массивов с длиной 1 вместо типа элемента? – user1155120