- 主题:verilog激励中,这两种赋值怎么不同?
代码是这样:
always @(posedge clk or negedge rst_n)
if (!rst_n)
data_out <= 32'd0;
else
data_out <= data_in;
激励1:
initial begin
...
#20
@(posedge clk)
data_in = 32'h12345678;
...
end
激励2:
always @(posedge clk or negedge rst_n)
if(!rst_n) data_in <= 32'd0;
else data_in <= data_in + 32'h12345678;
激励1是data_in和data_out是同步的,激励2中data_out要慢data_in一拍。
激励1为什么是这样?竟然同步!
--
FROM 220.166.46.*
阻塞赋值 非阻塞赋值 的区别
【 在 Schrooman 的大作中提到: 】
: 代码是这样:
: always @(posedge clk or negedge rst_n)
: if (!rst_n)
: ...................
--
FROM 180.167.199.*
没看懂呢,
data_in和data_out在代码里面用的都是<=,只是激励里面给data_in赋值的方式不一样。
激励里给data_in用了阻塞和非阻塞,怎么会影响到data_out了?
【 在 WebGL 的大作中提到: 】
: 阻塞赋值 非阻塞赋值 的区别
--
FROM 220.166.46.*
<= 后面可以加#时间,其他不可以
这样就能比较容易的分辨状态了
这种写法,换个tool,可能解析结果都有区别
【 在 Schrooman 的大作中提到: 】
: 没看懂呢,
: data_in和data_out在代码里面用的都是<=,只是激励里面给data_in赋值的方式不一样。
: 激励里给data_in用了阻塞和非阻塞,怎么会影响到data_out了?
: ....................
--
FROM 111.201.155.*
建议看一下verilog的schedule region就明白了
【 在 Schrooman (林如风) 的大作中提到: 】
: 没看懂呢,
: data_in和data_out在代码里面用的都是<=,只是激励里面给data_in赋值的方式不一样。
: 激励里给data_in用了阻塞和非阻塞,怎么会影响到data_out了?
: 【 在 WebGL 的大作中提到: 】
--
FROM 222.209.8.*
激励1用的是非阻塞赋值,改成阻塞赋值就可以跟激励2一样的效果了
【 在 Schrooman 的大作中提到: 】
: 代码是这样:
: always @(posedge clk or negedge rst_n)
: if (!rst_n)
: ...................
--
FROM 221.217.88.*
always block 执行顺序
nondeterminism
【 在 Schrooman 的大作中提到: 】
: 代码是这样:
: always @(posedge clk or negedge rst_n)
: if (!rst_n)
: ...................
--
FROM 118.126.54.*
Verilog是硬件描述语言 写代码的时候脑子里要有硬件才行
激励一是一个flip flop. Delta cycle后更新dataout;
激励二是两个flipflop,自然差一拍更新。
【 在 Schrooman 的大作中提到: 】
: 代码是这样:
: always @(posedge clk or negedge rst_n)
: if (!rst_n)
: ....................
- 来自「最水木 for iPhone 11」
--
FROM 180.169.186.*