WORLD CLASS through people, technology and dedication INF5430

Like dokumenter
INF3430. Fasit eksamen Høst Oppgave 1 6. Oppgave A B C D E 1 X X 2 X 3 X X 4 X X 5 X X 6 X

Tilstandsmaskiner (FSM) Kapittel 5

Oppgave 1 En 4-input Xilinx LUT med innhold 9009 (hex) realiserer en: A xor-xor-or B xor-xor-nand C xor-xor-nor D xor-xor-and E xor-xor-xor

Store design. Kapittel 6

Kombinatorisk og synkron logikk. Kapittel 4

Simulering, syntese og verifikasjon (Max kap. 19)

INF3430/4431. VHDL byggeblokker og testbenker forts.

Agenda Funksjoner og prosedyrer. Funksjoner

INF3430/4431. VHDL byggeblokker og testbenker forts.

WORLD CLASS through people, technology and dedication WORLD CLASS through people, technology and dedication

INF3430/4431 Høsten Laboppgave 2 VHDL-programmering Funksjoner og prosedyrer/bibliotek Styring av sjusegmenter

INF 3430/4431. Simuleringsmetodikk

INF3430. VHDL byggeblokker og testbenker forts.

File: C:\My Documents\fagprove\tp\klokke.txt , 08:42:20

INF3430/4431. VHDL byggeblokker og testbenker

Synkron logikk. Sekvensiell logikk; to typer:

INF3430/4430. Kombinatoriske og sekvensielle byggeblokker implementert i VHDL :57

INF3430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

INF 3430/4430. Simuleringsmetodikk

INF3430/4431. Introduksjon til VHDL Spartan starterkit Spartan-3 FPGA

INF3430/4430. Grunnleggende VHDL

INF3430/4431. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

INF 3430/4430. Simuleringsmetodikk

Entities and architectures. Kapittel 3

SAS FANS NYTT & NYTTIG FRA VERKTØYKASSA TIL SAS 4. MARS 2014, MIKKEL SØRHEIM

INF3430 Høsten ChipScope PRO - En kort innføring

Versjon2.0/ ChipScope PRO - En kort innføring

INF3430. VHDL byggeblokker og testbenker

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

INF3430/4430. Grunnleggende VHDL. 11-Sep-06

TELE2010A Digital Systemkonstruksjon

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

INF3430 H2010. FPGA/ASIC koderegler og designmetodikk. Hvordan en FPGA designer kan være minst mulig på lab en

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

DM6814/DM5814 User s Manual

TwidoSuite kommunikasjon

Avdeling for ingeniørutdanning Institutt for teknologi

FPGA/ASIC koderegler og designmetodikk Hvordan en FPGA designer kan være minst mulig på lab en

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Høgskolen i Sør-Trøndelag Avdeling for teknologi

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

F4 IN HDL. Yngve Hafting,

Løsningsforslag til eksamen i IN147(A)

LabVIEW seriekommunikasjon med mikrokontroller

Dynamic Programming Longest Common Subsequence. Class 27

Det matematisk-naturvitenskapelige fakultet. INF4431 Digital systemkonstruksjon

Lynkurs i shellprogrammering under Linux

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

ARDUINO STUDIELABEN PROGRAMMERING DIGITALE/ANALOGE INNDATA/UTDATA LYSDIODER FRITZING. Roger Antonsen INF januar 2012

Dagens tema: Sjekking

MID-TERM EXAM TDT4258 MICROCONTROLLER SYSTEM DESIGN. Wednesday 3 th Mars Time:

Input/Output. når tema pensum. 13/4 busser, sammenkobling av maskiner /4 PIO, DMA, avbrudd/polling

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF 3430/4430. Viktige momenter i syntese og for valg av teknologi

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

INF Notater. Veronika Heimsbakk 10. juni 2012

Hjemmeeksamen 2 i INF3110/4110

VHDL En kjapp introduksjon VHDL. Oversikt. VHDL versus C(++)/Java

UNIVERSITETET I OSLO

TDT AUGUST, 2013, 09:00 13:00. Norwegian University of Science and Technology Engineering The Department of Computer and Information Science

C:\My Documents\Fagprove\Flashlite V25+\LED_Link.pas Printed at 16:06 on 17 Feb 2000 Page 1 of 6

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Øvingsforelesning 5 Python (TDT4110)

INF2100. Oppgaver 26. september til 1. oktober 2007

Dagens tema: Kjøresystemer II

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

Hvordan føre reiseregninger i Unit4 Business World Forfatter:

Øvingsforelesning 5 Python (TDT4110)

Analyseøving 8 - løsningsforslag

TDT DESEMBER, 2012, 09:00 13:00. Norwegian University of Science and Technology Engineering The Department of Computer and Information Science

AvtaleGiro beskrivelse av feilmeldinger for oppdrag og transaksjoner kvitteringsliste L00202 levert i CSV fil

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Gruppe(r): 2EY Eksamenstid, fra-til: Eksamensoppgaven består av. Antall sider: 4 (Inkludert denne)

dynamiske data dynamiske data statiske data program dynamiske data statiske data reservert program dynamiske data statiske data reservert program

UNIVERSITETET I OSLO

ytelsen til hukommelseshierarkier

1: { 2: Display functions 3: ============================================================= 4: Instruction DB5 DB4 DB3 DB2 DB1 DB0 5:

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Elektronisk innlevering/electronic solution for submission:

TDT DESEMBER, 2014, 09:00 13:00. Norwegian University of Science and Technology Engineering The Department of Computer and Information Science

Hangman. Level. Introduksjon

Vedlegg 2 Dokumentasjon fra TVM leverandør

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Start MATLAB. Start NUnet Applications Statistical and Computational packages MATLAB Release 13 MATLAB 6.5

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Forelesning ISA: IJVM Kap 4.2

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

INF3430/4431 Høsten Laboppgave 4 System on Chip (SoC) konstruksjon

Høgskolen i Sør-Trøndelag Avdeling for teknologi

Programmering i C++ Løsningsforslag Eksamen høsten 2005

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Appendiks 7 Konstanter og variabler til kap. 6

Feilmelding Årsak Løsning

MAT1030 Plenumsregning 1

Transkript:

WORLD CLASS through people, technology and dedication WORLD CLASS through people, technology and dedication 1

Kommandostyrte testbenker i VHDL Historikk Ønskeliste Kommandospråk Adresseliste generering Kommandotolker Probe signaler Testbenk Eksempel Konklusjon 2

Historikk Tidligere ble vanligvis programvare for verifikasjon (oppførselsnivå fasit) laget i et høynivåspråk som C/C++. Med VHDL kom et brukbart alternativ til høynivåspråk. VHDL ble valgt pga. Verilog var uegnet, og SystemVerilog har kommet senere. KDA ASIC ene Nova1 og Nova2 ASIC er med kommandostyrte testbenker. KDA FPGA ene CHP3 og Epos2 sine testbenker ikke kommandostyrte, men skriv/les makroer og makroer for start/stopp av funksjoner. Ulemper med daværende kommandostyrte løsning: Bare mulig med ett nivå med kommandofiler. Alle adresser i memory map for prosessor interface må VHDL kodes i testbenken hvis kommandotolker skal få tilgang til adressene. Alle signaler som skal påtrykkes eller avleses i testbenken må VHDL kodes i testbenken hvis kommandotolker skal få tilgang til signalene. Lite gjenbrukbart. 3

Ønskeliste Lage et svært enkelt kommandospråk. Testbenken leser kommandoer fra tekstfiler. Inkludere kommandofiler i kommandofiler (dvs. rekursivt). Testbenken leser memory map package ved oppstart med en eller flere «map» kommandoer slik at alle processor interface (PIF) adresser som inngår i designet kan brukes i testbenkens kommandofiler. Ved oppstart leser testbenken sin egen VHDL kode slik at deklarerte signaler i testbenken kan brukes i kommandofilene. Det bør også være mulig å bruke signaler i design filer (probing). Gjenbrukbare funksjoner for å effektivisere utvikling av testbenker. 4

From INF3430: Bus Functional Model (BFM) BFMs of processors, I/O agents, arbiters, etc. Complex signals at the bit twiddling level High-level transaction request from testbench or verification environment DUT (RTL) High-level transaction result to testbench or verification environment These could be the same BFM 5

Kommandospråk map filename -- Memory package filename or link (Linux) to file name include filename.txt m? bh ADDR+offset value mw b ADDR value mc b ADDR value -- returns TRUE if equal else FALSE mc h ADDR+2 value mr h ADDR set signal value set vector value wait4 signal value -- returns FALSE when timed out else TRUE wait4 vector value 6

Kommandospråk forts. check signal value -- returns TRUE if equal else FALSE check vector value if <when true> else <when false> end (else branch optional) ifn <when false> else <when true> end (else branch optional) report n string report e string run c value quit finish break 7

Kommandospråk videreutvikling mr bhw ADDR+offset value mw bhwg length ADDR+offset value (-g also for mc command) -- write to addr. RAM_ADDR to RAM_ADDR+3 values F000,F001,F002,F003 mw hg x 0004 RAM_ADDR x F000 -- check from addr. RAM_ADDR to RAM_ADDR+3 values F000,F001,F002,F003 mc hg x 0004 RAM_ADDR x F000 mc bhw ADDR+offset value mask -- returns TRUE if equal unmasked bits -- else FALSE. All bits unmasked default. wait4 bhw ADDR+offset value mask -- memory check poll. Returns TRUE -- if equal unmasked bits else FALSE check signal value mask -- returns TRUE if equal unmasked bits else FALSE inst i path(arch) -- include signals in entity and architecture to signal list inst -d path(arch) run t value unit -- delete signals in entity and architecture from signal list 8

Memory Map Package Prosjekt VHDL memory map package for: FPGA/ASIC syntetiserbar kode Modul- og toppnivå testbenker Kilde for SW memory map Eksempel: subtype reg_addr is std_logic_vector(15 downto 0); constant rega : reg_addr:= x 0000 ; -- RW U8,4 constant regb : reg_addr:= x 0001 ; -- RW U8,8 constant regc : reg_addr:= x 0002 ; -- WO U8,1 constant regd : reg_addr:= x 0004 ; -- RW U16,12 constant rege : reg_addr:= x 0008 ; -- RO U32,32 9

Adresseliste generering function addr_list_gen(file log: text; infile : string) return addrmap_ptr; Lager en lenket liste av alle adresser med navn og verdi i hvert element. Returnerer peker til første element i lista som blir siste adresse i package. procedure get_address( variable address_name : in string; variable addrmap_list : in addrmap_ptr; variable address_value : out std_logic_vector; variable found : out boolean); Søker i adresse lista og returnerer med adressens verdi som out parameter når adresser leses i mw/mc/mr kommandoer. Alle adresser som brukes i kommando filene må ligge i en eller flere address map package Standard dynamisk liste generering med VHDL access type (Ashenden kap.17) VHDL tekstbehandling og std_developerskit.std_iopak 10

Kommandotolker procedure include( infile: string; forced_eof: inout boolean) is file_open(file_ok, command_file, infile, read_mode); begin while not endfile(command_file) loop readline(command_file, command); readword(command, length, word); command_id:= new string (word low to length))); if command_id.all= include then <les nytt filnavn fra kommando fil> include(filename, forced_eof); elsif command_id.all= mw then <les type, addresse og data fra kommando fil> get_address(address_name, addrmap_list, address, found); mw(tsize, address, data); -- elsif flere kommandoer. ; else <ukjent kommando> end if; end loop; file_close(command_file); end procedure include; 11

