Mérési jegyzőkönyv az ötödik méréshez A mérés időpontja: 2007-10-30 A mérést végezték: Nyíri Gábor kdu012 mérőcsoport A mérést vezető oktató neve: Szántó Péter A jegyzőkönyvet tartalmazó fájl neve: ikdu0125.doc Felhasznált eszközök: Eszköz megnevezése Az eszköz típusa Azonosító száma PC számítógép GEP 12 Mérőpanel SPARTAN3 12
1 Feladat definíció (Soros adó egység) Realizálás: FPGA mérőpanelen A soros adó egység start és stop bittel keretezett, speciális karakterpárosokat ad a panel aszinkron soros portjának TXD vonalán az RS232/V24 szabvány előírásainak megfelelően. (A Start bit 0 értékű, a Stop bit 1 értékű, a megfelelő jelszinteket az FPGA panelbe épített szintkonverter áramkör biztosítja.). Az adást a BTN1 gomb megnyomása indítja, az adást a BTN2 gomb megnyomása leállítja. (A BTN2 megnyomásakor éppen adott karakter adását teljesen befejezi.) Az egység minden Start bitnél kiad egy 1 bit hosszóságú impulzust a soros port RTS vonalán. Az adatátvitel paraméterei: Az egység az SW2 kapcsoló állapotától függően 0101010(1) vagy 1010101(0) karaktert ad folyamatosan egymás után. A karakterek az SW4 kapcsoló OFF állásában 7 bitesek, ON állásában 8 bitesek. A stop bitek száma 2. A Baud-rate 4800 vagy 9600, értéke az SW8 kapcsolóval választható.
Reset CLK bmode Reset CLK BR 2 Funkcionális tömbvázlat R T S S ta r t B IT C [ 3 :0 ] S to p B it - C o u n te r d M o d e B it - m p x T X D B a u d - r a te g e n e r a to r BR
3 Modulok 3.1 Top modul A top modul feladata, hogy az egyes modulok közti összeköttetéseket létrehozza, illetve ez állítja elő minden start bit alatti RTS jelet is. Ennek a modulnak hat bemente van: CLK órajel, BTN1 ami indítja az adást, BTN2 ami leállítja, SW2 ami a két különböző küldő adat bájtot választja ki, SW4 ami az adatbitek számát állítja illetve SW8 ami a baudrate-et határozza meg. A kapcsolók egyes állapotaihoz tartozó értékek a forráskód elején olvashatóak. /* BTN1 BTN2 start stop SW2 ON: 0101 010(1) OFF: 1010 101(0) SW4 ON: 8 data bits OFF: 7 data bits SW8 ON: 4800 baud OFF: 9600 baud + 2 stop bits */ `timescale 1ns / 1ps module top(clk, BTN1, BTN2, BTN4, SW2, SW4, SW8, TXD, RTS, bitcounter, BR); // input CLK, BTN1, BTN2, BTN4, SW2, SW4, SW8; output TXD, RTS; // for testing output [3:0] bitcounter; output BR; // ----------- wire [3:0] bitcounter; assign Reset = BTN4; assign Start = BTN1; assign Stop = BTN2; assign dmode = SW2; assign Bits = SW4; assign bmode = SW8; // Reset
assign RTS = bitcounter == 4'd01; // RTS-t kell kiadni a start bit alatt module baudrate Baudr_gen (CLK, Reset, bmode, BR); bcount Bit_counter (CLK, Reset, Start, Stop, Bits, BR, bitcounter); mpxb Bit_mpx (dmode, TXD, bitcounter); 3.2 Baudrate Ez a modul állítja elő a rszer órajelből leosztott BR engedélyező jelet, melynek segítségével már biztosított a megfelelő ütemezés a soros adáshoz. A baudrate modulnak három bemenő és egy kimenő vonala van: CLK órajel, Reset, bmode ami megadja a baudrate értékét és a BR kimenő impulzus. /* Mode == 0 Mode == 1 */ 9600 Baud 4800 Baud module baudrate(clk, Reset, bmode, BR); input Reset; input CLK; output BR; input bmode; reg [15:0] Q = 16'd0; reg CY = 0; always @(posedge CLK) if(bmode == 0) //CY = (Q == 16'd5208); // 9600 Baud CY = (Q == 16'd1); // for testing if(bmode == 1) //CY = (Q == 16'd10416); // 4800 Baud CY = (Q == 16'd2); // for testing if (Reset BR) Q <= 16'd0;
else Q <= Q+1; assign BR = CY; module
3.3 bcount A bcount modul állítja elő a bit-multiplexernek szükséges címet, mellyel kiválasztja a soron következő küldő adatbitet. Ennek a modulnak hat bemenő és egy kimenő paramétere van: a CLK órajel, a Reset, a Start melyre elindul illetve Stop, melyre egy teljes ciklus után leáll a számlálás, a Bits, mely meghatározza, hogy kihagyja e a számlálás során ez egyik bitet vagy sem és a BR engedélyező jel, mely a soros adáshoz szükséges megfelelő ütemezést végzi. Mindezekhez egyetlen kimenet társul: a bitcounter, mely egy négybites busz, ami a bit-multiplexert címzi meg egy külső modulban. A mindenkori teljes ciklusokat a Stop jel ellenére is egy started regiszter és a bitcounter regiszterek együttesen biztosítják. A started regiszter a Start jel hatására minden esetben egybe, míg a Stop jel hatására nullába íródik, ezzel tiltva a számláló következő ciklusba lépését ezzel a módszerrel nem szükséges a nyomógombok pergésével foglalkozni, mivel legfeljebb többször egybe illetve nullába írja a regisztert rövid idő alatt. A számláló akkor áll meg, ha a started jel és a bitcounter jelek együttes értéke nulla. Ezáltal minden esetben biztosítottá vált a teljes keret átküldése. module bcount(clk, Reset, Start, Stop, Bits, BR, bitcounter); input CLK, Reset, Start, Stop, Bits, BR; output [3:0] bitcounter; reg [3:0] bitcounter; reg started = 0; always @(posedge CLK) if (Start) started <= 1; if (Stop) started <= 0; if (Reset) bitcounter <= 0; else if (BR && (started bitcounter!= 0)) if (bitcounter < 10) if (bitcounter == 8)
module else if (Bits) bitcounter <= bitcounter + 2; else bitcounter <= bitcounter + 1; else bitcounter <= bitcounter + 1; bitcounter <= 0;
3.4 Bit-mpx A bit-mpx modul állítja elő a kimeneti adatbiteket a bitcounter értékének megfelelően. A dmode paraméter határozza meg, hogy a specifikációban meghatározott két adatbájt közül melyiket fogja küldeni az eszköz. module mpxb(dmode, OUT, bitcounter); input [3:0] bitcounter; input dmode; output OUT; reg OUT; reg [7:0] Data; always @(dmode) if (dmode) Data <= 8'b01010101; else Data <= 8'b10101010; always @(bitcounter or Data) case (bitcounter) 4'd00 : OUT = 1; // Stop 4'd01 : OUT = 0; // Start bit 4'd02 : OUT = Data[0]; // data bit 1 4'd03 : OUT = Data[1]; // data bit 2 4'd04 : OUT = Data[2]; // data bit 3 4'd05 : OUT = Data[3]; // data bit 4 4'd06 : OUT = Data[4]; // data bit 5 4'd07 : OUT = Data[5]; // data bit 6 4'd08 : OUT = Data[6]; // data bit 7 4'd09 : OUT = Data[7]; // data bit 8 4'd10 : OUT = 1; // Stop bit 1 default : OUT = 1; case module
4 Tesztelés 4.1 Szimuláció Mint az a következő ábrán is látszik, a Start gomb megnyomására elindul a számlálás, ezzel együtt az adás is. A példában a Start jelet gyorsan követi egy Stop jel annak vizsgálatára, hogy a keretet ennek ellenére teljesen átküldi e. A keret végével a TXD vonal egyben mara.
A következő ábrán látszik, hogy a Start jellel elindított adás rben ciklikusan ismétlődik, mivel jelen példában Stop jelet nem adtunk ki. Megfigyelhető továbbá az RTS jel aktivitása is minden Start bit esetén egy órajel hosszúságban.
4.2 Soros adás tesztelése A teszteléshez az FPGA lábkiosztását úgy állítottuk be, hogy a top modul tesztelésre szolgáló jelei BR és RTS a panelon található ledeken megjelenjenek, majd letöltöttük a programot a Spartan-3 mérőpanelba és elindítottuk a tviso.exe alkalmazást, ahol a gombok és kapcsolók segítségével paraméterezett eszköz elvárt működéséhez beállított terminál a várt karaktereket jelenítette meg természetesen minden lehetséges beállítással teszteltünk. A laborvezető a teszteket ellenőrizte és megfelelőnek találta.
5 Melléklet