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 rszerek tervezése FPGA áramkörökkel Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT atórium 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ó ChipScope Pro Hardver co-szimuláció 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 Kétfajta szimulációs módszer Grafikus tesztvektor Elsı minta 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 1
TBW beállítása TBW viselkedési szimuláció Jeltípusok - beállítás Clock - automatikus Bemenet - gerjesztés Kimenet - elvárt eredmény Mi van a háttérben (HDL) I.? Mi van a háttérben II.? Modul dekraláció: Zárt doboz! Nincsenek be- és kimenetek A tesztelı 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 Órajel generálás: Mi van a háttérben III.? Mi van a háttérben IV.? Tesztvektor generálás: Eredményvektor ellenörzése: 2
Kétfajta szimulációs módszer Egy minta példa HDL tesztvektor Grafikus tesztvektor `timescale 1ns / 1ps module test; reg clk; reg [3:0] cntr ; always clk = 1'b0; #5 clk = 1'b1; #5; cntr=0; # 100 cntr = 10; repeat (5) @(posedge clk); cntr <= cntr+1; $display("time \t cntr"); $monitor("%t \t %d", $realtime, cntr); module Simulator is doing circuit ization process. Finished circuit ization process Time cntr. 0 0 5000 1 15000 2 25000 3 35000 4 45000 5 100000 10 Initial - always Órajel generálás Always: Initial blokk 0. idıpillanatban kezdıdik a végrehajtása Egyszer fut le Az blokkok egymással, és az always blokkokkal párhuzamosan mőködnek Az blokkon belüli késleltetések összeadódnak Forever: A teszt kód nem szintetizálható!!! a <= 0; #10 a <= 1; #25 a <= 2; #5 a <= 0; ; 0 1 2 0 10 35 40 Késleltetések megadása Ciklusok használata `timescale 1ns/1ps y1 <= in; y2 <= y1; #5 y1 <= in; #5 y2 <= y1; y1 <= #5 in; y2 <= #5 y1; repeat (30) #1 DATA_IN = $random; parameter WIDTH=32; reg [WIDTH-1:0] DATA; integer i; for (i=0; i<width; i=i+1) DATA[i] = 1'b0; forever : clock_10ns CLK = 1'b0; #5 CLK = 1'b1; #5; always @(posedge stop_clock) if (stop_clock) disable clock_10ns; while (empty==1'b0) #1 read_fifo = 1'b1; 3
Task-ok ISA write ciklus task isa_wr (input [11:0] address, input [7:0] data); isa_write <= 1; xisa_add <= address; isa_data <= data; #33 xisa_iown <= 0; #165 xisa_iown <= 1;... #165 isa_write <= 0; task reg [7:0] isa_data, temp; reg isa_write; assign xisa_d = (isa_write)? isa_data : 8'bz; #200 isa_wr(12'h300, 8'hab); isa_wr(12'h300, 8'h10); isa_wr(12'h300, 8'h05); Tristate meghajtás ISA buszos eszköz tesztelése isa_rd(12'h303, temp); Formátum karakterek %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 Speciális karakterek \t Tab \n Newline \\ Backslash %% Percent \ Quote \<octal> ASCII representation Szöveg formázása Hol használjuk? $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 -... Adat / szöveg kiírása File mőveletek Egyszeri / egyszerő kiírás + CR/LF #100000; $display( Szimuláció vége: %t", $realtime"); $stop; Kiírás CR/LF nélkül always @(posedge check) $write("."); Folyamatos állapotfigyelés $monitor( Time %t: Out %d, $realtime, cntr); Állapotváltozó figyelése reg[8*22:0] ascii_state; $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 = "S"; 2'b10 : ascii_state = "Poll"; 2'b11 : ascii_state = "Receive"; default: ascii_state = "ERROR: Undefined State"; case Állapotátmenetek file-ba mentése integer outfile; outfile = $fopen(outfile, "output.dat", "w"); if (outfile == 0) $display("error!"); $finish; $fdisplay (outfile, Time - Counter"); $fmonitor (outfile, "%t %h", $realtime, cntr); #1000000; $fclose(outfile); real number; Számok olvasása file-ból while (i>0) i=$fscanf(number_file, "%f", number); $display("numb is %f", number); Memória file mőveletek reg [31:0] prom_data[1023:0]; $readmemb("mem_file_binary.dat", prom_data); MSB Bináris állomány LSB 1111000011110000 // Az elsı cím elsı 16 bitje 1010_0101_1010_0101 // A második cím elsı 16 bitje @025 // Cím megadása 11111111_00000000 Minta állomány Hexadecimális állomány reg [31:0] prom_data[1023:0]; $readmemh("mem_file_hex.dat", prom_data); Egyéb... Assign deassign - $assign(reg) - $deassign(reg) Force release - $force(reg/wire) - $release(reg/wire) Szimuláció leállítása - $stop Kilépés - $finish Véletlenszám - $ random(seed) Típuskonverzió - $signed(jelnév) - $unsigned(jelnév) Real integer - $ rtoi(real) Integer- real - $ itor(integer) pl. bithiba elıállítása 4
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ó ChipScope Pro Hardver co-szimuláció Logikai analizátor használata 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 Tüskesor ChipScope - Belsı logikai analizátor Xilinx System Generator Vezérlı Trigger 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 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 Ö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ó! 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 szintetizálható teszt környezet 5