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