Verilog 面试问题
时间:2021-11-15 15:02:44
手机看文章
扫描二维码
随时随地手机看文章
[导读]1、Verilogtask和Verilogfunction有什么区别?1.function应在一个仿真时间单元内执行,task可以包含时序控制语句。2.function无法启用task,task可以启用其他task或function。3.function应返回一个单个值,task...
1、Verilog task 和Verilog function有什么区别?1.function应在一个仿真时间单元内执行,task可以包含时序控制语句。2.function无法启用task,task可以启用其他task或function。3.function应返回一个单个值,task没有返回值。 2、给定以下Verilog 代码,“a”会打印什么值?
always @(posedge clk) begin
a = 0;
a <= 1;
$display(a);
end
这是一个很tricky 的问题!Verilog调度语义意味着当前仿真时间存在一个4级的仿真队列: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”是一个 active event,因此它被安排到第一个“队列”中。“a<=1”中的RHS是一个non-blocking event,因此它被放入第三个队列中。最后,将display 语句放入第4个队列中。只有monitor event队列中的事件完成了才进入到后面的仿真时间。因此,“a=0”会发生,然后显示一个=0。如果我们在下一个仿真时间中查看a的值,它将显示1。 3、以下两行Verilog代码有什么区别?#5 a = b;
a = #5 b;
#5 a=b;等待5个时间单位后再执行“a=b;”的操作。因此,a的值是时间单位5时b的值。a = #5 b; b的值被计算并存储在内部临时寄存器中,在五个时间单位后,将此存储的值赋值给a。a的值为b在时间单位为0时的值。 4、c = foo ? a : b;
和if (foo) c = a;
else c = b;
的区别是? 当foo = 1'bx, a = 'b1, and b = 'b0时,c = foo ? a : b;
会得到“x”if (foo) c = a;
else c = b;
会得到“0”