volevo sottoporre alla vostra attenzione un codice VHDL di una semplicissima macchina a stati che ho implementato per un progettino, ma non capisco il perché su Quartus il pallogramma non risulti conforme alle mie aspettative.
Prima di sottoporre il codice vorrei chiarire cosa vorrei la macchina facesse:
- dallo stato 0 deve passare allo stato 1
- dallo stato 1 deve passare allo stato 2
- dallo stato 2 deve tornare allo stato 1
In pratica il primo stato mi esegue il reset dei registri una sola volta all'inizio, dopodiché il programma deve ciclare sugli stati 1 e 2 fino a spegnimento macchina. N.B. non ci sono segnalidi starto altre condizioni perché è tutto sequenziale.
Quando mando in esecuzione la compilazione il pallogramma che esce non rispecchia assolutamente questa situazione e, non capisco perché, solo per questo caso. Se cambio il numero di stati e faccio altre transizioni il comportamento sembra corretto quindi vorrei capire se qualcuno di voi abbia la minima idea del perché il pallogramma vada nel pallone.
Ecco il codice:
- Codice: Seleziona tutto
----- 4) MSF -----
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MSF is
Port ( CLK_M : in STD_LOGIC; -- clk macchina
Clk_Label : out STD_LOGIC; -- clk Buffer_Label (115 posizioni)
Clk_Pre : out STD_LOGIC; -- clk registro risultato
Rst_Label : out STD_LOGIC; -- reset Buffer_Label
Rst_Pre : out STD_LOGIC); -- reset registro risultato
end MSF;
architecture arch_MSF of MSF is
type stato is (S0,S1,S2); -- MSF a 3 stati
signal NS,PS: stato;
signal y: std_logic_vector(3 downto 0); -- 4 bit di uscita
begin
-- Prossimo stato --
delta: process (PS)
begin
case PS is
when S0 =>
NS <= S1;
y <= "0011"; -- reset registri
--Clk_Label = 0
--Clk_Pre = 0
--Rst_Label = 1
--Rst_Pre = 1
when S1 => -- carica risultato funzione di rivelazione
NS <= S2;
y <= "0100" ;
--Clk_Label = 0
--Clk_Pre = 1
--Rst_Label = 0
--Rst_Pre = 0
when S2 => -- shift marchi in buffer esterno
NS <= S1;
y <= "1000" ;
--Clk_Label = 1
--Clk_Pre = 0
--Rst_Label = 0
--Rst_Pre = 0
end case;
end process;
state_out: process (CLK_M)
begin
if (CLK_M'event and CLK_M = '1') then
PS <= NS;
end if;
Clk_Label <= y(0);
Clk_Pre <= y(1);
Rst_Label <= y(2);
Rst_Pre <= y(3);
end process;
end arch_MSF;

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




