Assign statements bruges til at drive værdier på nettet. Og det bruges også i Dataflowmodellering .
for sløjfe i c
Signaler af type wire eller en datatype kræver kontinuerlig tildeling af en værdi. Så længe +5V-batteriet er påført den ene ende af ledningen, vil den komponent, der er tilsluttet den anden ende af ledningen, få den nødvendige spænding.
Dette koncept realiseres af assign-sætningen, hvor enhver ledning eller anden lignende ledning (data-typer) kan drives kontinuerligt med en værdi. Værdien kan enten være en konstant eller et udtryk bestående af en gruppe af signaler.
Syntaks
Tildelingssyntaksen starter med nøgleordet assign, efterfulgt af signalnavnet, som enten kan være et signal eller en kombination af forskellige signalnet.
Det drivstyrke og forsinke er valgfrie og bruges mest til dataflowmodellering end syntetisering til ægte hardware.
Signalet på højre side evalueres og tildeles nettet eller udtryk for net på venstre side.
assign = [drive_strength] [delay]
Delay-værdier er nyttige til at specificere forsinkelser for gates og bruges til at modellere timing-adfærd i rigtig hardware. Værdien dikterer, hvornår nettet skal tildeles den evaluerede værdi.
Regler
Nogle regler skal følges under brugen af en tildelingserklæring:
- LHS bør altid være en skalar, vektor eller en kombination af skalar- og vektornet, men aldrig et skalar- eller vektorregister.
- RHS kan indeholde skalar- eller vektorregistre og funktionskald.
- Når en operand på RHS ændrer sig i værdi, vil LHS blive opdateret med den nye værdi.
- Tildel erklæringer kaldes også løbende opgaver.
Tildel reg Variabler
Vi kan ikke køre eller tildele reg type variabler med en assign-sætning, fordi en reg-variabel er i stand til at lagre data og ikke drives kontinuerligt.
Reg-signaler kan kun drives i proceduremæssige blokke, såsom altid og initial.
Implicit kontinuerlig tildeling
Når en assign-sætning bruges til at tildele det givne netto med en vis værdi, kaldes det en eksplicit opgave
Hvis en opgave, der skal udføres under nettet, erklæres, kaldes det en implicit opgave.
wire [1:0] a; assign a = x & y; // Explicit assignment wire [1:0] a = x & y; // Implicit assignment
Kombinationslogisk design
Overvej følgende digitale kredsløb lavet af kombinationsporte og de tilsvarende Verilog kode.
Kombinationslogik kræver, at inputs kontinuerligt drives for at vedligeholde outputtet, i modsætning til sekventielle elementer som flip flops, hvor værdien fanges og gemmes ved kanten af et ur.
streng som en matrix
En tildelt sætning opfylder formålet, fordi output o opdateres, hver gang nogen af inputs på højre side ændres.
// This module takes four inputs and performs a Boolean // operation and assigns output to o. // logic is realized using assign statement. module combo (input a, b, c, d, output o); assign o = ~((a & b) | c ^ d); endmodule
Hardwareskema
Efter designudarbejdelse og syntese opfører et kombinationskredsløb sig på samme måde som modelleret af assign-sætningen.
Signalet o bliver 1, når kombinationsudtrykket på RHS bliver sandt.
På samme måde bliver o 0, når RHS er falsk. Output o er X fra 0ns til 10ns, fordi input er X på samme tid.