Verilog?面試問題
時(shí)間:2021-11-15 15:02:44
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]1、Verilogtask和Verilogfunction有什么區(qū)別?1.function應(yīng)在一個(gè)仿真時(shí)間單元內(nèi)執(zhí)行,task可以包含時(shí)序控制語句。2.function無法啟用task,task可以啟用其他task或function。3.function應(yīng)返回一個(gè)單個(gè)值,task...
1、Verilog task 和Verilog function有什么區(qū)別?1.function應(yīng)在一個(gè)仿真時(shí)間單元內(nèi)執(zhí)行,task可以包含時(shí)序控制語句。2.function無法啟用task,task可以啟用其他task或function。3.function應(yīng)返回一個(gè)單個(gè)值,task沒有返回值。?2、給定以下Verilog 代碼,“a”會(huì)打印什么值?
always @(posedge clk) begin
a = 0;
a <= 1;
$display(a);
end
這是一個(gè)很tricky 的問題!Verilog調(diào)度語義意味著當(dāng)前仿真時(shí)間存在一個(gè)4級的仿真隊(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ì)列”中。“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。如果我們在下一個(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ì)算并存儲在內(nèi)部臨時(shí)寄存器中,在五個(gè)時(shí)間單位后,將此存儲的值賦值給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”