Upload
peter-aalderink
View
221
Download
2
Embed Size (px)
Citation preview
HAN-University
VHDL Taal beschrijvingen
• Multivalue logic
• Functies in VHDL
• Eigen types definiëren
• Kloksignalen en testbenches
2HAN-University
Multivalue logic
Het overloaden van functies en operatoren: uitbreiden van aantal mogelijke signaalwaarden naast ‘0’ en ‘1’. Doel: meer informatie geven over de signaaltoestand tijdens simulatie.
Voorbeeld: AND poort met hoog impedante ingangen:
AND0 1 Z
0 0 0 0
1 0 1 1
Z 0 1 1
De waarheidstabel is: Hoe beschrijf je dit in VHDL?
TYPE tri IS (‘0’, ‘1’,’Z’);
FUNCTION “AND” (left, right: tri) RETURN tri IS
TYPE tri_array IS ARRAY (tri, tri) OF tri;
CONSTANT and_table : tri_array := ((‘0’,’0’,’0’),
(‘0’,’1’,’1’),
(‘0’,’1’,’1’));
BEGIN
RETURN and_table (left, right);
END FUNCTION “AND”;
3HAN-University
STD_ULOGIC type
IEEE 1164: standaard die 9 mogelijke waarden en bij behorende functies beschrijft:
TYPE std_ulogic IS (‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’, ‘-‘);
‘U’ Unitialized
‘X’ geforceerde onbekende
‘0’ geforceerde 0
‘1’ geforceerde 1
‘Z’ hoge impedantie
‘W’ zwakke onbekende
‘L’ zwakke 0
‘H’ zwakke 1
‘-‘ don’t care
AND waarheids tabel
voor std_ulogic type:
AND U X 0 1 Z W L H -
U U U 0 U U U 0 U U
X U X 0 X X X 0 X X
0 0 0 0 0 0 0 0 0 0
1 U X 0 1 X X 0 1 X
Z U X 0 X X X 0 X X
W U X 0 X X X 0 X X
L 0 0 0 0 0 0 0 0 0
H U X 0 1 X X 0 1 X
- U X 0 X X X 0 X X
Met std_ulogic mag maar 1 waarde aan een signaal worden toegekend. Dus 1 source (out, inout, buffer, driver)
Meerder sources op signaal (bv uitgangen van tri state buffer) kan alleen met std_logic
4HAN-University
Multiple outputs
• Std_logic staat toe dat meerdere outputs aan een signaal verbonden worden
• Std_logic kan gedefinieerd worden als een subtype van std_ulogic omdat het slechts een uitbreidende functie is en de signaalwaarden niet veranderd.
a <= out1a <= out2
U X 0 1 Z W L H -
U U U U U U U U U U
X U X X X X X X X X
0 U X 0 X 0 0 0 0 X
1 U X X 1 1 1 1 1 X
Z U X 0 1 Z W L H X
W U X 0 1 W W W W X
L U X 0 1 L W L W X
H U X 0 1 H X W H X
- U X X X X X X X X
Wat gebeurt er als a <= ‘0’, en a <=’1’ ,
bij std_logic? En bij std_ulogic?
Alles bevindt zich in een gecompileerde package waarvan een library IEEE is gemaakt, de standaard die je hieruit wil gebruiken is std_logic: declareren voor elke entity, geldt dan ook voor alle bijbehorende architectures.
LIBRARY IEEE;
USE IEEE.std_logic_1164.all
OPDRACHT: Schrijf functie voor AND poort met 4 value logic(0 ,1, Z, X) waarvoor geldt (met afnemende prioriteit):
1 of meer inputs 0 geeft output 0,
1 of meer inputs X geeft output X
5HAN-University
Eigen types definiëren
VHDL staat de gebruiker toe om eigen types te definiëren: enumerated (opsomming) types.
ARCHITECTURE gedrag OF processor IS
TYPE my_state(reset, idle, dma_cycle, int_cycle);
…
SIGNAL state, next_state : my_state;
SIGNAL two_bit : STD_LOGIC_VECTOR(1 DOWNTO 0);
…
BEGIN
…
state <= reset; // correct
state <= 00; // NIET correct
state <= two_bit; // NIET correct
…
END gedrag;
Kun je dit wel implementeren? Synthese tools bieden wel de mogelijkheid om enumerated types te mappen naar een bitpatroon.
6HAN-University
Klok signaal maken:
Concurrent: clock <= NOT clock AFTER 10ns;
Werkt alleen als clock van type bit is, anders initialiseren:
SIGNAL clock : std_logic := ‘0’;
Process: clk: PROCESS IS
BEGIN
Clock <= ‘0’;
WAIT FOR 10 ns;
Clock <= ‘1’;
WAIT FOR 10ns;
END PROCESS clk;
Reset signaal maken:
rst: PROCESS ISBEGIN
reset <= ‘1’;WAIT FOR 5 ns;reset <= ‘0’;WAIT FOR 5ns;
reset <= ‘1’;
WAIT;END PROCESS rst;
7HAN-University
Resultaten naar file schrijven: Wegschrijven van stoplicht state met tijd op een regel;
monitor: PROCESS (hoofdweg_groen, zijweg_groen) ISVARIABELE linebuffer : line;
BEGINWrite(linebuffer, NOW)
IF hoofdweg_groen = ‘1’ THENWrite(linebuffer, STRING’(“Hoofdweg is groen)
ELSEWrite(linebuffer, STRING’(“Zijweg is groen)
END IF;Writeline(output, linebuffer)
END PROCESS;
OPDRACHT: maak een testbench die klok synchroon een 4 bits teller signaal genereert als output. De klok is 2 MHz en de output ijlt 100ns na op de klok.