2013-03-30 19 views
0

J'écris un petit morceau de code pour prendre une entrée de 32 bits et sortir 2 bits à la fois. Je crois que j'ai des problèmes de boucle infinis de la boucle while, basés sur des tentatives de simulation. Tout me semble juste, comparé à d'autres exemples de boucles que j'ai regardé. Toute idée de ce que je pourrais faire mal?VHDL boucle infinie

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; 

Répondre

1

Pour un processus, vous avez besoin d'une liste de sensibilité ou d'une instruction wait. une version (non synchrone mais simulable) de votre processus pourrait ressembler à ceci:

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

Oh okay. Je n'avais pas réalisé que j'avais besoin d'une liste de sensibilité. Merci! – user2113607

+1

Et 'wait until rising_edge (clk)' est certainement synthétisable par certains outils! Je n'ai pas testé ce style global de processus mais je pense que le réécrire comme une boucle FOR serait nécessaire pour la synthèse. –