RTL设计中的功能验证与仿真问题解析
1. RTL设计基础
在进行模块设计时,用户通常以RTL(寄存器传输级)的形式描述模块的功能。RTL代码随后会被合成,以实现具有相同功能的门级连接。在合成之前,设计师需要确保RTL代码确实实现了所需的功能。为此,设计师会进行大量的仿真,通过仿真可以了解对于给定的一组输入向量,模块会有怎样的响应。只有当设计师确定RTL代码能够实现所需功能时,才会将其送去进行合成及后续步骤。
使用RTL描述设计相较于使用逻辑门有两个主要优点:
- 更高的抽象层次 :与提供门级连接相比,RTL能更轻松地描述设计。
- 更快的仿真速度 :RTL仿真比相应的门级表示要快得多,因此功能验证也能更快完成。
2. 无歧义仿真的必要性
由于RTL代码必须确保实现所需功能,所以需要使用许多不同的向量集对其进行严格的仿真,以覆盖设备的所有功能。这些向量应涵盖各种情况,包括:
- 正常操作模式
- 特定的极端情况
- 错误/恢复处理等
当RTL代码只有一种可能的解释时,仿真结果是明确的。然而,有些RTL代码可能有多种解释。RTL设计师使用的仿真器会呈现出多种可能解释中的一种,设计师最终会对所呈现的功能感到满意。但问题是,在仿真过程中,仿真器所采用的解释可能与最终实现(合成)的结果不同。这样一来,即使通过仿真验证了设计功能,实际实现的设备也可能不会表现出相同的行为。
RTL代码的功能验证(通过仿真)是芯片设计中最基本和非常重要的方面,因此,编写的任何RTL代码在功能上都必须明确无误。