Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
VERILOG APV-3
1
2Discipline
• Discipline su setovi definicija i osobina za određeni tip sistema. U električnimsistemima, discipline definišu tipove čvorova, portova i grana.
• Konzervativne discipline se referenciraju na dve fizičke veličine, jedna je potencijal,a druga je protok.
• U konzervativnom električnom sistemu, potencijal predstavlja napon, dok protokodgovara struji
• Discipline za protok signala (signal-flow) se referenciraju na samo jednu fizičkuveličinu, bilo potencijal, ili protok
• U single-nature disciplinama standard zahteva da fizička veličina bude potencijal,čak i u disciplinama sa strujom.
Conservative Signal-Flow [Potential]discipline electrical discipline voltage
potential Voltage; potential Voltage;flow Current;
enddiscipline enddiscipline
3Empty Signal-Flow [Flow]discipline empty discipline current
potential Current;enddiscipine enddiscipine
Discipline i fizičke veličine se definišu i za mehaničke, magnetske i termodinamičkesisteme
nature Position nature Forceaccess = Pos; access = F ;units = “m”; units = “N”;abstol = 1u ; abstol = 1n ;
endnature endnaturediscipline mechanical
potential Position ;flow Force ;
enddiscipline
4
DisciplinePotential Flow
Nature Access Units Nature Access Units
Electrical Voltage V V Current I A
Magnetic Magnetomotive Force
MMF A-turn Flux Phi Wb
Thermal Temperature Temp C Power Pwr W
Kinematic[Position]
Position Pos m Force F N
Kinematic[Velocity]
Velocity Vel m/s Force F N
Rotational[Phase]
Angle Theta rads Angular Tau N*m
Rotational[Velocity]
Angular Velocity Omega rads/s Angular Tau N*m
Discipline
5 Kompatibilnost
disciplina
Svaka disciplina je kompatibilna sasamom sobom
Prazna disciplina (empty discipline) jekompatibilna sa svim disciplinama
Ako u obe discipline postoje iste fizičkeveličine one su kompatibilne
Discipline su kompatibilne čak iakonemaju obe fizičke veličine, ukoliko imje jedna fizička veličina zajednička
6Posmatrajmo sledeće disciplinenature Voltage nature Currentaccess = V ; access = I ;units = "V" ; units = "A" ;abstol = 1u ; abstol = 1p ;endnature endnature
discipline emptydisenddiscipline
discipline electricalpotential Voltage ;flow Current ;
enddiscipline
discipline sig_flow_vpotential Voltage ;
enddiscipline
Electrical i sig_flow su kompatibilne
7
Terminologija
Kao i promenljive, veze (wires) se nazivaju još i skladištima vrednosti. One suobično bez zapamćenog stanja (što znači da moraju biti konstantno pobuđivane ili ćeprogram zaboraviti njihovu vrednost) i generalno se koriste za povezivanjekomponenti.
Postoje dve osnovne vrste veza: za kontinualne i diskretne događaje. Kontinualneveze su dostupne u Verilog-A i Verilog-AMS i deklarišu se disciplinom. Vezediskretnog događaja su dostupne u Verilogu i Verilog-AMS-u.
Mreža (nets) predstavlja kolekciju veza po kojima komuniciraju komponente jednogsistema. Kao takve, one obuhvataju više od jedne komponente. Komponente seumrežavaju kroz portove. Portovi se deklarišu u modulu, kada dobijaju ime i smer.Na taj način se imena koja se koriste za svaku vezu mreže obično razlikuju u svakojod komponenti koje mreža povezuje.
8 Mrežne discipline
Koristi se deklarisanje mrežne discipline radi povezivanja mreže sa prethodnodefinisanom disciplinom
net_discipline_declaration ::=discipline_identifier [range] list_of_nets ;
| wire [range] list_of_nets ;range ::=
[ msb_expr : lsb_expr ]list_of_nets ::=
net_type| net_type , list_of_nets
msb_expr ::=constant_expr
lsb_expression ::=constant_expr
net_type ::=net_identifier [range] [= constant_expr | constant_array_expr]
9 Mogu se koristiti standardni atributi za opis mrežne discipline(* desc="drain terminal" *) electrical d;
Skalarna mreža je mreža koja je deklarisana bez opsega, dok se mreža deklarisana saopsegom zove vektorska mreža
magnetic inductor1, inductor2 ; //Declares two scalar netselectrical [1:10] node1 ; //Declares a vector netwire [3:0] connect1, connect2 ; //Declares two vector netselectrical [0:4] bus = {2.3,4.5,,6.0} ; //Declares vector net with nodesetvalues
Sledeći primer nije ispravan jer opseg, ako je definisan, mora biti prva stavka nakonidentifikatora discipline, a zatim se primenjuje na sve navedene net identifikatore
electrical AVDD, AVSS, BGAVSS, PD, SUB, [6:1] TRIM ; // Illegal Cadence preporučuje da se prvo definiše smer porta pre nego što se definiše
disciplina. U sledećem primeru su in i out definisani pre deklarisanja električnediscipline
discipline emptydisenddisciplinemodule comp1 (out, in, unknown1, unknown2) ;output out ;input in ;electrical out, in ;emptydis unknown1 ; // Declared with an empty discipline
10analog
V(out) <+ 2 * V(in)endmodule
Moduo comp1 ima 4 porta: out, in, unknown1 i unknown2. U ovom modulu sedeklarišu električni portovi out i in, gde se i koriste. Port unknown1 je deklarisan upraznoj disciplini i ne može se koristiti u analognom bloku jer nema načina da sepristupi ovom signalu. Međutim port unkonown1 se može koristiti u listi portova,gde nasleđuje prirodu portova modula instanci koji su povezani sa njim.
Pošto se unknown2 pojavljuje u listi portova, a nije deklarisan u telu modula,Verilog-A ga implicitno deklariše kao skalarni port sa podrazumevanomdisciplinom. Podrazumevani tip discipline je wire.
Posmatrajmo sledeći primer:module five_inputs( portbus );input [0:5] portbus;electrical [0:5] portbus;real x;analog begin
generate i ( 0,4 )V(portbus[i]) <+ 0.0;
endendmodule
11 U prethodnom primeru moduo five_inputs koristi port portbus. To je jedini port koji
se pojavljuje u listi, ali se unutar modula definiše sa opsegom U prethodna dva primera su ilustrovana dva načina korišćenja netova u modulima
• Port u modulu se može definisati dajući listu netova u naredbi za opis modula• Ponašanje modula se može opisati i deklarisanjem i korišćenjem netova u
okviru tela modula Kada se želi opisati konzervativni sistem, moraju se koristiti konzervativne
discipline za definisanje mreža. Kada se želi opisati protok signala, ili mešovitisignali i konzervativni sistem, može se definisati mreže sa disciplinama protokola.
Kao rezultat veza portova u analognim mrežama, jedan čvor može biti vezan zabrojne mreže različitih disciplina.
Doprinos struje čvoru koji je vezan samo za discipline potencijala su nedozvoljene.Potencijal takvog čvora je zbir svih potencijalnih doprinosa, ali protok za takav čvornije definisan.
Mreže disciplina protoka signala u modulima ne smeju biti vezane za ulazno-izlazneportove i ne smeju doprinositi potencijalu za ulazne portove.
Da bi se pristupilo abstol koji je povezan sa mrežama potencijala, ili protoka, trebakoristiti formu net.potential.abstol , ili net.flow.abstol
12 Imenovana grananja Koriste se za deklarisanje puta između dve mreže u kontinualnoj disciplini. Cadence preporučuje da se koriste imenovana grananja, naročito kada se debaguje
sa komandom Tcl. Na primer, lakše je uneti value branch1 nego value \vect1[5]vec2[1] i onda računati razliku između vraćenih vrednosti.
Sintaksa:branch_declaration ::=
branch list_of_branches ;list_of_branches ::=
terminals list_of_branch_identifiersterminals ::=
( scalar_net_identifier )| ( scalar_net_identifier , scalar_net_identifier )
list_of_branch_identifiers ::=branch_identifier| branch_identifier , list_of_branch_identifiers
scalar_net_identifier mora biti ili skalarna mreža ili jedan element vektorske mreže. Deklarisanje grananja se može uraditi jedino u modulu. Ne smeju se kombinovati
eksplicitna i implicitna deklarisanja za jednu granu. Skalarni netovi koji povezuju deklaraciju i granu se zovu terminali grana. Ako se
specificira jedan net, Verilog-A podrazumeva da je drugi net masa.
13 Terminali grana moraju biti kompatibilni sa disciplinama. Posmatrajmo sledeća deklarisanja
voltage [5:0] vec1 ; // Declares a vector netvoltage [1:6] vec2 ; // Declares a vector netvoltage sca1 ; // Declares a scalar netvoltage sca2 ; // Declares a scalar netbranch (vec1[5],vec2[1]) branch1, (sca1,sca2) branch2 ;
branch1 je dobro deklarisana jer je svaki terminal grane jedan element net vektora.Druga grana, branch2, je takodđe dobro deklarisana jer su oba čvora sca1 i sca2skalarni netovi.
Implicitna grananja Kao što Cadence preporučuje, može se referencirati na ime grane sa samo jednim
identifikatorom Alternativno, može biti lakše da se referencira na granu pomoću njenog terminala
grane. U sledećem primeru se koristi deklarisanje implicitne grane. Međutim, ne smeju se
kombinovati imenovana i implicitna deklarisanja za jednu granu.
14module diode (a, c) ;inout a, c ;electrical a, c ;parameter real rs=0, is=1e-14, tf=0, cjo=0, phi=0.7 ;parameter real kf=0, af=1, ef=1 ;analog begin
I(a, c) <+ is*(limexp((V(a, c)-rs*I(a, a))/$vt) - 1);I(a, c) <+ white_noise(2* `P_Q * I(a, c)) ;I(a, c) <+ flicker_noise(kf*pow(abs(I(a, c)),af),ef);
endendmodule
Prethodni primer koristi implicitna grananja, a ekvivalentan je sledećem primeru koji koristi imenovana grananja.
module diode (a, c) ;inout a, c ;electrical a, c ;branch (a,c) diode, (a,a) anode ; // Declare named branchesparameter real rs=0, is=1e-14, tf=0, cjo=0, phi=0.7 ;parameter real kf=0, af=1, ef=1 ;analog begin
I(diode) <+ is*(limexp((V(diode)-rs*I(anode))/$vt) - 1);I(diode) <+ white_noise(2* `P_Q * I(diode)) ;I(diode) <+ flicker_noise(kf*pow(abs(I(diode)),af),ef);
endendmodule
15
Primer za implicitna i eksplicitna grananja
Paralelno RLC kolo
Implicitno grananje:module rlc (a, b);inout a,b; electrical a,b;parameter real R=1k exclude 0;parameter real C=1p;parameter real L=1n exclude 0;analog begin
I(a,b) <+ V(a,b)/R;I(a,b) <+ ddt(C*V(a,b));I(a,b) <+ idt(V(a,b)/L);
endendmodule
16
Eksplicitno grananje:module rlc (a, b);inout a,b; electrical a,b;parameter real R=1k exclude 0;parameter real C=1p;parameter real L=1n exclude 0;branch (a,b) res, cap, ind;analog begin
I(res) <+ V(res)/R;I(cap) <+ ddt(C*V(cap));I(ind) <+ idt(V(ind)/L);
endendmodule
Naredbe u analognim blokovima
Naredbe dodeleU Verilog-A postoje nekoliko vrsta naredbi dodele vrednosti: proceduralne naredbe dodele,naredba za dodelu vrednosti grane i indirektne naredba dodele. Proceduralna naredba dodele se koristi da bi se modifikovale cele i realne promenljive Naredbe za dodelu vrednosti grane i indirektne naredbe dodele vrednosti se upotrebljavaju zamodifikaciju vrednosti grana, potencijal i protok.
Proceduralne naredbe dodeleprocedural_assignment ::=
lexpr = expression ;lexpr ::=
integer_identifier| real_identifier| array_element
array_element ::=integer_identifier [ constant_expression ]| real_identifier [ constant_expression ]
17
Leva strana operanda mora biti celobrojna, realna, ili element celobrojnog ili realnog niza. Tipleve strane određuje vrstu dodele vrednosti.
Desni operand može biti bilo koji proizvoljni skalarni izraz iz legalnog operanda i operator.
U sledećem fragmentu koda promenljivoj phase se dodeljuje realna vrednost. Ta vrednostmora biti realna jer je phase definisana kao realna promenljiva.
real phase ;analog begin
phase = idt( gain*V(in) ) ; Proceduralna naredba dodele vrednosti se može koristiti i za dodeljivanje vrednosti nizovima.
Ako je r promenljiva definisana kao real r[0:3], sum ;
tada se može izvršiti dodela vrednosti članovima nizar[0] = 10.1 ;r[1] = 11.1 ;r[2] = 12.1 ;r[3] = 13.1 ;sum = r[0] + r[1] + r[2] + r[3] ;
18
Naredbe za dodelu vrednostigrane
Koristi se za modifikaciju vrednosti signalabranch_contribution ::=
bvalue <+ expression ;bvalue ::=
access_identifier ( analog_signal_list )analog_signal_list ::=
branch_identifyer| node_or_port_identifier| node_or_port_identifier , node_or_port_identifier
bvalue specificira izvornu granu signala i mora se sastojati od pristupne funkcije koja seprimenjuje na datu granu
expression može biti linearan, nelinearan, ili dinamički izraz Ova naredba se mora nalaziti unutar analognog bloka. Kao što se vidi proceduralno dodeljivanje vrednosti i dodeljivanje vrednosti grane se značajno
razlikuju. Proceduralno dodeljivanje se koristi samo na promenljivu, dok se naredba zadodelu vrednosti grane primenjuje na pristupnu funkciju.
Proceduralne naredbe dodele dodeljuju novu vrednost promenljivoj, dok se u drugom slučajuvrednost dodaje na prethodnu vrednost.
19
Evaluacija naredbe za dodelu vrednosti grane
Procedura:1. Simulator procenjuje desnu stranu operanda2. Simulator dodaje vrednost na prethodno zapamćenu vrednost grane3. Na kraju evaluacije analognog bloka simulator dodeljuje sumiranu vrednost izvornoj grani Na primer u električnoj disciplini fragment koda
V(n1, n2) <+ expr1 ;V(n1, n2) <+ expr2 ;
ekvivalentan je koduV(n1, n2) <+ expr1 + expr2 ;
20
Switch Branches
Switch branch je grana koja može biti potencijal ili protok, a koristi se pri modelovanjuidealnog prekidača
Grana može biti izvor potencijala kada se primenjuje potencijal, ili izvor protoka (struje) kadase primenjuje protok
21
Switch Branches
Model idealnog prekidača:1. Kada je ulaz veći od praga, prekidač se zatvara a grana je u kratkom spoju. U ovom slučaju
naponski izvor nultog napona je ekvivalent kratkog spoja.2. Prekidač je otvoren u drugom slučaju i tada ne protiče struja. Tada umesto naponskog izvora
nultog napona grana postaje strujni izvor nulte struje.
module idealSwitch (pout, nout, psense, nsense);inout pout, nout, psense, nsense;electrical pout, nout, psense, nsense;branch (pout, nout) out, (psense, nsense) controlparameter real thresh;analog begin
if (V(control) > thresh)V(out) <+ 0; // switch closed
elseI(out) <+ 0; // switch opened
endendmodule
22
Kontrolisani strujni i naponski izvori
VCVS VCCSmodule vcvs (po, no, pi, ni); module vccs (po, no, pi, ni);input pi, ni, input pi, ni,output po, no; output po, no;electrical po, no, pi, ni; electrical po, no, pi, ni;parameter real vgain=0; parameter real gm=0;Analog analog
V(po, no) <+ vgain *V(pi, ni); I(po, no) <+gm*V(pi, ni);endmodule endmodule
CCVS CCCSmodule ccvs (po, no, pi, ni); module cccs (po, no, pi, ni);input pi, ni, input pi, ni,output po, no; output po, no;electrical po, no, pi, ni; electrical po, no, pi, ni;parameter real rm=0; parameter real igain=0;Analog analog
V(po, no) <+ rm *I(pi, ni); I(po, no) <+ igain*I(pi, ni);endmodule endmodule
23
Kontrolisani strujni i naponski izvori
Potential source branch Flow source branch
Sa izvorima potencijala i izvorima protoka se mogu modelovati četiri osnovna kontrolisanaizvora
VCVS VCCSbranch (pi,ni) in, (po,no) out; branch (pi,ni) in, (po,no) out;V(out) <+ vgain * V(in); I(out) <+ gm * V(in);
CCVS CCCSbranch (pi,ni) in, (po,no) out; branch (pi,ni) in, (po,no) out;V(out) <+ rm * I(in); I(out) <+ igain * I(in);
24
Indirektne naredbe dodele vrednosti
Sintaksa:ndirect_branch_assignment ::=
target : equation ;target ::=
bvalueequation ::=
nexpr == expressionnexpr ::=
bvalue| ddt ( bvalue )| idt ( bvalue )| idtmod ( bvalue )
Primer:V(out) : V(in) == 0 ;
koji znači: odrediti V(out) tako da V(in) bude nula.V(in) je u prethodnoj jednačini naponska proba (detektuje se vrednost napona na krajevima grane) Indirektna dodela vrednosti se može koristiti samo unutar analognog bloka.
25
Indirektne naredbe dodele vrednosti
Sledeći primer modeluje operacioni pojačavač sa beskonačnim naponskim pojačanjem. Indirektna dodela vrednosti ovde znači: odrediti V(out) tako da V(pin, nin) bude nula.
module opamp (out, pin, nin) ;output out ;input pin, nin ;voltage out, pin, nin ;analog
V(out) : V(pin, nin) == 0 ; // Indirect assignmentendmodule
Indirektna dodela vrednosti je nekompatibilna sa naredbom za dodelu vrednosti grane.Ukoliko grana ima indirektno dodeljenu vrednost, ta vrednost se ne može promeniti pomoćunaredbe za direktnu dodelu vrednosti grane.
26
Blok naredbe
Koriste se kada je potrebno više naredbi grupisati tako da se ponašaju kao jedna naredba. Pojedinačne naredbe se sekvencijalno izvršavaju.
Sintaksa:seq_block ::=
begin [ : block_identifier { block_item_declaration } ]{ statement }
endblock_item_declaration ::=
parameter_declarationinteger_declaration| real_declaration
Ako se doda identifikator bloka, mogu se deklarisati lokalne varijable koje se koriste unutarbloka. Sve lokalne promenljive koje se deklarišu su statične. Drugim rečima, jedinstvenalokacija postoji za svaku lokalnu varijablu, a ulazak ili izlazak iz bloka ne utiče na njenuvrednost.
Sledeći primer ima dva bloka, a u svakom od njih se definišu lokalne varijable. Iako su nekevarijable sa istim imenom u oba bloka, to je regularno jer su one lokalnog tipa.
27
Blok naredbe
integer j ;...
for ( j = 0 ; j < 10 ; j=j+1 ) beginif ( j%2 ) begin : odd
integer j ; // Declares a local variablej = j+1 ;$display ("Odd numbers counted so far = %d" , j ) ;
end else begin : eveninteger j ; // Declares a local variablej = j+1 ;$display ("Even numbers counted so far = %d" , j ) ;
endend
28
Uslovne naredbe
Sintaksa:conditional_statement ::=
if ( expression ) statement1[ else statement2 ]
Ako se expression u potpunosti sastoji od izraza genvar, literalne numeričke konstante,parametara ili funkcija analize, statement1 i statement2 mogu uključivati analogne operatore.
Primer1: unutrašnja i spoljašnja if-else formaif (index > 0)
if (i > j) // The next else belongs to this ifresult = i ;
else // This else belongs to the previous ifresult = j ;
else $strobe ("Index < 0"); // This else belongs to the first if
29
Primer2: jedan koristan oblik korišćenja if-else naredbeif ((value > 0)&&(value <= 1)) $strobe("Category A");else if ((value > 1)&&(value <= 2)) $strobe("Category B");else if ((value > 2)&&(value <= 3)) $strobe("Category C");else if ((value > 3)&&(value <= 4)) $strobe("Category D");else $strobe("Illegal value");
CASE naredba Naredba se koristi da bi se kontrolisalo koji se niz naredbi izvršava Sintaksa:
case_statement ::=case ( expression ) case_item { case_item } endcase
case_item ::=test_expression { , test_expression } : statement| default [ : ] statement
Default naredba je opciona. Upotreba više od jedne default naredbe nije dozvoljena Ako su expression i text_expression genvar izrazi, parametri ili analitičke funkcije, naredba
može uključivati analogne operatere
30
Primer u kome se određuje opseg promenljive value:real value ;...case (1)((value > 0)&&(value <= 1)) : $strobe("Category A");((value > 1)&&(value <= 2)) : $strobe("Category B");((value > 2)&&(value <= 3)) : $strobe("Category C");((value > 3)&&(value <= 4)) : $strobe("Category D");value <= 0 , value >= 4 : $strobe("Out of range");default $strobe("Error. Should never get here.");endcase
Primer: 4-input analog MUXcase (select)0: out=V(in0);1: out=V(in1);2: out=V(in2);3: out=V(in3);default: out=0;endcase
31