SystemVerilog打印玄学指南:为什么你的$display总输不出变量值?
刚接触SystemVerilog的朋友们,一定遇到过这样的困惑:明明代码逻辑看起来没问题,但$display就是不肯乖乖输出你想要的变量值。这种"打印玄学"背后,其实藏着不少门道。今天我们就来彻底拆解这个看似简单却暗藏玄机的打印问题。
1. 为什么我的变量值打印不出来?
新手最常遇到的打印问题,莫过于变量值"神秘消失"。比如下面这段代码:
module test;
logic [7:0] data = 8'hA5;
initial begin
$display("当前数据值:data"); // 输出结果让人大跌眼镜
end
endmodule
运行后会输出:
当前数据值:data
问题出在哪? 很多初学者误以为直接把变量名放在字符串里就能自动替换成变量值,这其实是常见的理解误区。SystemVerilog中的字符串字面量不会自动解析变量引用,"data"就是字面意义上的字符串"data",不会关联到同名的变量。
1.1 正确的变量打印方式
要让变量值正确显示,必须使用格式化占位符:
$display("当前数据值:%h", data); // 正确输出:当前数据值:a5
这里%h是十六进制格式符,类似的常用格式符还有:
%d:十进制%b:二进制%o:八进制%s:字符串
小技巧:使用

3942

被折叠的 条评论
为什么被折叠?



