首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Yosys将顺序语句合成为常数

为什么Yosys将顺序语句合成为常数
EN

Stack Overflow用户
提问于 2021-07-28 22:00:38
回答 2查看 155关注 0票数 2

以下是Verilog的声明:

代码语言:javascript
复制
module test (A,B, CLK);
input  A, CLK;
output B;

    always@(posedge CLK) 
        if(A) B <= 1'b1;

endmodule

我在等一个登记簿。然而,在我与Yosys合成它之后,我得到了如下结果:

代码语言:javascript
复制
assign B = 1'b1;

我不明白为什么Yosys将上述Verilog语句转换为常数1。

请指教,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-29 15:46:36

您的B有两个可能的值:

初始化期间的

  • 1'b x (更多见IEEESTD13644.2.2变量声明),
  • 1'b 1A等于1'b 1.

你真的只有一个价值。这意味着您可以优化它到硬连线1'b 1

这不是尤西的错。所有(或几乎所有)综合软件的行为都是一样的。如果您想让它工作(如果我猜您想要什么),您必须允许B接受两个不同的值。您可以通过等于1'b 0的初始值或将其重置为值1'b 0来完成此操作。

我建议使用重置代替初始值,因为初始值可以实现为A连接到寄存器的设置引脚。

票数 1
EN

Stack Overflow用户

发布于 2021-07-29 12:39:32

有意思的!我注意到,如果将初始值为零分配给寄存器(例如output reg B = 1'b0),则会得到触发器。(我用的是read_verilog <your_code.v> ; synth ; show。)

但是,初始值1仍然会产生您提到的常量输出。所以,这里发生的事情(我只是推测)是,当一个初值没有给定时,你可以自由选择它自己的,在这种情况下,它选择1'b1,这样整个电路就相当于一个简单的硬连线常数?只有当初始值为零时,才需要触发器?

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

https://stackoverflow.com/questions/68567807

复制
相关文章

相似问题

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