Verilog kode kebingungan

Y

yann_sun

Guest
Hi, semua pertanyaan saya adalah mengapa neg_A dan neg_B tidak sama. Untuk lebih spesifik, neg_A berasal dari tepi negatif terakhir, bagaimanapun, neg_B adalah tepi negatif ini B. Stimulus A dan B adalah sama. Berikut adalah kode selalu @ (A) mulai jika (A) = $ realtime pos_A; layar $ ("% f", neg_A);; lain neg_A = $ realtime; akhir selalu @ (negedge B) mulai neg_B = $ realtime $ display ("% f", neg_B); akhir
 
Saya pikir reson adalah bahwa selalu blok urutan eksekusi tidak didefinisikan oleh IEEE standart, sehingga simulator dapat mengevaluasi pertama [saya] selalu @ (A) [/I] blok dan setelah [saya] selalu @ (negedge B) [/ I ] atau sebaliknya. Jika [saya] selalu @ (negedge B) [/I] akan dievaluasi pertama Anda akan melihat nilai baru untuk [saya] neg_B [/I] dan yang lama (dari neg sebelumnya kejadian A) untuk [saya] neg_A [/I] ... Baca lebih lanjut tentang shedule acara selama proses simulasi [URL = "http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf"] sini [/URL].
 
Terima kasih Alosevskoy, Apa yang Anda maksud dengan jika? Apakah dievaluasi secara acak? Apakah itu tergantung pada simulator yang berbeda

<span style="color: grey;"><span style="font-size: 10px">---------- Posting ditambahkan pada 02:50 ---------- Previous post? Berada di 02 : 49 ---------- </span></span>
Terima kasih Alosevskoy, Apa yang Anda maksud dengan jika? Apakah dievaluasi secara acak? Apakah itu tergantung pada simulator yang berbeda?
 
Ya, seperti yang saya mengerti simulator yang berbeda dapat membuat urutan acara yang berbeda di mana blok selalu dievaluasi, sehingga hasilnya berbeda) Apa simulator yang Anda gunakan? Saya mencoba untuk model kode berikut dan neg_A dan neg_B adalah sama (simulator isim dari Xilinx ISE) ...
Code:
 modul tb (); pos_A realtime, neg_A, neg_B; reg tgl_Ev = 0; selalu # (10) tgl_Ev = ~ tgl_Ev; selalu @ (tgl_Ev) mulai if (tgl_Ev) pos_A = realtime $; neg_A lain = $ realtime ; akhir selalu @ (negedge tgl_Ev) mulai neg_B = $ realtime; $ tampilan ("----------------------"); $ display ("% f" , neg_A); $ display ("% f", neg_B); akhir pertama # (100) $ selesai; endmodule
 
Saya baru saja mencoba untuk model kode ini dengan gratis simulator Verilog Icarus (iverilog) dan itu memberi saya hasil yang berbeda:
---------------------- 0.000000 20.000000 20.000000 40.000000 ---------------------- ---------------------- 40.000000 60.000000 60.000000 80.000000 ----------------------
Hasil dari isim dan ModelSim adalah sama:
--------- 20.000000 20.000000 ------------- ---------------------- 40.000000 40.000000 ----------- ----------- ---------------------- 60.000000 60.000000 80.000000 80.000000
 
Saya menggunakan vcs. Vcs mendapat hasil yang sama seperti iverilog dengan mensimulasikan kode tb Anda.
 

Welcome to EDABoard.com

Sponsor

Back
Top