Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problemi con pallogramma in quartus (VHDL)

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto Utentebaudy » 12 mar 2015, 13:06

Salve a tutti,
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;
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[2] Re: Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto UtenteWALTERmwp » 12 mar 2015, 15:13

Ciao Foto Utentebaudy,
baudy ha scritto:Quando mando in esecuzione la compilazione il pallogramma che esce non rispecchia assolutamente questa situazione e, non capisco perché, solo per questo caso.
e quindi come si presenta per non soddisfare le tue aspettative ?
Non conosco lo strumento (Quartus) al quale ti riferisci quindi in mancanza di altre indicazioni l'unica cosa che può creare la discrepanza che non capisco in cosa consista è che l'interprete, non rilevando, forse, un condizionamento nel passaggio dallo stato 1 al 2 e viceversa, ne faccia un'unica sintesi.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto Utentebaudy » 12 mar 2015, 18:37

in pratica genera questa sequenza:
- stato zero isolato senza connessioni
- da stato 1 c'è una retroazione verso se stesso e connessione a stato 2
- da stato 2 non c'è connessione in avanti verso stato 1 o stato 0
In pratica totalmente diverso da ciò che ci si aspetta
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

2
voti

[4] Re: Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto Utenteboiler » 13 mar 2015, 19:54

Un paio di cose che mi sono saltate all'occhio:
  • manca lo statement "when others". Sembra irrilevante, ma certi compiler fanno porcherie se non c'è, altri (Synopsys DC) si rifiutano di compilare se non c'è.
  • completa la sensitivity list del processo delta. Le regole per le sensitivity lists sono semplici: se il processo è combinatorio, ci va tutto. Se il processo è sequenziale ci vanno solo ed esclusivamente clock e reset. Lo so che tu sai che l'unico segnale che triggera una nuova valutazione è PS, ma non è rilevante. Ci va tutto ;-)
  • hai dei signal assignments in un processo sequenziale. È un peccato mortale :mrgreen: Spostali nell'altro processo (e aggiorna la sensitivity list, lo si dimentica volentieri).
  • i registri in cui memorizzi lo stato non hanno un reset (quelli instanziati dal processo state_out) così la macchina partirà in uno stato qualsiasi, senza che tu possa decidere che sia lo stato 0. È possibile che il compiler abbia ottimizzato la netlist eliminando lo stato 0 per questo motivo. Aggiungi un reset.
Dopo aver ricompilato se il problema non è sparito, posta il risultato della sintesi. È particolarmente importante vedere il numero di flip-flops instanziati e che non ci siano latches. Normalmente poi le FSM venno indicate chiaramente (sono eternità che non uso quartus, ma mi stupirebbe se non lo facesse).

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5602
Iscritto il: 9 nov 2011, 12:27

0
voti

[5] Re: Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto Utentebaudy » 14 mar 2015, 16:46

grazie infinite Boiler ... appena provo ti faccio sapere
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[6] Re: Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto Utentebaudy » 18 mar 2015, 17:56

Ragazzi ho risolto, come consigliato ho inserito lo stato di RESET e adesso il funzionamento è quello desiderato. Grazie
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[7] Re: Problemi con pallogramma in quartus (VHDL)

Messaggioda Foto Utenteboiler » 18 mar 2015, 18:18

Bene :ok:
Fa piacere sapere che hai risolto!

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5602
Iscritto il: 9 nov 2011, 12:27


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti