后仿真中,我们常常对于没有复位寄存器和存储器单元,使用仿真选项之initreg和deposit,两种处理方式。今天做总结。
再具体使用的时候,要注意什么呢?
一 关于+vcs+initreg+* 选项
请参见之前的博客文章:
#VCS# 关于VCS 编译选项:+vcs+initreg+random的理解(1)掌握要点-CSDN博客
#VCS# 关于VCS 编译选项:+vcs+initreg+random的理解(2)结果检查_fsdb delta-CSDN博客
#VCS# 关于VCS 编译选项:+vcs+initreg+random的理解(3)回头是岸_vcs initreg-CSDN博客
二 关于 deposit 用法
2.1 后仿中的无复位寄存器、存储
在芯片设计后端实现过程中,处于减少功耗、面积的考虑,会存在部分的无复位寄存器和存储单元,而在使用VCS进行后仿真时,无复位的寄存器和存储单元输出会是X态,因此会导致仿真异常,仿真结果不符合预期。
因此在仿真时,需要对无复位的寄存器和存储单元进行初始化。即在0时刻,对无复位寄存器的q端进行赋值,紧接着无复位寄存器的q端在非0时刻就随着电路信号的驱动而变化,使用$deposit赋值不会像force那样一直强行改变信号,仅在初始0时刻赋值一个确定值,接着就被电路驱动接管。
提取方法:spyglass lint 工具会report 无复位寄存器,完成综合后 也可以使用命令提取。
2.2 $deposit初始化无复位寄存器、存储
使用$deposit对无复位寄存器和存储进行初始化,是在0时刻,赋一个初始值。使用格式如下所示,在0时刻,对无复位寄存器的q端进行赋值,一般默认为0,无复位寄存器的q端在非0时刻会随着电路信号的变化而变化,使用$deposit赋值不会导致电路信号的变化,仅仅在初始化阶段赋值一个确定值。
initial
begin
$deposit (lif_u0__lif0_mac_u0__mac_tx_u0__tx_data_in_reg_1_.q,’b0);
$deposit (lif_u0__lif0_mac_u0__mac_tx_u0__tx_data_in_reg_2_.q,’b0);
$deposit (lif_u0__lif0_mac_u0__mac_tx_u0__tx_data_in_reg_3_.q,’b0);
end
总结规律: 请勿将两者进行同时使用。对于到底选取哪种方式,要结合实际的情况决断。但是,两者同时使用,会有冲突,得不到预期结果。