2013-03-30 2 views
0

Я пишу небольшой кусок кода, чтобы принимать 32-битный ввод и вывод 2 бита за раз. Я считаю, что у меня бесконечные проблемы цикла из цикла while, основанные на попытках моделирования. Все выглядит правильно для меня, по сравнению с другими примерами циклов, на которые я смотрел. Любая подсказка, что я могу делать неправильно?VHDL бесконечный цикл

library ieee; 
use ieee.std_logic_1164.all; 

entity regA is 
port(mpcnd: in std_logic_vector(31 downto 0); 
     clk: in std_logic; 
     twobits: out std_logic_vector(1 downto 0)); 
end regA; 

architecture behavior of regA is 
begin 
process 
variable count: integer; 
begin 
count := 0; 
while (count < 32) loop 
    if rising_edge(clk) then 
    twobits(0) <= mpcnd(count); 
    twobits(1) <= mpcnd(count+1); 
    count := count + 2; 
    end if; 
end loop; 
end process; 
end behavior; 

ответ

1

Для процесса вам нужен либо список чувствительности, либо инструкция ожидания. a (несинтезируемая, но одновременная) версия вашего процесса может выглядеть следующим образом:

process 
    variable count: integer; 
begin 
    count := 0; 
    while (count < 32) loop 
    wait until rising_edge(clk);-- if rising_edge(clk) then 
    twobits(0) <= mpcnd(count); 
    twobits(1) <= mpcnd(count+1); 
    count := count + 2; 
--end if; 
end loop; 
end process; 
+0

О, ладно. Я не понимал, что мне нужен список чувствительности. Благодаря! – user2113607

+1

И 'wait до rising_edge (clk)' определенно может быть синтезирован некоторыми инструментами! Я не тестировал этот общий стиль процесса, но я думаю, что для его синтеза потребуется повторная запись его в виде цикла FOR. –

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

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