掃描二維碼
隨時(shí)隨地手機(jī)看文章
always @(posedge clk) begina = 0;a <= 1;$display(a);end這是一個(gè)很tricky 的問題!Verilog調(diào)度語義意味著當(dāng)前仿真時(shí)間存在一個(gè)4級(jí)的仿真隊(duì)列:1: Active Events (blocking statements)2: Inactive Events (#0 delays, etc)3: Non-Blocking Assign Updates (non-blocking statements)4: Monitor Events ($display, $monitor, etc).由于“a=0”是一個(gè) active event,因此它被安排到第一個(gè)“隊(duì)列”中?!?/span>a<=1”中的RHS是一個(gè)non-blocking event,因此它被放入第三個(gè)隊(duì)列中。最后,將display 語句放入第4個(gè)隊(duì)列中。只有monitor event隊(duì)列中的事件完成了才進(jìn)入到后面的仿真時(shí)間。因此,“a=0”會(huì)發(fā)生,然后顯示一個(gè)=0。如果我們?cè)谙乱粋€(gè)仿真時(shí)間中查看a的值,它將顯示1。?3、以下兩行Verilog代碼有什么區(qū)別?#5 a = b; a = #5 b;#5 a=b;等待5個(gè)時(shí)間單位后再執(zhí)行“a=b;”的操作。因此,a的值是時(shí)間單位5時(shí)b的值。a = #5 b; b的值被計(jì)算并存儲(chǔ)在內(nèi)部臨時(shí)寄存器中,在五個(gè)時(shí)間單位后,將此存儲(chǔ)的值賦值給a。a的值為b在時(shí)間單位為0時(shí)的值。?4、c = foo ? a : b;和if (foo) c = a;else c = b;的區(qū)別是??當(dāng)foo = 1'bx, a = 'b1, and b = 'b0時(shí),c = foo ? a : b;會(huì)得到“x”if (foo) c = a;else c = b;會(huì)得到“0”