Aga Funksjoner og prosedyrer Funksjoner Operatorer Standard funksjoner/operatorer Overloading Package og Package body Operator inferencing Prosedyrer Side 1
Funksjoner(1) Benyttes mye i modeller for simulering Høynivå beskrivr for beregninger type konvertering Funksjoner som har anvr for syntese inkluderer Type konvertering Bruk av funksjoner som alternativ til komponent instansiering Overload operatorer og funksjoner Mange nyttige funksjoner definert i standard pakker (packages) IEEE 1076 IEEE 1164 (std_logic_1164) Synopsys biblioteker (støttet av de fleste synteseverktøy, ikke Warp2) IEEE 1076.3 (Syntese standard) Side 2
Funksjoner(2) Funksjons beskriv Kan bare ha input signaler som parametre Returner kun èn verdi (dette kan være et signal eller en vector) Sekvensiell beskriv Kan ikke ha wait statement Kan ikke definere signaler internt Funksjons deklarasjon en funksjon deklareres i den deklarative regionen av en arkitektur eller den deklarative regionen av en process Architecture func of functest Architecture func of functest -- Deklarasjoner -- Deklarasjoner bl2bit(a: BOOLEAN) bit bl2bit(a: BOOLEAN) bit bl2bit; bl2bit; -- Start of architecture -- Start of architecture func; func; Side 3
Funksjoner(3) Funksjons deklarasjoner Kan også deklareres i et package/package body par. package package my_func my_func bl2bit(a:boolean) bl2bit(a:boolean) bit; bit;.... Flere Flere funksjoner funksjoner my_func; my_func; -- -- Package Package body body package package body body my_func my_func bl2bit(a:boolean) bl2bit(a:boolean) bit bit a a 1 ; 1 ; 0 ; 0 ; bl2bit; bl2bit; -- -- Flere Flere funksjoner funksjoner.. my_func; my_func; Side 4
Funksjoner(4) Problematke beskrivr Bruk av variabler er ikke veldefinert i syntese og anbefales derfor ikke. Ikke garantert at alle synteseverktøy klarer den type beskriv maj(vec:bit_vector) maj(vec:bit_vector) bit bit variable variable tmp; tmp; tmp:0; tmp:0; for for i i in in vec range vec range loop loop vec(i) vec(i) 1 1 tmp:tmp+1; tmp:tmp+1; loop; loop; tmp > (vec high)/2 tmp > (vec high)/2 ( 1 ) ( 1 ) ( 0 ); ( 0 ); maj; maj; Side 5
Operatorer Operatorer defineres på samme måte som funksjoner, men ved: <operatornavn> Operatorer benyttes forskjellig fra funksjoner: Function Function + + (a,b (a,b :std_logic_vector) :std_logic_vector) std_logic_vector; std_logic_vector;.... sum sum a a + + b; b; ----- ----- add add (a,b):std_logic_vector) (a,b):std_logic_vector) std_logic_vector; std_logic_vector;.... sum sum add(a,b); add(a,b); Side 6
Bruk av funksjonsbibliotek Et package/package body par kan være kompilert til work use work.my_func.all; use work.my_func.all; -- eller -- eller -- use.work.my_func.bl2bit; -- dersom bare bl2bit skal gjøres synlig -- use.work.my_func.bl2bit; -- dersom bare bl2bit skal gjøres synlig entity... entity... architecture... architecture... signal a: BOOLEAN; signal a: BOOLEAN; signal b: bit; signal b: bit; b bl2bit(a); b bl2bit(a); architecture..; architecture..; eller til et annet bibliotek. Dette må ha et logk navn. Vi antar my_lib. library mylib; library mylib; use my_lib.my_func.all; use my_lib.my_func.all; -- eller -- eller -- use.my_lib.my_func.bl2bit; -- dersom bare bl2bit skal gjøres synlig -- use.my_lib.my_func.bl2bit; -- dersom bare bl2bit skal gjøres synlig Det logke navnet g i det aktuelle verktøyet og gjenspeiles gjerne i lagerstrukturen til verktøyet Side 7
Overloading(1) Overloading betyr å definere samme operator, funksjon eller prosedyre for forskjellige datatyper eller blanding av datatyper. VHDL-analyse/syntese programmet skiller de forskjellige overload operatorene, funksjonene eller prosedyrene fra hverandre ved å se på datatypen til de aktuelle parametre og sammenligner dem med de formelle parametrene. Side 8
Overloading(2) De kan være forskjellig antall parametre i de forskjellige overload operatorene, funksjonene eller prosedyrene. Pakken std_arith i Cypress biblioteket inneholder for oss de viktigste overload operatorene mellom std_logic og integer. ( +, -, >, <, - operatorene) Side 9
Overloading(3) Det finnes en rekke standard biblioteker med overload operatorer, funksjoner og prosedyrer i IEEE 1164 og 1076.3 IEEE 1164 Package std_logic_1164 Synopsys biblioteker (kompilert til IEEE) IEEE1076.3 Package std_logic_unsigned Package std_logic_signed Package std_logic_arith Package numeric_std NB! Det er viktig å sjekke ut hva det aktuelle synteseverktøyet støtter. De forskjellige synteseverktøyene kan ha organert dse bibliotekene forskjellig. Det betyr at man må re library use clause i VHDL-filen som skal synteteres. Side 10
Operator inferencing(1) Istedenfor å generere likninger kan synteseverktøyet identere operatorer eller funksjoner og generere en optimalert og teknologi-spesikk modul Denne prosessen kalles operator inferencing eller module generation. Use Use Cypress.std_arith.all; Cypress.std_arith.all;.... If If ab ab ; ; x x + + y; y; x+y x+y ab Side 11
Operator inferencing(2) loadable: loadable: process process (clk,ld) (clk,ld) ring_edge(clk) ring_edge(clk) (ld (ld 1 ) 1 ) c c d; d; c c c c + + 1; 1; process; process; c+1 d counter regter c ld Side 12
Prosedyrer Kan ere flere enn èn verdi Retur skjer via prosedyreparametre Parametre som skal eres må være deklarert som mode out eller inout. Kun sekvensiel konstruksjon Kan ha wait statement Størrr på vektorer defineres av aktuelle parametre Deklareres på samme steder som funksjoner og operatorer procedure procedure dff dff ( ( signal signal d: d: std_logic_vector; std_logic_vector; signal clk, rst: std_logic; signal clk, rst: std_logic; signal signal : : out out std_logic_vector) std_logic_vector) rst rst '1' '1' -- -- (others (others > > 0 ) 0 ) ikke ikke lov lov ; ; for for i i in in d range d range loop loop (i) (i) '0'; '0'; loop; loop; els els clk'event clk'event and and clk clk '1' '1' d; d; procedure; procedure; Side 13
Nyttige prosedyrer i testbench er Pakkenen std_textio fra IEEE og std_logic_textio fra Synopsys inneholder en rekke nyttige prosedyrer for å lese fra fil og skrive til fil: Bits og vectorer (som enkeltbit) read write octalt format oread owrite hexadesimalt format hread hwrite Dse finnes i en rekke overloadede utgaver Side 14