Szimuláció és verifikáció Szimulációs lehetıségek
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
– 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
FPGA labor
Szimuláció a ISE Webpack-ben
Kétfajta szimulációs módszer
Szimulátor szoftverek • • • •
Grafikus tesztvektor Grafikus eredmény
ISE simulator Modelsim NC-Sim VCS MX
Szimulációs módszerek
BME-MIT
• Tesztvektor – Grafikus – HDL • Eredmény – Grafikus – Text
BME-MIT FPGA labor
Elsı minta
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
BME-MIT FPGA labor
FPGA labor
1
TBW beállítása
TBW viselkedési szimuláció
Jeltípusok - beállítás • Clock • Bemenet • Kimenet
- automatikus - gerjesztés - elvárt eredmény
BME-MIT
BME-MIT FPGA labor
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
Mi van a háttérben II. ? Órajel generálás:
BME-MIT FPGA labor
FPGA labor
Mi van a háttérben III. ?
Mi van a háttérben IV. ? Eredményvektor ellenörzése:
Tesztvektor generálás:
BME-MIT
BME-MIT FPGA labor
FPGA labor
2
Kétfajta szimulációs módszer
Egy minta példa `timescale 1ns / 1ps module test; reg clk; reg [3:0] cntr ;
Grafikus tesztvektor Grafikus eredmény
initial begin repeat (5) begin @(posedge clk); cntr <= cntr+1; end end
always begin clk = 1'b0; #5 clk = 1'b1; #5; 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
initial begin cntr=0; # 100 cntr = 10; end
Time 0 5000 15000 25000 35000 45000 100000
.
HDL tesztvektor Grafikus eredmény BME-MIT
BME-MIT FPGA labor
cntr 0 1 2 3 4 5 10 FPGA labor
Initial - always
Initial blokk
Órajel generálás • Always:
• 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
• Forever: initial begin a <= 0; #10 a <= 1; #25 a <= 2; #5 a <= 0; end;
A teszt kód nem szintetizálható !!! BME-MIT
1 0
10
2
0
35 40
BME-MIT FPGA labor
FPGA labor
Késleltetések megadása
Ciklusok használata
`timescale 1ns/1ps
always @ (posedge clk) begin y1 <= in; y2 <= y1; end always @ (posedge clk) begin #5 y1 <= in; #5 y2 <= y1; end
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;
always @ (posedge clk) begin y1 <= #5 in; y2 <= #5 y1; end BME-MIT
initial begin while (empty==1'b0) begin @(posedge CLK); #1 read_fifo = 1'b1; end
BME-MIT FPGA labor
FPGA labor
3
Task-ok
Szöveg formázása Formátum karakterek
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
ISA buszos eszköz tesztelése reg [7:0] isa_data, temp; reg isa_write;
<= 0; <= 1;
assign xisa_d = (isa_write) ? isa_data : 8'bz;
<= 0;
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
%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
Hol használjuk? $display $write $monitor -
+ $fdisplay $fwrite $fmonitor -
Speciális karakterek \t \n \\ %% \„ \
Szöveg kiíratása + CR/LF Szöveg kiírása Változók nyomonkövetése
Tab Newline Backslash Percent Quote ASCII representation
Fileba írás + CR/LF ... ...
BME-MIT FPGA labor
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);
File mőveletek
Állapotváltozó figyelése Állapotátmenetek filefile-ba menté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
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 filefile-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
FPGA labor
„Memória” file mőveletek Bin Bináris áris állomány
LSB
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)
Hexadecimális állomány
reg [31:0] prom_data[1023:0]; initial $readmemb("mem_file_binary.dat", prom_data);
MSB
Egyéb...
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
Real – integer Integer-- real Integer
BME-MIT
pl. bithiba elıállítása
BME-MIT FPGA labor
FPGA labor
4
Szimuláció és verifikáció
Logikai analizátor használata
Szimulációs lehetıségek Tüskesor
– Viselkedési – Funkcionális • Fordítás után • Leképezés után
• 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
– Idızítési • Elhelyezés, huzalozás után
Verifikáció – Logikai analizátor – ChipScope Pro – Hardver co-szimuláció BME-MIT
BME-MIT FPGA labor
FPGA labor
Xilinx System Generator
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
• 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
FPGA labor
Összefoglalás
Ö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
• 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
FPGA labor
5