vhdl - 如何修改modelsim完成的初始化?
问题描述
我的问题与modelsim所做的初始化有关。我想使用特定范围内的整数(例如范围 0 到 511)。这是VHDL中的声明:
signal cnt : natural range 0 to 511;
如果我不初始化这个信号(例如在复位中),modelsim 将默认分配最左边的值。对于我的信号,它将是 0。
我的问题是我想强制modelsim将其在模拟中的值初始化为“U”或“X”而不是最左边的值,这可能吗?
解决方案
可以在声明时给信号一个初始化值:
signal foo: foo_type := foo_type_value;
请注意:=
赋值运算符,它对于信号来说可能看起来有点违反直觉。
但是不,不可能分配'U'
或分配'X'
给信号的类型,natural
因为它们不是natural
值。相反,您可以做的是确定值 512 相当于U
您的信号并在声明时分配它:
signal cnt : natural range 0 to 512 := 512;
由于初始化后不应使用此额外值,因此您可以(应该)添加并发断言来检测不需要的情况:
assert cnt /= 512 report "Ooops! cnt=512" severity warning;
另一种选择是使用ieee.numeric_std.unsigned
而不是natural
:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
...
signal cnt : unsigned(8 downto 0) := (others => 'U');
但在使用它之前,请确保您了解这些差异。例如,如果您尝试cnt
在其值为 0 时减少 natural ,您将收到错误,而unsigned
版本cnt
将默默地换行到"111111111"
.
推荐阅读
- scala - 如何在 Scala 中使用 Heroku DATABASE_URL 环境变量?
- c# - 是否可以将 HttpServer 和 WPF 作为单个应用程序运行?
- java - 找不到类?com.google.cloud.sql.mysql.SocketFactory 尝试连接云 sql
- java - 更改 ArrayList 中元素顺序的最快方法是什么?
- python-3.x - AWS Lambda:在运行时获取当前重试次数
- git - 带有预提交钩子的 Git 提交,为什么会得到不同的结果?
- python - 来自导入模块的 Flask 渲染模板
- r - 如何用ggplot在第二个y轴上写一个单词列表?
- reactjs - 如何根据渲染的内容组件使我的ant design Header name动态化
- c# - 需要 BLToolKIT 到实体框架的帮助