2017-02-23 104 views
0

我试图在路由后模拟期间监视一个内部信号。

所以我在Verilog代码中使用了$display语法。

但是,在控制台中没有任何显示。

我用Verilog代码中的语法如下

always @(negedge clk) 
begin 
$display("Decimal: %d", idatabuf); 
end 

所以我的问题是,是否$display语法布线后仿真不起作用?

无论如何,我正在采取粗暴的方式获取内部信号作为输出。但是,如果语法$display有效,我的生活会更容易。

+0

如果您将此$ $ display添加到您的RTL中,则正如其他人所说的那样,合成将会将其删除。不过,您应该可以将其添加到您的布局后网表中。 –

回答

0

编号$显示不可合成,因此它只适用于行为模拟。 在合成过程中,所有不可合成的代码部分(如&和#)都将被忽略。

0

正如Laleh所说,$display是不可合成的。要做你想做的事情,你应该在你的测试平台中合成后在你的信号上使用分级参考。例如在您的测试平台,您可以添加:

[email protected]* 
    $display("Decimal: %d", u_top.u_mymod.idatabuf);` 

应该在每次改变时间打印idatabuf。如果要监控的信号是内部信号而不是分层模块的引脚,综合工具往往会简化逻辑优化。如果你想监视这样一个信号,你应该绑定驱动黑盒子输入。在Synopsys工具中,制作黑盒的最简单方法是创建一个空模块。

module BlackBox (I,O); 
    parameter SIZE=1; 
    input [SIZE-1:0] I; 
    output[SIZE-1:0] O; 
endmodule