首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Verilog/ states中的环振子Verilog-抑制未定义状态

Verilog/ states中的环振子Verilog-抑制未定义状态
EN

Stack Overflow用户
提问于 2022-09-03 15:02:42
回答 1查看 60关注 0票数 0

在Verilog中写环形振荡器是非常简单的。我们也知道,在现实中,无论初始状态如何,它都将可靠地工作在实际硬件中,无论是FPGA还是ASIC (如果没有优化)。

但是,没有复位电路的Verilog模型(在实际实现中不需要)将无法工作,因为它将受到未定义状态的困扰。

是否有可能抑制未定义的状态并使其在Verilog中可靠工作,而不进行更复杂的物理实现(即不添加重置)?我正在模拟Icarus,而硅的实现是开放的。

在这里,我尝试使用SystemVerilog位类型并预设初始值--但这一切都不起作用。我在模拟中仍然有旋转的X态。Shifter[]有1s-确保它没有被优化掉。

代码语言:javascript
复制
wire bit c1_1 = 0;
wire bit c1_2 = 0;
wire bit c1_3 = 0;
assign #10 c1_1 = c1_3 ^ shifter[0];
assign #11 c1_2 = c1_1 ^ shifter[1];
assign #12 c1_3 = c1_2 ^ shifter[2];
EN

回答 1

Stack Overflow用户

发布于 2022-09-04 02:45:56

在verilog中,类似于wire bit c1_1 = 0;的语句等价于

代码语言:javascript
复制
wire bit c1_1;
assign c1_1 = 0;

因此,本质上,您使用两个驱动程序驱动c1_1,如果值不同,则会将'x‘值赋值给它。

另外,由于使用延迟,您创建的驱动程序肯定无法综合。你应该用钟代替。但是..。对于不可综合的代码,您可以轻松切换到寄存器并使用初始块,如下所示:

代码语言:javascript
复制
  reg r1, r2, r3;
  wire c1_1, c1_2, c1_3;
  
  initial begin
    r3 = 0; // initialize r3, assuming that shifter becomes non-x until first #10
    forever begin
      #10 r1 = r3 ^ shifter[0];
      #11 r2 = r1 ^ shifter[1];
      #12 r3 = r2 ^ shifter[2];
    end
  end
  
  assign c1_1 = r1, c1_2 = r2, c1_3 = r3;

假设移位器不是“x”,在时间10,它应该生成非“x”值。

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

https://stackoverflow.com/questions/73593235

复制
相关文章

相似问题

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