Probe signaler Metode: Lage lenket liste av signaler i testbenken Elementene i lista har navn, type og vektor lengde. Navn f. eks. bit1, bit2, vector1 eller vector2. Type f. eks. std_logic, std_logic_vector(1 downto 0), unsigned(2 downto 0), osv. Søke i signal lista og returnere med signal type og lengde som out parametere når signal navn leses i for eksempel wait4 kommando. Initialisere probe signal ved hjelp av init_signal_spy eller signal_force funksjonene i Modelsim. Problem: Hvordan lese et signal navn som en tekst streng i kommando filen, og deretter konvertere det til en probe? Navnet kan være for eksempel av type std_logic, std_logic_vector, unsigned eller signed. 12

Probe generering Alle signal typer må pga. probe signalet i Modelsim funksjonene være deklarert i testbenken som default declarations: signal sl_spy : std_logic; signal slv1_sp : std_logic_vector(0 downto 0); signal slv2_spy : std_logic_vector(1 downto 0); signal slv3_spy : std_logic_vector(2 downto 0);. signal slv128_spy : std_logic_vector(127 downto 0); Søker i signal lista og finn navnet, typen og lengden. Generer probe signalet ved å kalle på funksjon for init_signal_spy eller signal_force; f.eks: If <std_logic_vector og lengde=2> then init_signal_spy(name, slv2_spy simple_name); -- Bruker simple_name pga. konverterer til text elsif <andre typer og lengder>. På denne måten vil alle std_logic_vector signaler av lengde 2 bli slv2_spy signal. Signalet slv2_spy blir deretter parameter til f. eks. wait4 funksjonen. Dette blir en god del kode, men kan gjenbrukes i alle testbenker uten endring. 13

