【问题标题】:Force internal signal of a module - Verilog强制模块的内部信号 - Verilog
【发布时间】:2019-10-22 18:34:42
【问题描述】:

我有一个 verilog 测试平台,用于执行模块的门级仿真。我想在模块内特定门的输出端注入瞬态电压,但找不到方法。我可以在输入端(下例)插入瞬态电压(如毛刺),但我需要注入内部信号。谁能解释一下这个问题?

示例:时钟信号中的故障 (source)

always begin: inject_clk_glitch
    #1 force clk = 1;
    #1 force clk = 0;
    #1 release clk;
end

【问题讨论】:

    标签: verilog


    【解决方案1】:

    force DUT.internal_path.internal_signal = 1;

    【讨论】:

      【解决方案2】:

      如果您使用的是 Synopsys 等其他供应商,并且您想强制从 systemverilog 到 VHDL,那么您想使用 $hdl_xmr_force 供应商功能。 如果是布尔类型,则必须手动转换为 TRUE/FALSE。我认为 Questa 没有这种限制。

      您可以在 systemverilog 界面或模块中添加任务,并使用层次结构来强制/释放信号。

      task force_deposit_output_sr_update( bit value=0);
      `ifdef VCS
          if (value==0) begin
          $hdl_xmr_force("DUT.U01.U06.U02.U_USE_U03.U03.U01.UPDATE_SR_OUTPUT", "FALSE", "0 ps", "deposit",  , 0);
          end else begin
          $hdl_xmr_force("DUT.U01.U06.U02.U_USE_U03.U03.U01.UPDATE_SR_OUTPUT", "TRUE", "0 ps", "deposit",  , 0);
          end
      `else
         //QUESTA
          force DUT.U01.U06.U02.U_USE_U03.U03.U01.UPDATE_SR_OUTPUT = value;//direct force DUT intern signal
       `endif
      endtask
      
      task force_deposit_output_change(logic[31:0]  value='hABCDABCD);
      `ifdef VCS
          $hdl_xmr_force("dut.U01.U06.U02.U_USE_U03.U03.SYNC_OUTPUT", "value", "0 ps", "deposit",  , 0);
      `endif
      endtask

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 1970-01-01
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        相关资源
        最近更新 更多