riconoscitore di sequenza in VHDL

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

riconoscitore di sequenza in VHDL

Postby freedoors » 16 Aug 2014, 10:01

Premetto che utilizzo "xilinx" e "modelsim".
Buongiorno a tutti ,devo progettare un'entità che sia in grado a partire da un ingresso seriale(din) di generare due uscite(out_h e out_l) in corrispondenza di multipli interi del 16 impulso di clock.
I due segnali dovranno essere emessi sole se i bit di posizione dispari in arrivo dall'ingresso soddisfano la parola chiave(01001110) e dovranno contenere rispettivamente:
- OUTH i 4 bit più significativi di posizione pari in arrivo dall’ingresso;
- OUTL i 4 bit meno significativi derivanti dalla somma della parola chiave con
gli otto bit di posizione pari in arrivo dall’ingresso.
sono presenti segnali di enable e reset.

Ecco la mia soluzione:
Code: Select all
entity agosto7 is
port(clk,reset,enable,din:in std_logic;
     out_h,out_l: out std_logic_vector(3 downto 0));
end agosto7;

architecture Behavioral of agosto7 is
signal cnt: integer:=0;
signal reg: std_logic_vector(15 downto 0):="0000000000000000";
signal reg1: std_logic_vector(7 downto 0):="00000000";
signal outh: std_logic_vector(3 downto 0);
signal outl: std_logic_vector(3 downto 0);
begin
process(clk,reset,enable)
begin
if rising_edge(clk) then
if enable='1' then
if reset='1' then
if cnt>=0 and cnt<=15 then
reg<=reg(14 downto 0)&din;
cnt<=cnt+1;
elsif cnt=16 then
reg1<=reg(15)&reg(13)&reg(11)&reg(9)&reg(7)&reg(5)&reg(3)&reg(1);
cnt<=cnt+1;
elsif cnt=17 then
if reg1="01001110" then
outh<=reg(14)&reg(12)&reg(10)&reg(8);
outl<=reg1(3 downto 0)+reg(14)&reg(12)&reg(10)&reg(8);
cnt<=cnt+1;
else
outh<="ZZZZ";
outl<="ZZZZ";
cnt<=cnt+1;
end if;
elsif cnt=18 then
reg<="0000000000000000";
reg1<="00000000";
cnt<=0;
end if;
else--reset=0
outh<="XXXX";
outl<="XXXX";
cnt<=0;
end if;
else--enable=0
outh<="ZZZZ";
outl<="ZZZZ";
cnt<=0;
end if;
end if;
end process;
out_h<=outh;
out_l<=outl;
end Behavioral;


e simulando ottengo dei problemi di visualizzazione che spero sappiate aiutarmi a capire.. grazie in anticipo.
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 17 Aug 2014, 11:36

Salve freedoors,

outl<=reg1(3 downto 0)+reg(14)&reg(12)&reg(10)&reg(8);


E' corretto?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 09:28

Ciao Leonardo , intanto ti ringrazio per avermi risposto , e poi ti dico non è corretto scriverlo nel seguente modo forse?

Code: Select all
outl<=reg(14)&reg(12)&reg(10)&reg(8)+reg1(3 downto 0);


cambia qualcosa oppure no?!
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 09:36

Il punto è che reg è un std_logic_vector ovvero un vettore di bit.

Generalmente non supportano direttamente l'addizione, il sintetizzatore non saprebbe interpretare correttamente i bit, non conosce ad esempio se sono numeri con segno o senza segno.

Il codice sintetizza senza errori? Utilizzi ISE?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 10:07

si non mi da nessun errore di sintassi... ho "invertito" la sintassi di quell'istruzione ed il problema sussiste.
Se può essere di maggiore aiuto potrei postarti uno screenshot di modelsim..
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 10:12

Utilizzando ISE o Quartus il codice non compila..

Posta il progetto completo (es. tramite dropbox o similari e postando il link) e lo screenshot di modelsim che vediamo
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 10:19

Scusami Leonardo , per quanto riguarda modelsim riesco facilmente a fare uno screenshot, ma per il codice come faccio (non ho mai utilizzato dropbox).
Credevo che ciò che ho postato nel primo messaggio fosse sufficiente..
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 10:29

Non compila il codice e come a me penso anche gli altri, la soluzione è veloce, ma non voglio modificare il codice. Così vediamo anche i vari settings del progetto.

