仿真器原理
多数仿真器(vcs等)都使用的是事件驱动。esl是使用周期驱动方式(设定一个基准时钟为单位),前者速度只有后者的1/10。
time-slot的简化版模型如下:
其中:
module中的
inactive:主要是#0操作
NBA:主要是非阻塞的赋值
active:除上面的其它操作
observe:clocking的时钟延触发发生时刻,断言操作
program中的时间片基本上用于验证环境
interface中的clocking block块:
input skew指示的是数据采样时间,output skew为数据的驱动时间。
编码建议
为提高仿真效率,sv编码需要注意:
- 尽量减少#delay,尤其是非阻塞触发逻辑
- 减少冗余的clocking block
- 减少冗余的变量翻转(通过加条件)
- 减少内存的使用
减少new()的次数
尽量用class,而不是结构体
如果class不使用了,需要释放内存(赋值null) - 尽量用2值变量,而不是4值
- 尽量用数值效率高的数组(固定数组>队列>动态数组>联合结构体)