FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák
FelültöltésVHDL n A VHDL erősen tipizált nyelv: ha egy függvény pl. bit_vector típust vár, nem lehet bemenő paraméternek pl std_logic_vector-t adni. n Overloading is possible in VHDL, for either enumeration literals or subprograms (procedures and functions). n A felültöltés előnye, hogy segítségével a VHDL kódok könnyebben olvashatók és tömörebbek n Example of overloading enumeration literals: TYPE wire_color IS (green, black, red) -- custom enumeration type TYPE traffic_light IS( green, yellow, red, flashing) -- overloaded Áttekintés
FelültöltésVHDL n A subprogram can be overloaded on the basis of the calling code. n In order to do this, multiple instances of the same subprogram must be declared. n The compiler examines the arguments sent to the subprogram and then decides which instance of it to use. n If a function call cannot be resolved, an error is generated Alprogramok felültöltése
FelültöltésVHDL Példa: MAX függvény n A MAX függvényt többször egymás után meghatározza az EX_PACK nevű csomag, különböző adat típusú argumentummal n Az alábbi függvény meghatározások lehetővé teszik, hogy a MAX függvény különböző vektorhosszúságú bemenő adathoz is használható legyen
FelültöltésVHDL Az EX_PACK csomag (példa) Library ieee; Use ieee.std_logic_1164.ALL; Package ex_pack is function max(a,b: in std_logic_vector) return std_logic_vector; function max(a,b: in std_logic_vector) return std_logic_vector; function max(a,b: in vlbit_vector) return vlbit_vector; function max(a,b: in vlbit_vector) return vlbit_vector; function max(a,b: in integer) return integer; function max(a,b: in integer) return integer;end; Package body ex_pack is function max(a,b: in std_logic_vector) return std_logic_vector is function max(a,b: in std_logic_vector) return std_logic_vector is begin begin if a>b then return a; if a>b then return a; else return b; else return b; end if; end if;end; function max(a,b: in vlbit_vector) return vlbit_vector is begin begin if a>b then return a; if a>b then return a; else return b; else return b; end if; end if; end; end; function max(a,b: in integer) return integer is function max(a,b: in integer) return integer is begin begin if a>b then return a; if a>b then return a; else return b; else return b; end if; end if; end; end;end;
FelültöltésVHDL Példa a MAX függvény alkalmazására Library ieee; Use ieee.std_logic_1164.ALL; Use work.ex_pack.ALL; Entity ex is port ( a1,b1: in std_logic_vector(3 downto 0); a2,b2: in vlbit_vector(4 downto 0); port ( a1,b1: in std_logic_vector(3 downto 0); a2,b2: in vlbit_vector(4 downto 0); a3,b3: in integer; a3,b3: in integer; c1: out std_logic_vector(3 downto 0); c2: out vlbit_vector(4 downto 0); c1: out std_logic_vector(3 downto 0); c2: out vlbit_vector(4 downto 0); c3: out integer); c3: out integer);end; Architecture ex_beh of ex is begin c1<=max(a1,b1); -- max(a,b:std_logic_vector) függvény használata c1<=max(a1,b1); -- max(a,b:std_logic_vector) függvény használata c2<=max(a2,b2); -- max(a,b:vlbit_vector) függvény használata c2<=max(a2,b2); -- max(a,b:vlbit_vector) függvény használata c3<=max(a3,b3); -- max(a,b:integer) függvény használata c3<=max(a3,b3); -- max(a,b:integer) függvény használataend;
FelültöltésVHDL IEEE könyvtárban található felültöltött függvények n “+”, “-”, “*”, “=“, “ “, “/=“, “ =“ n bemenő ill. kimenő adat típusaik az STD_LOGIC_UNSIGNED csomagban: –std_logic –std_logic_vector –integer n Példák: function “=“ (L:std_logic_vector; R:integer) return boolean; function “>“ (L:std_logic_vector; R:integer) return boolean;
FelültöltésVHDL
FelültöltésVHDL Példa a felültöltött “=“ használatára Architecture rtl of ex is signal a,b,c: std_logic_vector(15 downto 0); begin process(a,b,c,d1,d2,d3) process(a,b,c,d1,d2,d3) begin begin if a=12 or c=11 then q<=d1; -- bal oldalon egy std_logic_vector, jobb oldalon if a=12 or c=11 then q<=d1; -- bal oldalon egy std_logic_vector, jobb oldalon -- egy egész van -- egy egész van elseif b>5 then q 5 then q<=d2; else q<=d3; else q<=d3; end if; end if; end process; end process;end;
FelültöltésVHDL Az std_logic_vector kétféle értelmezése n Az IEEE könyvtár két csomagot tartalmaz, amelyben az std_logic_vetor felültöltött adattípusa: az std_logic_unsigned és az std_logic_signed n Attól függően, hogy a kettő közül melyik csomagot jelentik be a VHDL kódban, az std_logic_vector típusú adatokat előjel nélküliként vagy előjelesként értelmezik n Példák: Library ieee; Use ieee.std_logic_1164.ALL; Use ieee.std_logic_unsigned.ALL;... Architecture rtl of ex is begin q<=a+b; -- előjel nélküli összeadás q<=a+b; -- előjel nélküli összeadás end; Library ieee; Use ieee.std_logic_1164.ALL; Use ieee.std_logic_signed.ALL;... Architecture rtl of ex is begin q<=a+b; -- előjeles összeadás q<=a+b; -- előjeles összeadás end;
FelültöltésVHDL Előjeles és előjel nélküli vektorok ugyanazon építményben n Példa: Library ieee; Use ieee.std_logic_1164.ALL; Use ieee.std_logic_arith.ALL;... Architecture rtl of ex is begin q1<=unsigned(a) + unsigned (b); -- előjel nélküli összeadás q1<=unsigned(a) + unsigned (b); -- előjel nélküli összeadás q2<=signed(a) + signed (b); -- előjeles összeadás q2<=signed(a) + signed (b); -- előjeles összeadás end;
FelültöltésVHDL Átvitel bit kezelése n Ha pl. az ieee.std_logic_unsigned csomagot használjuk és vektor összeadására és az átvitel bit kell az eredménybe, akkor az egyik összeadandót meg kell növelni egy bittel (pl. ‘0’-val) n A “+” függvény eredménye olyan vektor, amelynek hossza megegyezik a leghosszabb bemeneti argumentum hosszával n Példa: Library ieee; Use ieee.std_logic_unsigned.ALL;... signal a,b,q2: std_logic_vector(7 downto 0);... q1<=(‘0’ & a) + b; -- átvitel bittel (9 bit) q1<=(‘0’ & a) + b; -- átvitel bittel (9 bit) q2<=a + b; -- nincs átvitel bit (8 bit) q2<=a + b; -- nincs átvitel bit (8 bit)