- initreg功能的目的
初始化操作只是针对Verilog代码,这个功能的目的在于减少门级仿真时初始化的时间,避免门级仿真时X的传播,导致逻辑行为异常。 - 常用选项
Compile time: +vcs+initreg+random
+vcs+initreg+config+initfile
Runtime: +vcs+initreg+0/1/random/seed
+vcs+initreg+config+initfile - +vcs+initreg+random模式
| Compile time【ELAB】 | Runtime【RUN】 | 备注 |
|---|---|---|
| +vcs+initreg+random | +vcs+initreg+0 | 所有变量、寄存器、存储器等初始化为0 |
| +vcs+initreg+1 | 所有变量、寄存器、存储器等初始化为1 | |
| +vcs+initreg+random | 所有变量、寄存器、存储器等初始化为随机值 | |
| +vcs+initreg+seed | Seed为种子数值,但不能为0,1 |
注意避免下列冲突:
1、 避免当变量定义时初始化值与该选项时配置的初始值不同;
2、 避免当变量在仿真0时刻初始化值与该选项时配置的初始值不同;
3、 避免对状态机状态变量初始化为x值;
4、 避免设计中出现因为随机值导致状态不匹配;
- +vcs+initreg+config+initfile
| Compile time【ELAB】 | Runtime【RUN】 | 备注 |
|---|---|---|
| +vcs+initreg+config+initfile | +vcs+initreg+config+initfile | 在runtime使用config模式,则要求Compile time时也使用config模式,不能使用random模式 |
Initfile支持的几种语法
| Syntax | 功能 | 举例【以手册Figure C-2】为例 |
|---|---|---|
| defaultvalue x|z|0|1|random | all design default value | |
| instance instance_hierachical_name [x|z|0|1|random] | 设置某一个instance单元采用初始值 | instance top.d1 0 |
| tree instance_hierarchical_name depth [x|z|0|1|random] | 设置某一个instance单元及其所例化的子单元采用初始值 | tree top 0 0 \n tree top.d1 0 x |
| module module_name | 设置某一个module采用初始值,当该module被例化多个时,所有的例化单元都被设置初始值 | module gizmo 1 |
| modtree module_name depth [x|z|0|1|random] | modtree dev 0 random |
注:depth : 0 全部子单元均配置初始值;1 只是当前instance配置初始值;2及>2数字 当前instance下多少级被配置初始值
注:compile阶段的initfile可以与runtime不一致,以runtime的intfile为准
另外需要打印设计中初始化的值,则需要使能VCS_PRINT_INITREG_INITIALIZATION值,方法为在makefile中,export VCS_PRINT_INITREG_INITIALIZATION = 1,会在仿真目录下产生vcs_initreg_random_value.txt。
- 其他参数
+nomem//不初始化memory及多维数组
+noreg//不初始化不包含多维数组的变量
+vcs+initreg+random+nomem
+vcs+initreg+random+noreg
Verilog初始化优化:initreg功能详解
3629

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



