verilog语句中的always语句执行顺序问题

如果always语句块中的某个if语句中begin-end之间有两个或者两个以上的语句,那这些语句是顺序执行还是并行执行呢???例如:always@(posedgeclk... 如果always语句块中的某个if语句中begin-end之间有两个或者两个以上的语句,那这些语句是顺序执行还是并行执行呢???
例如:
always @(posedge clk or negedge rst_n)
begin
if(clk_bps)
begin
num <= num + 1'b1;
case(num)
4'd1: rx_temp_data[0] <= rs232_rx;
4'd2: rx_temp_data[1] <= rs232_rx;
....
default;
endcase
end
........
end
中的
begin
num <= num + 1'b1;
case(num)
4'd1: rx_temp_data[0] <= rs232_rx;
4'd2: rx_temp_data[1] <= rs232_rx;
....
default;
endcase
end
是并行执行还是顺序执行??case中的判定条件num取值是去加1b'1前的值还是之后的值呢?
展开
 我来答
Hua丽de转身
推荐于2017-11-25 · 超过13用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:35万
展开全部
举个例子当num==2,clk上升沿来了num要变成新值3,但是这个3要等到下一个clk上升沿到来才能赋给num,当前clk上升沿num值仍然保持为2,所以case中的判定条件num取值是加1前的!
追问
有个问题需要探讨下:

我觉得是这样的:以你的例子为例,当num==2,clk上升沿来了num值加1变成新值3,但由于使用了非阻塞赋值语句,所以num加1语句和case块语句成为并行执行,故case(num)中的num的值还是加1前的值2;而这个clk上升沿结束后num值已经加1变成3了,即下一个clk上升沿到来之前寄存器num锁存值3,因为当下一个clk上升沿到来时,电路立刻对num值进行操作了。您看看是不是有问题~
willcc
2012-08-14 · TA获得超过474个赞
知道小有建树答主
回答量:139
采纳率:100%
帮助的人:140万
展开全部
判断加1前的值,FF保留了之前一个始终沿采样到的结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Peggyfen
2012-08-14 · 超过26用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:48.2万
展开全部
先执行num <= num + 1'b1; 之后执行case里符合条件的那句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式