为什么Modelsim会抱怨组件实例化i1?
时间:0 ps迭代次数:1实例:/ vhdl2_uppgift_1_extra_vhd_tst / i1
**警告:NUMERIC_STD.TO_INTEGER:检测到元数据,返回0
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 0 :(得分:1)
警告并不总是一个问题,例如在这种情况下。代码可能会模拟和合成等等。
在这种情况下,引发警告是因为numeric_std.to_integer()
正在获得所谓的元值,这意味着它是一个无法转换为整数的输入。例如'X'
或'U'
。
如果您不想要错误消息,可以执行评论中描述的user1155120:
...在modelsim.ini取消注释或设置
NumericStdNoWarnings = 1
他还描述了IEEE1076标准允许修改numeric_std包,如IEEE1076-2008中所述:
16.8.5.2允许的修改 符合本标准的工具供应商不得修改包装声明。 [...] NUMERIC_BIT和NUMERIC_STD包的包体声明了一个名为NO_WARNING的常量,其值为FALSE。用户可以将NO_WARNING设置为TRUE并重新分析包体以禁止通过调用这些包中的函数生成警告消息。[...]
另一种选择是使用x
和y
的中间变量,并使用函数Is_X()
来检测和阻止元值。但是,我不确定它是否会合成。例如:
x_nometa <= (others=>'0') when Is_X(x) else x;
我在你的代码中注意到的另一件事是你使用BUFFER
- 类型的端口。你最好不要使用它们。例如FPGA供应商不能正确支持它们。例如。 Xilinx。有很多方法可以解决这个问题:How to stop using "buffer" ports in VHDL
答案 1 :(得分:0)
您可以通过为所有信号分配默认值来消除大部分信号
SIGNAL x : STD_LOGIC_VECTOR(9 DOWNTO 0) := (others => '0');
在某些情况下,模拟分辨率可以从层次结构中较低的块开始,这些仍然可能是一个问题,例如,使用FPGA供应商的仿真模型,可以看到信号在时间0处未解决的值。因为不建议完全关闭警告,您可以在模拟文件中找到:
设置NumericStdNoWarnings 1
运行0 ps
设置NumericStdNoWarnings 0