首页 > 试题广场 >

以下Verilog代码描述了两个同步于clk的always块

[单选题]
以下Verilog代码描述了两个同步于clk的always块,初始时a=0、b=0。当clk上升沿到来时,关于a和b的变化规律,下列说法正确的是?
always @(posedge clk) begin
  a <= ~a; // 非阻塞赋值
end
always @(posedge clk) begin
  b = a;   // 阻塞赋值
end
  • a和b同时更新,最终b等于a的新值
  • 第二个always块先执行,b取a的旧值后第一个块才更新a
  • 两个块并行执行,b取a的旧值,a独立更新为新值
  • 综合后b等于a的新值,仿真时等于旧值
同一个时钟下,always是并行的,所以这两个always同时执行。第1个clk上升沿,两个always块同时触发,均读取初始旧值:a=0、b=0。 第一个块:a <= ~0 → a的新值暂存为1(未立即更新)。 第二个块:b = 0(读取的是a的旧值)→ b立即更新为0。 ​本时钟沿结束,非阻塞赋值生效:a正式更新为1。 ​结果:a=1,b=0。
发表于 今天 13:35:53 回复(0)