modelsim仿真学习笔记
1、 仿真的目的:
在软件环境下,验证电路的行为和设想中的是否一致。
2、 仿真的分类:
a) 功能仿真:在RTL层进行的仿真,其特点是不考虑构成电路的逻辑和门的时间延迟,着重考虑电路在理想环境下的行为和设计构想的一致性;
b) 时序仿真:又称为后仿真,是在电路已经映射到特定的工艺环境后,将电路的路径延迟和门延迟考虑进对电路行为的影响后,
来比较电路的行为是否还能够在一定条件下满足设计构想。
3、 功能仿真的目的:
a) 设计出能工作的电路:因此功能仿真不是一个孤立的过程,其和综合、时序分析等形成一个反馈工作过程,只有这个过程收敛,各个环节才有意义。而孤立的功能仿真通过是没有意义的,如果在时序分析过程中发现时序不满足需要更改代码,则功能仿真必须从新进行。因此正确的工作流程是:
b)代码排错:功能仿真是代码排错的最重要的手段之一。
4、 modelsim的高级功能:Code Coverage
a) 代码覆盖率是验证激励是否完备,检验代码质量的一个重要手段。测试激励的代码覆盖率至少要达到95%以上,
才能基本认为代码在逻辑上是通过质量控制的,才能进入综合步骤;
b) 代码覆盖率是保证高质量代码的必要条件,但却不是充分条件。即便代码行覆盖和分支覆盖都能够达到100%,
也不能肯定的说代码已经得到100%的验证。除非所有的分支覆盖都能够进行组合遍历。
c) 在大的设计中,如果想通过一个激励就验证完一个设计或者模块是不现实的。一方面是从逻辑功能上很难做到;
另外一方面是因为如果在一个激励中包括了各种情况,整个仿真过程的速度会随着计算机内存的消耗而成线性下降,效率低下。
d) 通常的做法是每一个激励只验证电路功能的某个方面。整个电路的功能验证由数个激励共同完成。在这种验证方法中代码覆盖率更显重要,
因为可以通过代码覆盖率来控制激励对功能的覆盖程度。
e) modelsim的Code coverag