如何在Verilog中声明全局变量?

问题描述 投票:1回答:1

我正在写信询问如何在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,尽管它已在此处声明和使用,并且我do n't想将信号Glitch添加到输入中模块cell的端口列表。这是因为我的真实电路是一个非常复杂的电路,如果我将输入端口添加到某个单元,则会影响许多其他单元。

有人知道如何在Verilog中声明全局变量吗?
variables verilog global
1个回答
0
投票
您正在努力解决的问题,例如错误注入。您希望能够从测试平台内在输出端口上注入位错误。您可以这样:

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”错误注入。请谨慎使用此技术,以免造成仿真/合成不匹配。

在测试台中,您可以通过参考设计层次结构中的“毛刺”信号在特定单元实例中引起毛刺,如下所示:

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

上面的代码片段将注入一个周期的“小故障”。

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

© www.soinside.com 2019 - 2024. All rights reserved.