我有一个verilog测试平台来执行一个模块的门级仿真。我想在模块内部的特定门的输出处注入一个瞬态电压,但无法找到方法。我可以在输入端插入瞬态电压(如小故障),但我需要在内部信号上注入。有人能解释一下这个问题吗?
例如:时钟信号的故障(source)
always begin: inject_clk_glitch
#1 force clk = 1;
#1 force clk = 0;
#1 release clk;
end发布于 2019-10-22 21:15:10
force DUT.internal_path.internal_signal = 1;
发布于 2021-05-19 05:16:55
如果您正在使用像Synopsys这样的其他供应商,并且希望从systemverilog强制使用VHDL,那么您需要使用$hdl_xmr_force供应商函数。如果是布尔类型,则必须手动转换为TRUE/FALSE。奎斯塔没有这个限制我想。
您可以在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
https://stackoverflow.com/questions/58510414
复制相似问题