首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这段代码在合成时会产生多少个翻转?

这段代码在合成时会产生多少个翻转?
EN

Stack Overflow用户
提问于 2019-01-12 00:54:05
回答 1查看 213关注 0票数 2

我在试着理解这个代码在合成时会产生多少翻转?

我有两个非阻塞和阻塞赋值代码的测试用例。

测试1。

代码语言:javascript
复制
wire aclk; 
wire [1:0] a; 
reg [1:0] c; 
reg [1:0] b;

always @(posedge aclk) 
begin 

 b <= a + 1; 
 c = b; 
end

测试2。

代码语言:javascript
复制
wire aclk; 
wire [1:0] a; 
reg [1:0] c; 
reg [1:0] b;

always @(posedge aclk) 
begin 

 b = a + 1; 
 c <= b; 
end

测试1有4个FF,测试2有2个FF。

我不明白这有什么不同,我只是切换了代码。

谢谢你让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-12 07:49:17

它们在功能上是不同的。非阻塞赋值先计算右侧的值,然后继续执行下一条语句,直到所有其他语句都先求值后,才会存储到左侧。阻塞语句计算右侧并立即将其存储到左侧。

代码语言:javascript
复制
Test1 is doing this:
evaluate (a+1)
store b into c , BEFORE (a+1) is stored into b!!!
store (a+1) into b

Test2 is doing this:
evaluate (a+1)
store (a+1) into b
store b into c

就像前面提到的toolic一样,您通常在顺序逻辑中使用非阻塞语句。大多数人还建议不要在同一个begin-end块中混合使用非阻塞语句和阻塞语句。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54150891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档