【问题标题】:How to declare a global variable in Verilog?如何在 Verilog 中声明一个全局变量?
【发布时间】:2016-01-19 06:35:36
【问题描述】:

我写信是想问如何在 Verilog 中声明一个全局变量。 parameterdefine 关键字声明的内容本质上是常量,而不是变量。

我需要的是以下内容:

`define Glitch 
module Cell ( Shift_In, Shift_Out_Screwed, Clk ); 
    input  Clk, Shift_In; 
    output  Shift_Out_Screwed; 
    wire  Shift_Out_Screwed; 
    wire  Shift_Out; 

    Inverter INV1 ( Shift_In, Shift_Out, Clk ); 
    assign Shift_Out_Screwed = Glitch ? ~Shift_Out : Shift_Out 
endmodule

这是一个非常简单的故障插入。当Glitch==1时,原输出反转;当Glitch==0 时,原始输出保持不变。我希望在 external 模拟 testbench.v 文件中定义信号 Glitch,尽管它已在此处声明和使用,并且我不想想要添加信号Glitch 到模块cell 的输入端口列表。这是因为我的实际电路是一个非常复杂的电路,如果我在某个单元格上添加一个输入端口,将会有很多其他单元格受到影响。

有谁知道如何在 Verilog 中声明一个全局变量?

【问题讨论】:

  • 请说明是否要合成。
  • 不,它不必是可合成的......
  • 您可能希望通过$value$plusargs 传递Glitch 的值。大多数模拟器都支持这个内置功能。 Here's an example
  • 非常感谢 e19293001!我会试试。只是我的好奇心:如果我需要它可以合成怎么办?...
  • 如果Glitch 需要被testbench 覆盖,那么parameter 是综合性的合适选择。否则,传递命令行变量也是一种替代方法。也可以在全局空间中简单地声明reg Glitch='b0

标签: variables verilog global


【解决方案1】:

您正在努力解决的问题听起来像是错误注入。您希望能够在测试台内的输出端口上注入位错误。你可以这样做:

module Cell ( Shift_In, Shift_Out_Screwed, Clk ); 
    input  Clk, Shift_In; 
    output  Shift_Out_Screwed; 
    wire  Shift_Out_Screwed; 
    wire  Shift_Out; 

    Inverter INV1 ( Shift_In, Shift_Out, Clk ); 

    `ifdef SIMULATION
    // This logic is used in simulation, but not synthesis.  Use care.
    logic Glitch = 1'b0;
    assign Shift_Out_Screwed = Glitch ? ~Shift_Out : Shift_Out 
    `else
    // This logic is used in synthesis, but not simulation.  Use care.
    assign Shift_out_Screwed = Shift_out;
    `endif
endmodule

请注意,我使用“SIMULATION”预处理器开关来隐藏合成中的“Glitch”错误注入。请谨慎使用此技术,以避免造成模拟/综合不匹配。

在您的测试平台中,您可以通过引用设计层次结构中的“Glitch”信号在单元的特定实例中引发故障,如下所示:

initial begin
   ...
   @(posedge Clk); #1;
   $top.u_foo.u_bar.u_cell.Glitch = 1'b1;
   @(posedge Clk); #1;
   $top.u_foo.u_bar.u_cell.Glitch = 1'b1;
   ...
end

上面的代码sn-p会注入一个周期的“Glitch”。

作为替代方案:一种更传统的注入错误的方法是使用测试台中的“force”语句来覆盖被测设备中的驱动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2011-03-22
    • 2011-02-12
    • 2012-11-11
    • 2019-09-11
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多