请问如下verilog赋值语句的先后关系

来源:百度知道 编辑:UC知道 时间:2024/06/19 20:52:34
always @(posedge clk or negedge rst_n)
if (!rst_n)
low_sw <= 1'b1
else if (cnt == 20'hfffff)
low_sw <= sw1

reg low_sw_r;
always @ ( posedge clk or negedge rst_n )
if (!rst_n)
low_sw_r <= 1'b1;
else
low_sw_r <= low_sw;

请问 low_sw跟low_sw_r之间的赋值的先后关系。
在同一个clk到来之后,这两个赋值语句哪个先执行?
我觉得应该是同时执行,但是执行的时候 low_sw的值就会变成sw的值,
这一个clk结束后,low_sw_r的值到底是前一个low_sw的值 还是这一个low_sw的值?

前一个low_sw的值

你想想具体综合出来的电路就知道了,always都是并行的对吧,都是在时钟的驱动下,当CLK来到,DFF把D端的值得送到Q端。
当一个时钟到来,在第一个always里面,假设sw1是a,low_sw是b,则在这个clk上沿的时候,a被赋值给low_sw,此时,赋值给low_sw_r的值还是low_sw之前的值,也就是b。
在第二个时钟的时候,low_sw已经变成a,此时采样后,low_sw_r会变成a。
其实就是采样的问题,第一个上升沿,low_sw_r 采样不到low_sw变化后的值。
有不明白的在联系~~~~