首页 > 解决方案 > 以下verilog代码的输出将是什么..?

问题描述

module abc(input clk, output a);
reg a;
always @(posedge clk)
begin
a=0;
$monitor("%d",a);
end

always @(posedge clk)
begin
a=1;
$monitor("%d",a);
end

第一个 clk 脉冲后的第一个输出是什么?如果我们不想要 reg 的任何默认值(我们想要 a 的值)...?

标签: verilog

解决方案


这是一个竞争条件。Verilog 不保证同步到同一事件的进程之间的执行顺序。一个模拟工具可能会选择第一个块。另一个工具可能会选择第二个块。综合工具不允许从不同的块对同一个变量进行多次赋值。


推荐阅读