Lord|DaNg3R
12-02-2010, 10:13
Salve ragazzi! Ho visto che questo forum è molto ben fornito di cervella capaci in molti settori e ho notato che anche x il VHDL sapete dare il vostro contributo ;)
Ho un esame di elettronica digitale lunedì e vorrei fare qualche prova del 9 sulle mie capacità :P
Vi linko il testo dell'appello di gennaio: LINK (http://dragon4444.interfree.it/testo.pdf)
Di seguito invece vi riporto la soluzione per 3 dei 4 punti dell'esercizio a pagina 2 ( quello mancante è dato dal fatto che al momento non mi interessa averne soluzione poichè una volta trovata la giusta configurazione del diagramma ASM, completare il diagramma temporale diventa piuttosto semplice. )
Punto 1: DIAGRAMMA ASM (http://dragon4444.interfree.it/ASM.jpg)
Punto 2:
( ho tralasciato l'inclusione di librerie ecc.. )
entity regm is
port (
ck,ld_min,min_enable,min_reset: in std_logic;
q: in std_logic_vector ( 7 downto 0 );
m: out std_logic_vector ( 7 downto 0 )
);
end entity;
architecture rm of regm is
begin
process( ld_min,min_enable,min_reset );
if ( min_reset = '1' ) then
m <= ( others => '1' );
elsif ( ( ck'event ) and ( ck = '1' ) ) then
if ( ( ld_min = '1' ) and ( min_enable = '1' ) ) then
m <= q; else m <= m; endif;
endif;
end process;
end architecture;
Punto 4:
Essendo che il numero di temperature che vogliamo poter visualizzare ammontano ad un totale di 256 e poiché disponiamo di 8 bit per codificare le nostre temperature, questo ci porta ad avere, appunto, 256 combinazioni di valori differenti memorizzabili e,quindi, visualizzabili. Una strategia rudimentale, essendo che dobbiamo " pilotare " quattro display a 7 segmenti così interpretabili:
http://dragon4444.interfree.it/display.jpg
potrebbe essere quella si assegnare ad ognuna delle 256 differenti combinazioni degli 8 bit, la relativa configurazione di LED accesi. Ovviamente il valore 00000000 rappresenta -28°C e 11111111, invece, 100°C tra cui ogni incremento di valore binario corrisponde a mezzo grado di temperatura. L'uscita del decoder potrebbe essere formata o da 28 uscite o da uno std_logic_vector ( 27 downto 0 ) che andrà opportunamente letto ed interpretato. Per compattezza di scrittura ho scelto quest'ultima via. [ N.B. LED attivi alti ]
entity decoder is
port (
ingresso: in std_logic_vector ( 7 downto 0 );
uscita: out std_logic_vector ( 27 downto 0 )
);
end entity;
architecture dec of decoder is
begin
case ingresso is
when " 00000000 " => uscita <= " 0000001011011111111111111110 ";
when " 00000001 " => uscita <= " 0000001011011100011101011011 ";
...
when " 11111111 " => uscita <= " 0000110111111011111101111110 ";
end case;
end architecture;
Grazie mille in anticipo a chi vorrà potermi assistere per la sua pazienza e il suo contributo :)
Ho un esame di elettronica digitale lunedì e vorrei fare qualche prova del 9 sulle mie capacità :P
Vi linko il testo dell'appello di gennaio: LINK (http://dragon4444.interfree.it/testo.pdf)
Di seguito invece vi riporto la soluzione per 3 dei 4 punti dell'esercizio a pagina 2 ( quello mancante è dato dal fatto che al momento non mi interessa averne soluzione poichè una volta trovata la giusta configurazione del diagramma ASM, completare il diagramma temporale diventa piuttosto semplice. )
Punto 1: DIAGRAMMA ASM (http://dragon4444.interfree.it/ASM.jpg)
Punto 2:
( ho tralasciato l'inclusione di librerie ecc.. )
entity regm is
port (
ck,ld_min,min_enable,min_reset: in std_logic;
q: in std_logic_vector ( 7 downto 0 );
m: out std_logic_vector ( 7 downto 0 )
);
end entity;
architecture rm of regm is
begin
process( ld_min,min_enable,min_reset );
if ( min_reset = '1' ) then
m <= ( others => '1' );
elsif ( ( ck'event ) and ( ck = '1' ) ) then
if ( ( ld_min = '1' ) and ( min_enable = '1' ) ) then
m <= q; else m <= m; endif;
endif;
end process;
end architecture;
Punto 4:
Essendo che il numero di temperature che vogliamo poter visualizzare ammontano ad un totale di 256 e poiché disponiamo di 8 bit per codificare le nostre temperature, questo ci porta ad avere, appunto, 256 combinazioni di valori differenti memorizzabili e,quindi, visualizzabili. Una strategia rudimentale, essendo che dobbiamo " pilotare " quattro display a 7 segmenti così interpretabili:
http://dragon4444.interfree.it/display.jpg
potrebbe essere quella si assegnare ad ognuna delle 256 differenti combinazioni degli 8 bit, la relativa configurazione di LED accesi. Ovviamente il valore 00000000 rappresenta -28°C e 11111111, invece, 100°C tra cui ogni incremento di valore binario corrisponde a mezzo grado di temperatura. L'uscita del decoder potrebbe essere formata o da 28 uscite o da uno std_logic_vector ( 27 downto 0 ) che andrà opportunamente letto ed interpretato. Per compattezza di scrittura ho scelto quest'ultima via. [ N.B. LED attivi alti ]
entity decoder is
port (
ingresso: in std_logic_vector ( 7 downto 0 );
uscita: out std_logic_vector ( 27 downto 0 )
);
end entity;
architecture dec of decoder is
begin
case ingresso is
when " 00000000 " => uscita <= " 0000001011011111111111111110 ";
when " 00000001 " => uscita <= " 0000001011011100011101011011 ";
...
when " 11111111 " => uscita <= " 0000110111111011111101111110 ";
end case;
end architecture;
Grazie mille in anticipo a chi vorrà potermi assistere per la sua pazienza e il suo contributo :)