Fai uno zip del progetto e allegalo al messaggio se non riesci diversamente anche se in genere su questo forum è prassi usare servizi esterni per i file (dropbox, skydrive, google drive, vari siti di file upload etc..)
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 10:38

ecco qui :
Attachments
2.png
2.png (77.78 KiB) Viewed 35448 times
agosto7.zip
(100.74 KiB) Downloaded 1231 times
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 10:51

Come sospettavo hai utilizzato STD_LOGIC_ARITH

Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


mentre in genere è preferibile utilizzare la libreria definita dallo standard

Code: Select all
use IEEE.NUMERIC_STD.ALL;


e specificare come trattare i numeri, per evitare ambiguità. La prossima volta non omettere la dichiarazione delle librerie nel codice che posti.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 11:14

ho aggiunto quella libreria ma non vedo cambiamenti in fase di simulazione :?
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 11:35

La libreria riguarda solamente la compilazione del codice, così come avevi postato inizialmente non compilava.
Quali sono le anomalie che riscontri in simulazione?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 11:38

nei messaggi sopra c'è lo screenshot di modelsim,come puoi ben vedere le 2 uscite hanno un comportamento analogo che proprio non riesco a spiegarmi!!
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 11:49

Prova a scrivere un testbench per riprodurre il problema, il segnale rosso può indicare che qualcosa non è stato inizializzato ma vediamo dopo che avrai fornito il testbench.

Personalmente il reset lo trasformerei in asincrono.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 12:27

Analizzare i segnali interni del modulo ti può aiutare?

forum.png
forum.png (20.53 KiB) Viewed 35440 times


PS: Sotto il testbench che ho scritto per generare gli stimoli

Code: Select all
LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                               

ENTITY forum_vhd_tst IS
END forum_vhd_tst;

ARCHITECTURE forum_arch OF forum_vhd_tst IS
   SIGNAL clk : STD_LOGIC;
   SIGNAL din : STD_LOGIC;
   SIGNAL enable : STD_LOGIC;
   SIGNAL out_h : STD_LOGIC_VECTOR(3 DOWNTO 0);
   SIGNAL out_l : STD_LOGIC_VECTOR(3 DOWNTO 0);
   SIGNAL reset : STD_LOGIC;
   COMPONENT forum
      PORT (
      clk : IN STD_LOGIC;
      din : IN STD_LOGIC;
      enable : IN STD_LOGIC;
      out_h : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
      out_l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
      reset : IN STD_LOGIC
      );
   END COMPONENT;
BEGIN
   i1 : forum PORT MAP ( clk => clk, din => din, enable => enable, out_h => out_h, out_l => out_l, reset => reset );
PROCESS                                                                         
BEGIN                                                       
   reset <= '1';
   enable <= '1';
   din <= '0';
   wait for 100 ps;
   din <= '1';
   wait for 300 ps;
   din <= '0';
   wait for 400 ps;
   din <= '1';
   wait for 600 ps;
   din <= '0';
   wait for 300 ps;                                                 
END PROCESS;                 
                         
PROCESS                                             
BEGIN
   clk <= '0';                                                       
   wait for 10 ps;   
   loop
      clk <= '1';
      wait for 50 ps;
      clk <= '0';
      wait for 50 ps;                                           
   end loop;
END PROCESS;       
                                 
END forum_arch;
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 13:58

ma tu che hai analizzato piu nel dettaglio il problema , ti sembra funzionante il programma?
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 18 Aug 2014, 14:03

freedoors wrote:ma tu che hai analizzato piu nel dettaglio il problema , ti sembra funzionante il programma?


Non ho analizzato minimamente nel dettaglio il codice, questo è compito tuo :D
Spiegaci bene cosa ti aspetti nelle forme d'onda e qualche tua ipotesi sul perché non è così.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: riconoscitore di sequenza in VHDL

Postby freedoors » 18 Aug 2014, 14:29

mi aspetterei che le due uscite out_h e out_l fossero quelle indicate nel programma visto che la sequenza è riconosciuta... sul perche non sia cosi non ne ho idea e sono qui a chieder :D lo
freedoors
 
Posts: 9
Joined: 16 Aug 2014, 09:27

Re: riconoscitore di sequenza in VHDL

Postby Leonardo » 19 Aug 2014, 09:29

Hai scritto da solo il codice? Prova a spiegare come hai cercato di risolvere il problema
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 10 guests

cron