WebElektronika

Konverziók a VHDL nyelvben I.

person access_time 2015.04.20.
Megismerjük most a különböző konverziós lehetőségeket. Az ezekhez szükséges függvényeket nem az std_logic_1164-es csomagból vesszük elő (nincsenek is ebben ilyenek), hanem a numeric_std-ből. Hasonló konverziós lehetőségünk van, ha az std_logic_arith csomagot alkalmaznánk, de erre most nem térünk ki.


A következő csomagok egyikét tudjuk alkalmazni, ha konverziókat szeretnénk megvalósítani a VHDL nyelvben :

  • numeric_std : IEEE standard, ez javasolt
  • std_logic_arith : Synopsys

 

Konverziók

Most a küönböző konverziókat tekintjük át, amelyeknek segítségével típusokat tudunk úgy megváltoztatni, hogy az ábrázolt érték nem változik, csak a típusa. Hasonló ez ahhoz, amelyet az OOP világában parse-olásnak neveznek.

 

1. unsigned-ből, signed-ből integer

Most "signed" és "unsigned" típusokból készítünk "integer"-t, ehhez a to_integer() függvényt használjuk fel. Signal-ként definiáljuk az "A"-t és a "B"-t, ezek 8 bites (un)signed vektorok. A to_integer() függvény kényelmes használatával alakítjuk át integer-ré (1. ábra).

kep
1. ábra   A to_integer() függvény használata
 

 

2. integer-ből signed, unsigned

Most azt nézzük meg, hogy hogyan lehet integer-ből (un)signed típust előállítani. Fontos az, hogy ebben az esetben meg kell adnunk a (un)signed típusnak a méretét is. Ez a példánkban 8. A konverzió során nem kerül ellenőrzésre az, hogy a megadott méretbe "belefér"-e az átalakítandó egész szám. A konverzióhoz a to_signed() és a to_unsigned() függvényeket használjuk fel (2. ábra).

kep
2. ábra
 

A felépítményben (architecture) a "C" jel deklarálásakor adtunk értéket, ez, az "A" és a "B" értéke látható a 3. ábrán lévő szimulációs eredményen.

kep
3. ábra   Az integer, a signed és az unsigned értékek
 

 

3. std_logic_vector-ból (un)signed és (un)signed-ből std_logic_vector

Ebben az alfejezetben azt a konverziót nézzük meg, amikor std_logic_vector-ból készítünk (un)signed típusokat, illetve ennek a megoldásnak az "inverzét" is. Ezt nem is függvényekkel valósítjuk meg, a módszer nagyon hasonló a "C" nyelvben megismert cast-oláshoz (4. ábra).

kep
4. ábra   Típuskonverziók
 

 

4. integer-ből std_logic_vector

Hasonló típuskonverziót láthatunk itt is, de ez (integer-ből std_logic_Vector) nem megy egy lépésben. Először átalakítjuk az egész számunkat unsigned-dé (to_unsigned()) vagy signed-dé (to_signed()), majd végzünk egy típuskonverziót (5. ábra).

kep
5. ábra   Konverzió függvénnyel és cast-olás
 

A szimulációs eredmény a 6. ábrán látható.

kep
6. ábra   integer-ből std_logic_vector
 

 

5. std_logic_vector-ból integer

Végül azt nézzük át, amikor std_logic_vector-ként ábrázolt számot alakítunk át integer-ré. Ez a folyamat is két lépésben történik. Először az std_logic_vector-ból készítünk unsigned-et vagy signed-et (típuskonverzió, cast), ezután pedig a to_integer() függvény segítségével az (un)signed-ként ábrázolt eredményt átalakítjuk egésszé (7. ábra).

kep
7. ábra   std_logic_vector-ból egész
 

Ennek a megoldásnak a szimulációja látható a 8. ábrán.

kep
8. ábra   std_logic_vector -> integer