70 likes | 228 Views
Functies en procedures. Functies type conversie functies bit vector to integer en omgekeerd verkorte componenten met maar 1 output voor de hoog niveau beschrijving Procedures verkorte componenten met meerdere outputs voor de hoog niveau beschrijving.
E N D
Functies en procedures • Functies • type conversie functies • bit vector to integer en omgekeerd • verkorte componenten met maar 1 output • voor de hoog niveau beschrijving • Procedures • verkorte componenten met meerdere outputs • voor de hoog niveau beschrijving • Declaratie van een functie of procedure • Ofwel in het begin van een architectuur • Ofwel in een package
Functie regels • Er is maar een Return waarde • Parameters kunnen alleen maar input zijn • “in” hoeft niet gedeclareerd te worden • Parameters mogen niet veranderd worden • Wait instructies zijn niet toegelaten • Alle statements moeten sequentiële statements zijn • Interne variabelen mogen gedeclareerd worden • Signalen mogen niet gedeclareerd worden
Functie voorbeeld package majorities is function majority (a, b, c: bit) return bit; package body majorities is function majority (a, b, c: bit) return bit is begin return ((a and b) or (a and c) or (b and c)); end majority; end majorities;
Procedure regels • Parameters kunnen output en input zijn • “in” hoeft niet gedeclareerd te worden • Alle statements moeten sequentiële statements zijn • Wait statements zijn toegelaten • Interne variabelen mogen gedeclareerd worden • Signalen mogen niet gedeclareerd worden
Procedure D FF procedure dff ( signal d: std_logic_vector; signal clk, rst: std_logic; signal q, q_bar: out std_logic_vector) is begin if rst = '1' then q <= (others => '0'); elsif clk'event and clk = '1' then q <= d; q_bar <= not d; end if; end procedure;
Overloading • Het creëren van verschillende functies die dezelfde operaties definiëren voor verschillende types. • Bv: "+" is in standaard VHDL gedefinieerd voor numeric types(integer, float, …) maar niet voor bit-vectoren • Door overloading kan dit ook voor bitvectors
Overloading operator voorbeeld function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is constant length: INTEGER := maximum(L'length, R'length); variable result : STD_LOGIC_VECTOR (length-1 downto 0); begin result := SIGNED(L) + SIGNED(R); return std_logic_vector(result); end; function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR is variable result : STD_LOGIC_VECTOR (L'range); begin result := SIGNED(L) + R; return std_logic_vector(result); end;