检测未复位的寄存器


8

在编写Verilog时,我使用各种“错误提示”,它们会给出错误和警告。这些是我的模拟器(ModelSim),编译器(Quartus II)以及一个linter(Verilator)。总之,我可以很好地解决常见的陷阱,例如总线大小不匹配和推断的闩锁。

不幸的是,这三个工具均未检测到未复位的寄存器。要了解我的意思,请考虑以下内容。

reg a;
reg b;

always @(posedge clk_i or posedge rst_i) begin
  if(rst_i) begin
    a <= 1'b0; // Reset a
    // Ooops, forgot to reset b
  end else begin
    // Do stuff with a and b
  end
end

如何让我的工具自动检测未重置的寄存器?


2
“未复位的寄存器”不一定是一件坏事(至少在硅设计中如此),这可能就是为什么它们不是皮棉工具中的警告的原因。通常,您只想重置需要重置的寄存器,因为将重置添加到触发器会增加它们的面积和重置网络上的负载。如果您具有256位数据总线和一位“有效”信号,则在重置有效数据时无需重置数据。
蒂姆(Tim)

简洁性(综合工具)会发出警告。令人讨厌,因为它们通常是故意的...但是可能会帮助您解决问题(假设Synplicity确实使用Verilog,我从未尝试过)
Brian Drummond 2013年

该问题指出,正在使用各种短绒,ModelSim,Quartus II和Verilator。这些工具的整理功能有限,并且检查的问题类型非常狭窄。
travisbartley

Answers:


3

您提到的工具都不是真正的棉绒工具。这些工具不应为您提供良好的绒毛覆盖范围。

我看到了两种商用起毛工具,并且都具有检测未重置翻牌的规则。

我看到三个选择:

  1. 如果大卫·凯斯纳(David Kessner)的答案对您有用-那就去吧。
  2. 获取一个不错的棉绒工具即可完成这项工作。
  3. 编写一个脚本来检测未重置的触发器。

现在,#2可能不是那么简单。我不知道那里是否有好的免费的棉短绒,而专业的棉短绒价格昂贵,并且会花费很多时间进行设置。

#3是我会使用的方法。如果您知道任何脚本语言(Perl,Python等),最多将需要一天的时间来编写一个脚本,以搜索未重置的翻牌。如果您不知道任何脚本语言,可以在StackOverflow上寻求帮助-几天后您就可以完成。这还将在您的个人工具箱中添加另一个工具,这在前端设计师中非常有价值-编写文本处理脚本。

祝好运!


4

当我在VHDL设计上运行Modelsim时,它会在Time = 0ps时向我发出有关“ X”或“ U”类型输入信号逻辑的警告。我忘记了确切的警告信息。通过这些警告可以告诉我我尚未初始化的内容。


1

我依靠功能测试而不是棉绒工具,因此我倾向于切换重置和重播测试台的各个部分。如果重置后设备正常工作,则说明您已经充分重置了状态空间,或者您的测试台不好!


0

有时,设计工具会输出一系列报告,为您提供各种有趣的信息。例如,Xilinx可以称其为Map Report,它告诉您哪些逻辑组件已映射到哪些物理组件。

在上面的示例中,reg a将映射到FDCE(触发器D,具有异步清除和时钟使能),而reg b将映射到FDE(触发器D和时钟使能)。这将告诉您reg b没有重置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.