BUDAPESTI MŐSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK
Digitális rendszerek tervezése FPGA áramkörökkel Szimuláció és verifikáció Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium BME-MIT FPGA labor
Szimuláció és verifikáció Szimulációs lehetıségek – Viselkedési – Funkcionális • Fordítás után • Leképezés után
Ellenırzés Start Viselkedési szimuláció Szintézis
– Idızítési • Elhelyezés, huzalozás után
Funkcionális szimuláció Implementáció
Idızítés analízis Idızítési szimuláció
Verifikáció – Logikai analizátor – ChipScope Pro – Hardver co-szimuláció
FPGA programozás
Verifikáció
BME-MIT FPGA labor
Szimuláció a ISE Webpack-ben Szimulátor szoftverek • • • •
ISE simulator Modelsim NC-Sim VCS MX
Szimulációs módszerek
BME-MIT
• Tesztvektor – Grafikus – HDL • Eredmény – Grafikus – Text FPGA labor
Kétfajta szimulációs módszer Grafikus tesztvektor Grafikus eredmény
BME-MIT FPGA labor
Elsı minta
BME-MIT FPGA labor
Test Bench Waveform (TBW) generás Beállítások: • Szimuláció hossza • Idıalap • Idızítések – Elıkészítési idı – Tartási idı • Órajel – 1 órajel – több órajel – kombinációs hálózat BME-MIT FPGA labor
TBW beállítása
Jeltípusok - beállítás • Clock • Bemenet • Kimenet
- automatikus - gerjesztés - elvárt eredmény
BME-MIT FPGA labor
TBW viselkedési szimuláció
BME-MIT FPGA labor
Mi van a háttérben (HDL) I. ? Modul dekraláció: • Zárt doboz! • Nincsenek be- és kimenetek • A tesztelendı modul (UUT) példányosítása A file tartalma: • Összeköttetések reg ill. wire • Modul dekraláció • UUT példányosítás • Órajel generálás • Tesztvektor generálás • Eredményvektor ellenırzése BME-MIT FPGA labor
Mi van a háttérben II. ? Órajel generálás:
BME-MIT FPGA labor
Mi van a háttérben III. ? Tesztvektor generálás:
BME-MIT FPGA labor
Mi van a háttérben IV. ? Eredményvektor ellenörzése:
BME-MIT FPGA labor
Kétfajta szimulációs módszer Grafikus tesztvektor Grafikus eredmény
HDL tesztvektor Grafikus eredmény BME-MIT FPGA labor
Egy minta példa `timescale 1ns / 1ps module test; reg clk; reg [3:0] cntr ; always begin clk = 1'b0; #5 clk = 1'b1; #5; end initial begin cntr=0; # 100 cntr = 10; end
BME-MIT
initial begin repeat (5) begin @(posedge clk); cntr <= cntr+1; end end initial begin $display("Time \t cntr"); $monitor("%t \t %d", $realtime,Simulator cntr); is doing circuit end initialization process. endmodule Finished circuit initialization process
.
Time 0 5000 15000 25000 35000 45000 100000
cntr 0 1 2 3 4 5 10 FPGA labor
Initial - always Órajel generálás • Always:
• Forever:
A teszt kód nem szintetizálható !!! BME-MIT FPGA labor
Initial blokk • 0. idıpillanatban kezdıdik a végrehajtása • Egyszer fut le • Az „initial” blokkok egymással, és az „always” blokkokkal párhuzamosan mőködnek • Az „initial” blokkon belüli késleltetések összeadódnak
initial begin a <= 0; #10 a <= 1; #25 a <= 2; #5 a <= 0; end;
1 0
10
2
0
35 40
BME-MIT FPGA labor
Késleltetések megadása `timescale 1ns/1ps
always @ (posedge clk) begin y1 <= in; y2 <= y1; end always @ (posedge clk) begin #5 y1 <= in; #5 y2 <= y1; end
always @ (posedge clk) begin y1 <= #5 in; y2 <= #5 y1; end BME-MIT FPGA labor
Ciklusok használata initial begin repeat (30) begin @(posedge CLK); #1 DATA_IN = $random; end end
initial forever begin : clock_10ns CLK = 1'b0; #5 CLK = 1'b1; #5; end
parameter WIDTH=32;
always @(posedge stop_clock) if (stop_clock) disable clock_10ns;
reg [WIDTH-1:0] DATA; integer i; initial for (i=0; i<WIDTH; i=i+1) DATA[i] = 1'b0;
initial begin while (empty==1'b0) begin @(posedge CLK); #1 read_fifo = 1'b1; end
BME-MIT FPGA labor
Task-ok ISA „write” ciklus Tristate meghajtás
task isa_wr (input [11:0] address, input [7:0] data); begin isa_write <= 1; xisa_add <= address; isa_data <= data; #33 xisa_iown #165 xisa_iown ... #165 isa_write end endtask
<= 0; <= 1; <= 0;
ISA buszos eszköz tesztelése reg [7:0] isa_data, temp; reg isa_write; assign xisa_d = (isa_write) ? isa_data : 8'bz; initial begin #200 isa_wr(12'h300, 8'hab); isa_wr(12'h300, 8'h10); isa_wr(12'h300, 8'h05); isa_rd(12'h303, temp); end
BME-MIT FPGA labor
Szöveg formázása Formátum karakterek %b %h %d %s %c %f %e %o %t %m %v
Binary Value Hexadecimal Value Decimal Value String ASCII Real Value Exponential Value Octal Value Time Module Hierchical Name Strength
Speciális karakterek \t \n \\ %% \„ \
Tab Newline Backslash Percent Quote ASCII representation
Hol használjuk? $display $write $monitor -
Szöveg kiíratása + CR/LF Szöveg kiírása Változók nyomonkövetése
+ $fdisplay $fwrite $fmonitor -
Fileba írás + CR/LF ... ...
BME-MIT FPGA labor
Adat / szöveg kiírása Egyszeri / egyszerő kiírás + CR/LF initial begin #100000; $display(„Szimuláció vége: %t", $realtime"); $stop; end
Kiírás CR/LF nélkül always @(posedge check) $write(".");
Folyamatos állapotfigyelés initial $monitor(“Time %t: Out %d, $realtime, cntr);
Állapotváltozó figyelése reg[8*22:0] ascii_state; initial $monitor("Current State is: %s", ascii_state); always @(UUT.top.state_reg) case (UUT.top.state_reg) 2'b00 : ascii_state = "Reset"; 2'b01 : ascii_state = "Send"; 2'b10 : ascii_state = "Poll"; 2'b11 : ascii_state = "Receive"; default: ascii_state = "ERROR: Undefined State"; endcase
BME-MIT FPGA labor
File mőveletek Állapotátmenetek file-ba mentése integer outfile; initial begin outfile = $fopen(outfile, "output.dat", "w"); if (outfile == 0) begin $display("Error!"); $finish; end $fdisplay (outfile, “Time - Counter"); $fmonitor (outfile, "%t %h", $realtime, cntr);
Számok olvasása file-ból real number; while (i>0) begin i=$fscanf(number_file, "%f", number); $display("Numb is %f", number); @(posedge CLK); end
#1000000; $fclose(outfile); end
BME-MIT FPGA labor
„Memória” file mőveletek Bináris állomány
Hexadecimális állomány
reg [31:0] prom_data[1023:0]; initial $readmemb("mem_file_binary.dat", prom_data);
MSB
LSB
reg [31:0] prom_data[1023:0]; initial $readmemh("mem_file_hex.dat", prom_data);
Minta állomány
1111000011110000 1010_0101_1010_0101
// Az elsı cím elsı 16 bitje // A második cím elsı 16 bitje
@025 11111111_00000000
// Cím megadása
BME-MIT FPGA labor
Egyéb... Assign – deassign Force – release
-
$assign(reg) - $deassign(reg) $force(reg/wire) - $release(reg/wire)
Szimuláció leállítása Kilépés
-
$stop $finish
Véletlenszám
-
$ random(seed)
Típuskonverzió
-
$signed(jelnév) $unsigned(jelnév) $ rtoi(real) $ itor(integer)
Real – integer Integer- real
pl. bithiba elıállítása
BME-MIT FPGA labor
Szimuláció és verifikáció Szimulációs lehetıségek – Viselkedési – Funkcionális • Fordítás után • Leképezés után
– Idızítési • Elhelyezés, huzalozás után
Verifikáció – Logikai analizátor – ChipScope Pro – Hardver co-szimuláció BME-MIT FPGA labor
Logikai analizátor használata
FPGA
• Tetszıleges belsı regiszter és vezeték kivezetése dedikált I/O lábokon át tüskesorra.→ IDİVISZONYOK!! • Külsı logikai analizátor használata • Nem igényel FPGA erıforrást (csak I/O-t) • A max. frekvencia = I/O frekvencia • Relatív nagy mintatár, sok jel megfigyelhetı belsı multiplexeléssel BME-MIT FPGA labor
Vezérlı
Trigger
ChipScope - „Belsı” logikai analizátor • FPGA erıforrásból felépített analizátor • Tetszıleges belsı regiszter és vezeték megfigyelése • Max. frekvencia = logika sebessége • Relatív kis mintatár (BRAM memória) • A minták kiolvasása JTAG-en keresztül • A chipscope alkalmazása – 1, Trigger beállítása PC-n – 2, Trigger esemény – 3, Adatok mentése BRAM-ba – 4, Adatok átvitele JTAG-en PC-re
BME-MIT FPGA labor
Xilinx System Generator • Extra Xilinx FPGA specifikus komponensek a Matlab Simulink- hez • Alkalmazási területek: – A funkcionalitás ellenırzése modell szinten – Funkcionalitás ellenırzése idızítés analízis alapján (Modelsim) – Magasszintő modell bázisú FPGA konfiguráció generálása – FPGA kód funkcionális ellenırzése
BME-MIT FPGA labor
Összefoglalás • A tesztelés, verifikáció a tervezési idı több 50%-a – A feladat legfájdalmasabb része • A korai hibafelderítés költséget takarít meg – x1 - x10 - x100 – x1000 …. • A szimuláció biztosítja a legrészletesebb képet – Tetszıleges jel/esemény, tetszıleges pillanatban – Tetszıleges megfigyelık, jelzık – De csak szimuláció! BME-MIT FPGA labor
Összefoglalás • A tesztelés, mérés az FPGA-val egyszerőbb • Tesztkonfigurációk generálhatók, vizsgálhatók • Szabad I/O-k esetén közvetlen hozzáférhetıség a belsı jelekhez • Beágyazott „mérı” eszközök – az FPGA szabad erıforrásaiból – Logikai analizátor – „szintetizálható teszt környezet” BME-MIT FPGA labor