當(dāng)前位置:首頁 > 公眾號精選 > 芯片驗(yàn)證工程師
[導(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可以啟用其他taskfunction。

3.function應(yīng)返回一個(gè)單個(gè)值,task沒有返回值。

?

2、給定以下Verilog 代碼,“a”會(huì)打印什么值?

always @(posedge clk) begina = 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”


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