2016-01-18 3 views
0

Я пытаюсь смоделировать мой код 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; 
+1

Ваш пример кода не является [Минимальным, полным и проверяемым примером] (http://stackoverflow.com/help/mcve). В VHDL обычно полезно видеть декларации, структуру, полные процессы и все назначенные назначения сигналов. Недостаточно информации для ответа. Есть ли причина, по которой вы используете типы массивов с длиной 1 вместо типа элемента? – user1155120

ответ

0

От взгляда на ваш код я не могу сказать. Я рекомендую писать testbench и имитировать его (я использую modelsim). Таким образом, вы сможете видеть, как сигналы меняются, и, скорее всего, вы выясните свою проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^