`0` en

advertisement
VHDL Taal beschrijvingen
• Multivalue logic
• Functies in VHDL
• Eigen types definiëren
• Kloksignalen en testbenches
HAN-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:
Hoe beschrijf je dit in VHDL?
De waarheidstabel is:
0 1 Z
TYPE tri IS (‘0’, ‘1’,’Z’);
FUNCTION “AND” (left, right: tri) RETURN tri IS
AND
TYPE tri_array IS ARRAY (tri, tri) OF tri;
0
0 0 0
1
0 1 1
(‘0’,’1’,’1’),
Z
0 1 1
(‘0’,’1’,’1’));
CONSTANT and_table : tri_array := ((‘0’,’0’,’0’),
BEGIN
RETURN and_table (left, right);
END FUNCTION “AND”;
HAN-University
2
STD_ULOGIC type
IEEE 1164: standaard die 9 mogelijke waarden en bij behorende
functies beschrijft:
AND waarheids tabel
TYPE std_ulogic IS (‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’, ‘-‘);
‘U’
‘X’
‘0’
‘1’
‘Z’
‘W’
‘L’
‘H’
‘-‘
Unitialized
geforceerde onbekende
geforceerde 0
geforceerde 1
hoge impedantie
zwakke onbekende
zwakke 0
zwakke 1
don’t care
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
HAN-University
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
3
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.
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
a <= out1
a <= 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
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
HAN-University
4
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.
HAN-University
5
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:
HAN-University
rst: PROCESS IS
BEGIN
reset <= ‘1’;
WAIT FOR 5 ns;
reset <= ‘0’;
WAIT FOR 5ns;
reset <= ‘1’;
WAIT;
END PROCESS rst;
6
Resultaten naar file schrijven:
Wegschrijven van stoplicht state met tijd op een regel;
monitor: PROCESS (hoofdweg_groen, zijweg_groen) IS
VARIABELE linebuffer : line;
BEGIN
Write(linebuffer, NOW)
IF hoofdweg_groen = ‘1’ THEN
Write(linebuffer, STRING’(“Hoofdweg is groen)
ELSE
Write(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.
HAN-University
7
Download