11. KÓDÁTALAKÍTÓ TERVEZÉSE HÉTSZEGMENSES KIJELZŐHÖZ A FEJLESZTŐLAPON
1
Számos alkalmazásban elegendő egyszerű, hétszegmenses LED vagy LCD kijelzővel megjeleníteni a bináris formában keletkező tartalmat, elsősorban a bináris formában kódolt decimális számjegyeket. Ennél a tervezésnél a BCD kódot a Basys2 fejlesztőlap kapcsolóival hozzuk létre, a lapon található LED kijelző jeleníti meg a tartalmat. A tervezendő hálózat tisztán kombinációs jellegű. Ebből adódóan nincs szükség órajelre. 2
11.1. ÚJ PROJEKT LÉTREHOZÁSA Az új projekt létrehozása ugyanúgy történik, ahogy azt az előző példában (10.1) láttuk. A beállítások ablakban (Project Settings) a korábban megnyitott projekt beállításai jelennek meg. Ha nem akarunk áttérni másik FPGA eszközre, akkor nem kell semmit igazítani a beállításokon. 3
11.2. FELADAT DEFINIÁLÁSA A fejlesztőlapon az SW0...SW7 kapcsolók a bemutatott módon vannak bekötve. Úgynevezett váltókapcsolókról van szó, amelyek alsó állásban logikai nullát, a felső állásban logikai egyest hoznak az FPGA eszköz megfelelő kivezetéseire (jobb oldalon).
4
A
5
Nincs szükség felhúzó ellenállásokra, viszont minden bemeneten van egy-egy soros ellenállás. Ennek a szerepe, hogy megakadályozza az FPGA kivezetésének túlterhelését, ha tévedésből az adott kivezetést kimenetnek definiálnánk és a kapcsoló állásával ellentétes logikai szintet hoznánk. A hétszegmenses-, négy számjegyes kijelzőt a Basys2 fejlesztőlapon a következő módon ábrázják 6
A
7
11.3. TERV HDL LEÍRÁSA A kódátalakító Verilog nyelvi leírását alább láthatjuk. Jelen esetben csak egy számjegynek kell működnie. Ezt a megfelelő adatfolyam szintű kódrészlettel (assign) oldottuk meg – az AN0 jel kap csak logikai nulla értéket, így a jobb szélső kijelző anódját húzzuk csak magas logikai szintre.
8
A szükséges kódátalakítást az always eljárásban szereplő case szerkezettel írtuk le. Tekintettel arra, hogy az always eljárás érzékeny bármely bemeneti jel változására (csillag), a szintézer kombinációs hálózatot fog előállítani. Ennek ellenére, formális okokból a szegmenseket meghajtó SSD jeleket regiszter típusúra kell deklarálni (de a szintézer nem hoz létre regisztert). 9
module BCD2SSD(input[3:0] BCD, output reg [6:0] SSD, output AN0, output AN1, output AN2, output AN3); //LED segments abc_defg localparam [6:0] BLANK= 7'b111_1111, ZERO = 7'b000_0001, ONE = 7'b100_1111, TWO = 7'b001_0010, THREE = 7'b000_0110, FOUR = 7'b100_1100, 10
FIVE = 7'b010_0100, SIX = 7'b010_0000, SEVEN = 7'b000_1111, EIGHT = 7'b000_0000, NINE = 7'b000_0100; assign {AN3, AN2, AN1, AN0} = 4'b1110; always@(*)
11
begin case(BCD) 4'd0: SSD = ZERO; 4'd1: SSD = ONE; 4'd2: SSD = TWO; 4'd3: SSD = THREE; 4'd4: SSD = FOUR; 4'd5: SSD = FIVE; 4'd6: SSD = SIX; 4'd7: SSD = SEVEN; 4'd8: SSD = EIGHT; 4'd9: SSD = NINE; default: SSD = BLANK; endcase end endmodule 12
11.4. FELHASZNÁLÓI MEGKÖTÉSEK BEÁLLÍTÁSA A modulnak négy bemenete van: négy kapcsolóval adjuk meg a megjelenítendő szám BCD kódját. A megkötések fájlban a négy első sor erre vonatkozik. Az SW0, SW1, SW2, SW3 kapcsolókkal összekötött FPGA kivezetések elnevezéseit leolvashatjuk a Basys2 lap felirataiból, vagy a lap kapcsolási rajzáról. 13
A kimenetek száma 7+4. Hét kimenet a LED kijelző egyes szegmenseit vezérli, a további négy kimenet az egyes számjegyeket kapcsolja az LED kijelző közös anódján keresztül. Esetünkben egyetlen számjegy kell, hogy működjön, a többiek a HDL leírás szerint le vannak tiltva. Letiltás nélkül a kijelző zavarérzékeny, a nem használt számjegyeket szabálytalanul ki-be kapcsolgatja, ez miatt csökkentett fényerővel ugyan, de minden szegmens világítana. 14
11.5. LOGIKAI SZINTÉZIS A szintézert a Processes ablak Synthesize – XST gombjára kattintva indítjuk el. Valójában célszerű mindjárt első lépésben a Generating Programming File gombra kattintani, ekkor az egész folyamat automatikusan végbemegy. A szintézis eredményét a Design Summary ablakban ellenőrizhetjük. Ebben a példában hét LUT valósítja meg a hét szegmens dekódolását a rendelkezésre álló 4896 közül. 15
11.6. HARDVERES PROGRAMOZÁS ÉS A MŰKÖDÉS ELLENŐRZÉSE A programozáshoz az Adept szoftvert használjuk a 10.6 pontban leírt módon. Ha a fent megadott HDL leírás szerint végezzük el a programozást, megfigyelhetjük, hogy az alkalmazott kijelzőn halványan ugyan, de világít a tizedespont. A tizedesponttal nem foglalkoztunk a leírásban, így az szándékos vezérlést nem kap. A világítás oka éppen ez: vezérlés nélkül a zavarok jutnak kifejezésre és időnként bekapcsolják a tizedespontot. 16