Hvem forstår timing i Verilog

S

sutapanaki

Guest
Hej,

Jeg har brug for hjælp med følgende Verilog kode.Hvis man forstår dette,
skal du svare:
Ur generation:1: altid
2: begynde
3: # 50 CLK <= 1'b0;
4: # 50 CLK <= 1'b1;
5: udgangenTiden i Verilog: begivenhed tidsstyring:6: altid @ (posedge CLK)
7: begynde
8: if (CLK === 1'b1)
9: clk1 <= CLK;

10: udgangen

Spørgsmålet er: på det tidspunkt 100 og i tråd 6 og 9:
Hvad er værdien af CLK?
Den CLK bør planlagt at overgangen til en i slutningen af tid # 100, skal ikke det?

 
Jeg synes, du skulle have "første blok" til at bestemme værdien af ur i begyndelsen af starter din verylog.isn 't det sandt?

 
Nej, jeg tror ikke, jeg har brug for første blok i dette tilfælde, fordi CLK er tildelt en fiexd værdier 1'b0 og 1'b1.Mit spørgsmål er, om rækkefølgen af programkode i en tid skridt.
I koden jeg har det går sådan her:

1: altid
2: begynde
3: # 50 CLK <= 1'b0;
4: # 50 CLK <= 1'b1;
5: udgangen6: altid @ (posedge CLK)
7: begynde
8: if (CLK === 1'b1)
9: clk1 <= CLK;

10: udgangentid 50: CLK = 1'bx;
/ / linie 3: CLK er scheduel at få værdi 1'b0 ved udgangen af timestep 50;

tid 50: CLK = 1'b0;
/ / linie 4: overgangen 1'bx-> 1'b0 ikke triger @ (posedge CLK) og tildeling henretter ved udgangen af den tid skridttid 100: CLK = 1'b0;
/ / linie 3: CLK er scheduel at få værdi 1'b0 ved udgangen af timestep 100;

tid 100: CLK = 1'b0;
/ / linie 5: overgangen 1'b0 -> 1'b1 trigers @ (posedge CLK)

tid 100: CLK = 1'b1;
/ / linje 6: Den nyligt schedualed tilfælde henretter samtidig skridt 100 men CLK har allerede en ændret værdi.Hvorfor?

I de bøger, de siger, at de ikke-blokerende tildeling '<=' henretter som den sidste begivenhed efter alle blockin tilordninger schedualed for denne gang trin udføres.Også den nyligt trigered begivenheder.

 
Sutapanaki,

Dit ur bliver undefined (1'bx) indtil tidspunktet 50 enhed mellemrum (som fastsat af «tidsskala simulation direktivet).På dette tidspunkt vil det gå lav.100 enhed mellemrum uret vil overgangen til højt ...Thats det

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smile" border="0" />
 
Ja, jeg ved det.Hoever, mit spørgsmål er ikke om det.Som jeg sagde før jeg nødt til at forstå, om rækkefølgen for udførelse i en tid skridt.
Please, læst min tidligere post indtil udgangen.thnx

 
Jeg erklærede CLK og clk1 som reg, og kørte det i Modelsim:

CLK: begynder som X, ved t = 50ns det er lavt, ved t = 100ns det går højt, ved t = 150ns det er lav, og fortsætter toggling evigt på 10 MHz.

clk1: begynder som X, ved t = 100ns det går højt, og er fortsat høj evigt.

Det virker fint for mig.Blev du forventer forskellige opførsel?

 
på tidspunktet 100 og i tråd 6 og 9: værdien af CLK er'1 '
Den CLK bør planlagt at overgangen til en i slutningen af tid multi af # 100.

Den kode, du skrev, er problemet kode.

 
Hi echo47,

Jeg forventer anderledes adfærd på følgende måde:

1: altid
2: begynde3: #50 clk <= 1'b0;
4: #50 clk <= 1'b1; $ display ($ tid "CLK% b", CLK);

/ / her CLK vil blive CLK == 1'b0 grund af den ikke blokerer for overdragelse

5: udgangen6: altid @ (posedge CLK)
7: begynde
$ display ($ tid "CLK% b", CLK)

/ * Jeg forventede forskellige opførsel her: Jeg forventer CLK == 1'b0.
Som det ovenfor.
Det er, hvad jeg forventer af en ikke blokerer opgave, når timestep (100) er ikke færdige endnu.
Simulationen viser CLK == 1'b1.
Så den ikke blokerer for overdragelse eksekveres ikke ved udgangen af den tid skridt, men et sted i midle - før begivenheden det trigers.
Dette overrasker mig * /8: if (CLK === 1'b1)
9: clk1 <= CLK;

10: udgangen

 
Jeg har fået et meget godt svar på mit spørgsmål.For de interesserede se link:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&newwindow=1&selm=sdd4qn49f4e.fsf% 40shell01.TheWorld.com

 
Du kan nyde den officielle Verilog standarden IEEE Std 1364-2001.Den er fuld af sådanne oplysninger.
Det
er på MCU Fileman under Specifikationer / IEEE.

 

Welcome to EDABoard.com

Sponsor

Back
Top