Contatatore 5 bit con MSF
Posted: 09 May 2015, 11:31
Salve a tutti, in università mi è stata assegnata un esercitazione costituita da 3 esercizio uno dei quali è la realizzazione di un contatore a 5 bit tramite MSF utilizzand il linguaggio VHDL.
Il mio contatore presenta in input:un segnale RESET che avvia il conteggio o lo riporta a 0, uno STOP che ferma momentaneamente il conteggio, un RESTART che riabilita il conteggio, un segnale UP_DOWN per scegliere il verso del conteggio tutti della durata di un ciclo di clock.
In output ho invece un segnale END_C che indica la fine del conteggio, uno START_C che indica l'avvio dello stesso e un segnale bus Q a 5 bit che mi porta in uscita il valore del conteggio.
Per non utilizzare un numero esagerato di stati sono riuscito a realizzare una MSF con 4 stati utilizzando una variabile temporanea che mi permetta il conteggio. Questo è il codice VHDL:
La compilazione avviene senza problemi solo che all'avvio della simulazione con Model Sim ricevo il seguente errore:
#**Error: (vsim-3601) Iteration limit reached at time 15ns.
Suppongo che questo sia dovuto ad un loop ma non riesco a risolvere il problema riuscite ad aiutarmi?
Grazie in anticipo, saluti Edoardo.
Il mio contatore presenta in input:un segnale RESET che avvia il conteggio o lo riporta a 0, uno STOP che ferma momentaneamente il conteggio, un RESTART che riabilita il conteggio, un segnale UP_DOWN per scegliere il verso del conteggio tutti della durata di un ciclo di clock.
In output ho invece un segnale END_C che indica la fine del conteggio, uno START_C che indica l'avvio dello stesso e un segnale bus Q a 5 bit che mi porta in uscita il valore del conteggio.
Per non utilizzare un numero esagerato di stati sono riuscito a realizzare una MSF con 4 stati utilizzando una variabile temporanea che mi permetta il conteggio. Questo è il codice VHDL:
- Code: Select all
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity esercizio3 is
port(CK, stop, restart, reset, up_down: in std_logic;
end_c, start_c: out std_logic;
Q: out std_logic_vector(4 downto 0));
end esercizio3;
architecture arc of esercizio3 is
type stato is(ST0, ST1, ST2, ST3);
signal ps, ns: stato;
signal temp: std_logic_vector(4 downto 0);
begin
seq_proc: process(CK, RESET)
begin
if(RESET='0')then
ps<=ST0;
elsif(rising_edge(CK)) then
ps<=ns;
end if;
end process seq_proc;
comb_proc:process(RESTART, STOP, UP_DOWN, PS)
begin
end_c<='0';
start_c<='0';
case ps is
when ST0=>
temp<="00000";
if(stop='0')then
ns<=ST0;
elsif(up_down='0')then
ns<=ST1;
else
ns<=ST2;
end if;
when ST1=>
temp<=temp-"00001";
if(stop='0')then
ns<=ST3;
elsif(up_down='0')then
ns<=ST1;
else
ns<=ST2;
end if;
when ST2=>
temp<=temp+"00001";
if(stop='0')then
ns<=ST3;
elsif(up_down<='0')then
ns<=ST1;
else
ns<=ST2;
end if;
when ST3=>
if(Restart='1')then
ns<=ST3;
elsif(up_down='0')then
ns<=ST1;
else
ns<=ST2;
end if;
when others=>
ns<=ST0;
end case;
Q<=temp;
if(temp="00000")then
start_c<='1';
elsif(temp="11111")then
end_c<='1';
end if;
end process comb_proc;
end arc;
La compilazione avviene senza problemi solo che all'avvio della simulazione con Model Sim ricevo il seguente errore:
#**Error: (vsim-3601) Iteration limit reached at time 15ns.
Suppongo che questo sia dovuto ad un loop ma non riesco a risolvere il problema riuscite ad aiutarmi?
Grazie in anticipo, saluti Edoardo.