Probe generering bieffekt MEN: Init_signal_spy og signal_force oppretter ny FLI prosess hver gang den kalles, og alle FLI prosessene vil forbli aktive under hele simuleringen. Det fører til økt memory bruk som jeg har målt til ~365 bytes/probegenerering og litt økt simuleringstid. Det vil gi 365 Mbytes for 1 mill. kall på init_signal_spy funksjonen. Dette unngås ved å kode navnene for de signalene som brukes ofte direkte i set, check og wait4 kommandoene (vanligvis unødvendig): If name= signal_name1 then < use signal_name1 in check value procedure> elsif name= signal_name2 then < use signal_name2 in check value procedure> elsif <std_logic> then init_signal_spy(name, sl_spy simple_name); < use sl_spy signal in check value procedure > elsif <andre typer og lengder>. 14

Testbenk <use address map design package> <use testbench package> <use KDA reuse package> architecture driver of tb_top is <signal declarations> <component declarations: UUT and verification components> <signal declarations for UUT and verification components> begin <component instantiations> tb_command_0: process <variable declarations> <subroutine and function declarations> 15

Testbenk forts. begin addrmap_list:= addr_list_gen(log, addrmap_package ); probe_list:= probe_list_gen(log, testbench ); include( start.cmd, forced_eof); if (error_no>0) then <report number of errors to log file> else <report simulation successful to log file> end if; end process tb_command_0; sim_limit: process <terminate simulation if longer than specified time limit! > 16

Subprogrammer Robin gjenbrukspakke (robin_pck.vhd + robin_bdy.vhd): addr_list_gen -- lager adresselisten get_address -- returnerer adresseverdi hvis den finnes probe_list_gen -- lager signal listen get_probe -- returnerer signal med type og evnt. lengde hvis det finnes rm_space -- fjerner blanke i en linje fra en fil frem til første ikke blanke readword -- leser neste ord frem til neste blanke find_char -- søker i linjen frem til spesifisert tegn writef -- skriver melding til log. fil div. for klokkesignal generering, strobesignal generering og string behandling 17

Subprogrammer forts. Testbenk prosjekt pakke (chip_tb_pck.vhd + chip_tb_bdy.vhd): PifWrite -- Prosessor IF skriv PifRead -- Prosessor IF les PifCheck -- Prosessor IF les og sjekk mot forventet verdi Funksjonene kalles fra procedures i kommando tolkeren: MW(tsize, address, data) -- Memory Write MR(tsize, address, data) -- Memory Read MC(tsize, address, data) -- Memory Check Subprogrammer i testbenk tb_command process: MW, MR, MC, include, set, check og wait4. PifWrite, PifRead og PifCheck funksjonene må tilpasses prosessoren i systemet (PowerQUICC, ARM, SPI protokoll, MicroBlaze, osv.). 18

PIF write 1 -- up Write procedure MW ( constant tsize : in transaction_size; constant addr : in std_logic_vector(address_length-1 downto 0); constant data : in std_logic_vector(data_length-1 downto 0)) is begin PifWrite (tsize, addr, data, mclk, cs_n, rw, we_n, oe_n, psdval_n, ain, d, ta_n, log, cycle_no); end procedure MW; 19

PIF write 2 procedure PifWrite ( constant tsize : in transaction_size; -- Halfword/Upper/Lower size constant addr : in std_logic_vector(address_length-1 downto 0); -- EPOS local address constant data : in std_logic_vector(data_length-1 downto 0); -- data signal clk : in std_logic; signal cs_n : out std_logic; -- Chip select signal rw : out std_logic; -- read/write access signal we_n : out std_logic_vector(1 downto 0); -- write access signal oe_n : out std_logic; -- output ena. in read access signal psdval_n : out std_logic; -- read access termination signal ain : out std_logic_vector(address_length-1 downto 0); -- address signal d : out std_logic_vector(data_length-1 downto 0); -- ext. data out signal ta_n : in std_logic; -- write complete file log : text; signal cycle : in natural ) is begin wait until rising_edge(clk);.. end procedure PifWrite; 20

PIF write 3 cs_n <= '0' after cs_delay; rw <= '0' after rw_delay; psdval_n <= '1' after rw_delay; ain <= addr after rw_delay; d <= data after rw_delay; we_n <= (others => '1'); if (tsize=byte and addr(0)='0') or tsize=halfword then we_n(0) <= '0' after we_delay; end if; if (tsize=byte and addr(0)='1') or tsize=halfword then we_n(1) <= '0' after we_delay; end if; wait on clk until ta_n='0'; we_n <= (others => '1'); d <= (others => 'Z') after deactivate_delay; wait on clk until ta_n=pull_up or ta_n='1'; writef(log, cycle,"pif Write to Stanley" & " @ " & lv2strx(addr,address_length) & "<= " & lv2strx(data,16)); cs_n <= '1' after deactivate_delay; rw <= '1' after deactivate_delay; ain <= (others => '0') after deactivate_delay; Tcycle(2); 21

