Típusváltás (Type Conversion) n Áttekintés n Példák
Áttekintés n A VHDL-ben nem lehetséges különböző adattípusú jeleket egymáshoz rendelni n Ennek elkerülésére a tervekben rendszerint végig azonos adattípust használnak n A leggyakoribb műveletek felül is tölthetők –Ilyen pl. a “=“, amely felhasználható típus pl. egy std_logic_vector és egy integer összehasonlítására típusváltás nélkül n Sok esetben azonban szükség van típusváltásra n Ezek különböző beépített függvényeket használnak az alkalmazott könyvtár-csomagtól függően
Az IEEE Std szabványbeli logikai állapotok n ‘U’kezdőértékre nem beállított n ‘X’kényszerített ismeretlen n ‘0’kényszerített 0 n ‘1’kényszerített 1 n ‘Z’nagy impedanciás állapot n ‘W’gyenge ismeretlen n ‘L’gyenge 0 n ‘H’gyenge 1 n ‘-’Don’t care
Az STD_LOGIC_1164-gal lehetséges típusváltások n A következő adattípusok közötti váltásokat támogatja: –std_logic bit –std_logic_vector bit_vector –std_ulogic bit –std_ulogic_vector bit_vector n Példa: function to_stdlogicvector(s: bit_vector) return std_logic_vector;
Példa a to_stdlogicvector függvény használatára Library ieee; Use ieee.std_logic_1164.ALL; Entity ex is port (a,b: in bit_vector(3 downto 0); port (a,b: in bit_vector(3 downto 0); q: out std_logic_vector(3 downto 0)); q: out std_logic_vector(3 downto 0)); end; Architecture rtl of ex is begin q<=to_stdlogicvector(a and b); q<=to_stdlogicvector(a and b); end;
Std_logic_vector és integer közti váltás function conv_integer(arg: std_logic_vector) return integer; function conv_std_logic_vector(arg: integer; size: integer) return std_logic_vector; Példa: Entity ex is port (a,b,c: in integer range 0 to 15; q: out std_logic_vector(3 downto 0)); port (a,b,c: in integer range 0 to 15; q: out std_logic_vector(3 downto 0)); end; Architecture rtl of ex is begin q<=conv_std_logic_vector(a,4) when conv_integer(c) = 8 else q<=conv_std_logic_vector(a,4) when conv_integer(c) = 8 else conv_std_logic_vector(b,4); conv_std_logic_vector(b,4); end;
A kód olvashatóbbá tétele n Ha a bemeneti és a kimeneti adatok is egyneműek, akkor nem lenne szükség típusváltásra n Előfordulhat, hogy a típusváltás a kód olvashatóbbá tételéhez szükséges n Példa: Entity ex is port (a,b,c: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0)); port (a,b,c: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0)); end; Architecture rtl of ex is begin q<=a when conv_integer(c) = 8 else b; q<=a when conv_integer(c) = 8 else b; end;
A kód még olvashatóbbá tétele n Ha a szintézis eszköz támogatja az std_logic_vector-ra és az integer-re vonatkozó “=“ függvény felülírását, akkor még olvashatóbb kódot lehet létrehozni: Entity ex is port (a,b,c: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0)); port (a,b,c: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0)); end; Architecture rtl of ex is begin q<=a when c = 8 else b; q<=a when c = 8 else b; end; n A szintézis szempontjából nem jelent különbséget a váltófüggvény használata, mert nem használ el egyetlen kaput sem n Az alkalmazásának csak kényelmi okai vannak a kód írásánál és megértésénél