首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >总是块而不是分配,在FPGA中进行模拟。

总是块而不是分配,在FPGA中进行模拟。
EN

Stack Overflow用户
提问于 2016-02-09 18:52:22
回答 1查看 294关注 0票数 0

我试图在Verilog中编码和合成。有时,我仍然对使用Verilog作为典型的C类编程语言感到困惑,我试图理解两个不同的代码之间是否会有差异:

代码语言:javascript
复制
always @ (a1,a0,b1,b0)
begin
case ({a1,a0,b1,b0})
                 4'b0000 : s= 7'b1110111 ;
                 4'b0001 : s= 7'b1110111  ;
                  ....
                  ....
                 4'b1110 : s= 7'b0101111  ; 
                 4'b1111 : s= 7'b1111010 ;
                 endcase


    end      

使用上面的代码逻辑进行赋值,而不是始终阻塞。

上面的代码会产生锁存器吗?在这种情况下,它会产生一个锁存器吗?使用这两种代码会有什么延迟吗?

PS我们正在尝试创建一个2位二进制乘法器,它输出到一个7段显示。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 19:15:12

当一个或多个通过条件语句的路径未被分配时,就会产生锁存。例如:

代码语言:javascript
复制
reg [1:0] a;
reg b;
always@(*)
case (a)
    0: b=0;
    1: b=0;
    2: b=1;
endcase

将生成一个锁存器,因为我没有涵盖a=3的情况。您可以通过显式地覆盖每一种情况(就像您所做的那样)或使用default案例来避免这种情况。

对于赋值语句,这取决于您如何设置它们的格式,但是您不太可能意外地推断锁锁。例如,如果您使用三元操作(即assign b = a? 1:0;),则将推断出if的两部分。

至于延迟,大小写和赋值应该创建相同的netlist,所以它们应该产生相似或相同的结果,只要它们在逻辑上是相同的。

(顺便指出,使用always@(*)__而不是always @ (a1,a0,b1,b0)__是一个很好的实践;合成工具可以计算出正确的灵敏度列表。)

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

https://stackoverflow.com/questions/35299935

复制
相关文章

相似问题

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