Eksempel: start.cmd & setup.cmd map chip_addrmap include setup.cmd include rw.cmd report -n Simulation completed set arst_n 0 run -c 100 set arst_n 1 report -n Reset done wait4 irq_n 0 ifn report -e Waited for clock stable interrupt. Simulation terminated quit end mw -b PIF_CLK_STATUS x'00 wait4 irq_n 1 if report -n Master clock stable else report -e Waited for deactivation of clock stable interrupt. Simulation terminated quit end NOTE: Invalid addresses in address map package: 0 NOTE: Invalid data in address map package: 10 NOTE: Invalid probe signals in testbench: 3 0 Start of simulation 0 NOTE: Open file: setup.cmd 0 Set signal arst_n to value: 0 100 Set signal arst_n to value: 1 100 NOTE: Reset done 61747 Waited until signal irq_n got value: 0 61758 Pif Write to Stanley @ 0000010<= 0000 61760 Waited until signal irq_n got value: 1 61760 NOTE: Master clock stable 61760 NOTE: Close file: setup.cmd : : : 22

Eksempel: rw.cmd med feil mw -h ADIF_DUMMY x'555a mc -h ADIF_DUMMY x'555a mw -h ADIF_DUMMY x'aaa5 mc -h ADIF_DUMMY x'aa55 set hp_clk 0 run -c 1 check hp_clk 0 if report -n hp_clk signal set to zero. else report -e hp_clk signal not set to zero. end set hp_clk 1 run -c 1 check hp_clk 0 ifn report -e hp_clk signal not set to one. else report -n hp_clk signal set to one. end set hp_clk2 1 run -c 1 check hp_clk2 0 : : 61760 NOTE: Open file: rw.cmd 61771 Pif Write to Stanley @ 0020000<= 555A 61782 Pif Read from Stanley @ 0020000<= 555A 61798 Pif Write to Stanley @ 0020000<= AAA5 61809 Pif Read from Stanley @ 0020000<= AAA5 61814 ERROR! data read: A5, expected : 55 61814 Set signal hp_clk to value: 0 61815 Checked signal hp_clk with value: 0 expected value: 0 61815 NOTE: hp_clk signal set to zero. 61815 Set signal hp_clk to value: 1 61816 Checked signal hp_clk with value: 1 expected value: 0 61816 ERROR: hp_clk signal not set to one. 61816 ERROR: Invalid set signal command with unknown signal: hp_clk2 to value: 1 61817 ERROR: Checked signal hp_clk2, but signal not found! 61817 NOTE: Close file: rw.cmd 61817 NOTE: Simulation completed 62053 ERROR: Simulation failed! Number of errors: 4 23

Eksempel: rw.cmd uten feil mw -h ADIF_DUMMY x'555a mc -h ADIF_DUMMY x'555a mw -h ADIF_DUMMY x'aaa5 mc -h ADIF_DUMMY x'aaa5 set hp_clk 0 run -c 1 check hp_clk 0 if report -n hp_clk signal set to zero. else report -e hp_clk signal not set to zero. end set hp_clk 1 run -c 1 check hp_clk 1 ifn report -e hp_clk signal not set to one. else report -n hp_clk signal set to one. end set hp_clk 1 run -c 1 check hp_clk 1 : : 61760 NOTE: Open file: rw.cmd 61771 Pif Write to Stanley @ 0020000<= 555A 61782 Pif Read from Stanley @ 0020000<= 555A 61798 Pif Write to Stanley @ 0020000<= AAA5 61809 Pif Read from Stanley @ 0020000<= AAA5 61814 Set signal hp_clk to value: 0 61815 Checked signal hp_clk with value: 0 expected value: 0 61815 NOTE: hp_clk signal set to zero. 61815 Set signal hp_clk to value: 1 61816 Checked signal hp_clk with value: 1 expected value: 1 61816 NOTE: hp_clk signal set to one. 61816 Set signal hp_clk to value: 1 61817 Checked signal hp_clk with value: 1 expected value: 1 61817 NOTE: Close file: rw.cmd 61817 NOTE: Simulation completed 62053 NOTE: Simulation successful! 24

Konklusjon Laget et enkelt og fleksibelt kommandospråk. Ingen endring av VHDL testbenk ved endringer i adresse map packager. Ingen endringer av testbenk ved nye probe signaler, men ved meget lange simuleringer må mye brukte signalnavn kodes i VHDL funksjonene check, wait4 og set for å unngå økt memory bruk og økt simuleringstid. Gjenbrukbare funksjoner. Brukt i mange FPGA prosjekter. 25