Verilog kode forvirring

Y

yann_sun

Guest
Hei, alle mine spørsmål hvorfor neg_A og neg_B er ulik. For å være spesifikk, stammer neg_A fra siste negative kanten av A, derimot, er neg_B dagens negative kanten av B. Stimulus A og B er de samme. Her er koden alltid @ (A) begynne if (A) pos_A = $ realtime, ellers neg_A = $ realtime; end alltid @ (negedge B) begynner neg_B = $ realtime; $ display ("% f", neg_A); $ displayet ("% f", neg_B); end
 
Jeg tror reson er at det alltid blokkerer gjennomføring sekvensen ikke er definert av IEEE standart, så kan simulator evaluere første alltid @ (A) blokk og etter alltid @ (negedge B) [/ I ] eller vice-versa. Hvis alltid @ (negedge B) vil bli evaluert første du vil se den nye verdien for neg_B og den gamle (fra den forrige NEG A hendelse) for neg_A ... Les mer om arrangementet shedule under simuleringen prosessen [URL = "http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf"] her [/URL].
 
Takket Alosevskoy, hva mener du med hvis? Er det evalueres tilfeldig? Betyr det avhenger av ulike simulator?

<span style="color: grey;"><span style="font-size: 10px">---------- Innlegg lagt ved 02:50 ---------- Forrige post var klokken 02 : 49 ---------- </span></span>
Takk Alosevskoy, hva mener du med hvis? Er det evalueres tilfeldig? Betyr det avhenger av ulike simulator?
 
Ja, slik jeg forstår ulike simulator skape ulike arrangement sekvenser der alltid blokkene er evaluert, slik at resultatene er forskjellige) Hva simulator bruker du? Jeg prøvde å modellere følgende kode og neg_A og neg_B var de samme (simulator ISim fra Xilinx ISE) ...
Code:
 modul tb (); realtime pos_A, neg_A, neg_B; reg tgl_Ev = 0; alltid # (10) tgl_Ev = ~ tgl_Ev; alltid @ (tgl_Ev) begynne if (tgl_Ev) pos_A = $ realtime, ellers neg_A = $ realtime ; end alltid @ (negedge tgl_Ev) begynner neg_B = $ realtime; $ vise ("----------------------"); $ display ("% f" , neg_A); $ display ("% f", neg_B); end initial # (100) $ ferdig, endmodule
 
Jeg har nettopp prøvd å modellere denne koden med gratis Icarus Verilog (iverilog) simulator og det ga meg et annet resultat:
---------------------- 0.000000 20.000000 ---------------------- 20.000000 40.000000 ---------------------- 40.000000 60.000000 ---------------------- 60.000000 80.000000
Resultatene fra ISim og ModelSim er de samme:
--------- ------------- 20.000000 20.000000 ---------------------- 40.000000 40.000000 ----------- ----------- 60.000000 60.000000 ---------------------- 80.000000 80.000000
 
Jeg bruker vcs. VCS fikk samme resultat som iverilog ved å simulere dine tb kode.
 

Welcome to EDABoard.com

Sponsor

Back
Top