szimuláció és verifikáció -...
Post on 07-Sep-2019
6 Views
Preview:
TRANSCRIPT
1
BME-MIT
FPGA labor
Digitális rendszerek tervezése FPGA áramkörökkel
Szimuláció és verifikáció
BUDAPESTI MŐSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEMVILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR
MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK
Fehér BélaSzántó Péter, Lazányi János, Raikovich Tamás
BME MITFPGA 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
– 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
Szimuláció a ISE Webpack-ben
Szimulátor szoftverek• ISE simulator
• Modelsim
• NC-Sim
• VCS MX
Szimulációs módszerek• Tesztvektor
– Grafikus– HDL
• Eredmény– Grafikus– Text
BME-MIT
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
2
BME-MIT
FPGA labor
TBW beállítása
Jeltípusok - beállítás• Clock - automatikus
• Bemenet - gerjesztés
• Kimenet - 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
• Összeköttetések reg ill. wireA file tartalma:
• 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:
3
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 / 1psmodule test;
reg clk;reg [3:0] cntr ;
always begin
clk = 1'b0;#5 clk = 1'b1; #5;end
initial begincntr=0;
# 100 cntr = 10;end
initial beginrepeat (5) begin
@(posedge clk);cntr <= cntr+1;
endend
initial begin$display("Time \t cntr"); $monitor("%t \t %d", $realtime, cntr);
end endmodule
Simulator is doing circuit
initialization process.Finished circuit initialization process
Time cntr
. 0 0
5000 1
15000 2
25000 3
35000 4
45000 5
100000 10
BME-MIT
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
0
1 2 0
10 35 40
initialbegin
a <= 0;#10 a <= 1;#25 a <= 2;#5 a <= 0;
end;
BME-MIT
FPGA labor
Késleltetések megadása
always @ (posedge clk)begin
y1 <= #5 in;y2 <= #5 y1;
end
always @ (posedge clk)begin
#5 y1 <= in;#5 y2 <= y1;
end
always @ (posedge clk)begin
y1 <= in;y2 <= y1;
end
`timescale 1ns/1ps
BME-MIT
FPGA labor
Ciklusok használatainitial begin
repeat (30) begin@(posedge CLK);#1 DATA_IN = $random;
endend
initial beginwhile (empty==1'b0) begin
@(posedge CLK);#1 read_fifo = 1'b1;
end
initialforever begin : clock_10ns
CLK = 1'b0;#5 CLK = 1'b1;#5;
end
always @(posedge stop_clock)if (stop_clock)
disable clock_10ns;parameter WIDTH=32;
reg [WIDTH-1:0] DATA;integer i;
initialfor (i=0; i<WIDTH; i=i+1)
DATA[i] = 1'b0;
4
BME-MIT
FPGA labor
Task-ok
task isa_wr (input [11:0] address, input [7:0] data);begin
isa_write <= 1;xisa_add <= address;isa_data <= data;
#33 xisa_iown <= 0;#165 xisa_iown <= 1;
...#165 isa_write <= 0;endendtask
ISA „write” ciklusISA „write” ciklus
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
ISA buszos eszköz teszteléseISA buszos eszköz tesztelése
Tristate
meghajtás
BME-MIT
FPGA labor
Szöveg formázása
%b Binary Value%h Hexadecimal Value%d Decimal Value%s String%c ASCII%f Real Value%e Exponential Value%o Octal Value%t Time%m Module Hierchical Name%v Strength
\t Tab\n Newline\\ Backslash%% Percent\„ Quote\<octal> ASCII representation
$display - Szöveg kiíratása + CR/LF$write - Szöveg kiírása$monitor - Változók nyomonkövetése
+$fdisplay - Fileba írás + CR/LF$fwrite - ...$fmonitor - ...
Hol használjuk?Hol használjuk?
Speciális karakterekSpeciális karakterek
Formátum karakterekFormátum karakterek
BME-MIT
FPGA labor
Adat / szöveg kiírása
initial begin#100000;$display(„Szimuláció vége: %t", $realtime");$stop;
end
initial$monitor(“Time %t: Out %d, $realtime, cntr);
always @(posedge check)$write(".");
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
Egyszeri / egyszerő kiírás + CR/LFEgyszeri / egyszerő kiírás + CR/LF
Kiírás CR/LF nélkülKiírás CR/LF nélkül
Folyamatos állapotfigyelésFolyamatos állapotfigyelés
Állapotváltozó figyeléseÁllapotváltozó figyelése
BME-MIT
FPGA labor
File mőveletek
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);
#1000000;$fclose(outfile);
end
Állapotátmenetek fileÁllapotátmenetek file--ba mentéseba mentése
real number;
while (i>0) begini=$fscanf(number_file, "%f", number);$display("Numb is %f", number);@(posedge CLK);
end
Számok olvasása fileSzámok olvasása file--bólból
BME-MIT
FPGA labor
„Memória” file mőveletek
reg [31:0] prom_data[1023:0];initial$readmemb("mem_file_binary.dat", prom_data);
reg [31:0] prom_data[1023:0];initial$readmemh("mem_file_hex.dat", prom_data);
BinBináris állományáris állomány Hexadecimális állományHexadecimális állomány
1111000011110000 // Az elsı cím elsı 16 bitje 1010_0101_1010_0101 // A második cím elsı 16 bitje
@025 // Cím megadása11111111_00000000
Minta állományMinta állományLSBMSB
BME-MIT
FPGA labor
Egyéb...Assign Assign –– deassigndeassign -- $assign(reg) $assign(reg) -- $deassign(reg) $deassign(reg)
ForceForce –– releaserelease -- $force(reg/wire) $force(reg/wire) -- $release(reg/wire) $release(reg/wire)
Szimuláció leállításaSzimuláció leállítása -- $stop $stop
KilépésKilépés -- $finish$finish
VéletlenszámVéletlenszám -- $ random(seed)$ random(seed)
TípuskonverzióTípuskonverzió -- $signed(jelnév)$signed(jelnév)
-- $unsigned(jelnév)$unsigned(jelnév)
Real Real –– integerinteger -- $ rtoi(real)$ rtoi(real)
IntegerInteger-- realreal -- $ itor(integer)$ itor(integer)
pl. bithiba
elıállítása
5
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
Tü
sk
eso
r
• 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
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
Ve
zérl
ı
T
rig
ge
r
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”
top related