有关verilog阻塞与非阻塞语句的一个案例

2019-03-25 10:00发布

 ////////////////////////////////代码1///////////////////////////////////////  module pipeMult(product, mPlier, mCand, go, clock);   input          go, clock;   input [7:0]      mPlier, mCand;   output [15:0]      product;   reg [15:0] product;   always @(posedge go)     product = repeat (4) @(posedge clock) mPlier * mCand;   endmodule  ////////////////////////////////代码2///////////////////////////////////////   module pipeMult(product, mPlier, mCand, go, clock);   input          go, clock;   input [7:0]      mPlier, mCand;   output [15:0]      product;   reg [15:0] product;   always @(posedge go)     product <= repeat (4) @(posedge clock) mPlier * mCand;   endmodule 一个用的阻塞语句,一个用的非阻塞语句。代码1和代码2产生的结果是否有什么区别? 新手求指点…… 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
eeleader
1楼-- · 2019-03-25 15:43
< /

非阻塞赋值只能用assign 声明,而且不能再ALWAYS 里面。

阻塞赋值,不是立即执行,需要ALWAYS 所有语句同时赋值;

非阻塞赋值,立即执行,相当线的作用

xianyunyehe216
2楼-- · 2019-03-25 18:23

是阻塞赋值只能用assign 声明,相当线的作用吧?

代码1和代码2本身应该没有问题,就是不知输出结果有区别么?

小an
3楼-- · 2019-03-25 18:47
阻塞和非阻塞赋值语句都属于过程赋值语句,assign是连续赋值语句。虽然assign中的赋值也用“=”,但他与阻塞赋值是不同的概念。建议lz看下夏宇闻老师的《verilog HDL数字设计与综合》,语法讲得很清楚

[ 本帖最后由 小an 于 2011-10-19 12:02 编辑 ]
eeleader
4楼-- · 2019-03-25 21:08

楼上说的对啊!

理解很深啊!

一周热门 更多>