说明:该专栏"RTL建模笔记"是《RTL Modeling with SystemVerilog for Simulation and Synthesis》的翻译;该笔记略过了第一章第一小节中背景介绍内容,以及第二小节前面部分的门级、RTL级建模介绍,对于后续学习不影响。
1.行为级和事务级建模
SystemVerilog过程块可用于在比RTL更高的抽象层次上进行建模,这种抽象层次的模型通常被称为行为级模型(也称为总线功能模型或算法模型)。由于RTL级和行为级模型都使用过程块,因此它们的外观可能非常相似。
行为级模型与RTL级模型的区别在于两个方面,或者两者兼而有之:
- RTL过程块会在一个时钟周期内执行其编程语句,如果是组合逻辑,则可能在零个时钟周期内完成。而行为过程块可能需要任意数量的时钟周期来执行其语句。
- RTL模型必须遵循严格的语言限制,以便能够被RTL综合编译器所综合。而行为模型则可以充分利用完整的System-Verilog语言。
高层次的抽象是事务级建模。事务模型通常用于验证代码,并且通常使用 SystemVerilog 的面向对象编程结构进行建模。
行为和事务的抽象级别无法由RTL综合编译器进行综合。
2.定义SystemVerilog可综合子集
由于缺乏 SystemVerilog综合标准,不同综合编译器支持 SystemVerilog 标准的子集不同,这意味着在设计阶段需要针对不同的编译器进行适配。工程师在编写用于综合的模型时需格外小心,要参考将要使用的综合编译器的文档,并遵循该编译器的语言子集。在一种综合编译器编写的模型可能需要进行修改,才能与另一种综合编译器配合使用。
本书定义了SystemVerilog的一个子集,该子集可与市面上大多数的SystemVerilog RTL综合编译器兼容。设计工程师可以放心,只要遵循本书中所述的语言限制和编码准则,模型便可在任何主要的SystemVerilog综合编译器上得到综合。
3.ASIC和FPGA建模
ASIC和FPGA技术的完整定义超出了本书的范围,本书的主题是与SystemVerilog语言相关的正确数字逻辑建模风格。
3.1 标准ASIC元件
ASIC是Application Specific Integrated Circuit的首字母缩写,IC包含不同的功能,ASIC 的设计宗旨是执行特定任务(因此得名“应用专用芯片”),控制器、音频格式转换和视频处理是适合由 ASIC执行的特定应用任务示例。为了执行一般性操作以及其特定任务,ASIC还可包含一个或多个嵌入式处理器。带有嵌入式处理器的 ASIC通常被称为片上系统(SoC,system on chip)。
大多数ASIC技术采用标准单元,即预先设计好的逻辑块,由一到数个逻辑门组成。一个SIC单元库可能包含数百个标准单元,例如AND、NAND、OR、NOR、异或、异或非、二选一多路复用器、D型触发器、锁存器等。每个单元都具有明确的电气特性,如传播延迟、设置时间和保持时间,以及电容。
设计ASIC的流程包括从库中选取合适的单元,并将它们连接起来以实现所需的性能。在整个过程中会用到软件工具。ASIC设计的典型流程如下图所示。
上图的步骤是:
- 第一步指定设计的预期功能。
- 所需的功能在模型的抽象RTL级别上进行建模。在这个阶段,重点是功能,而非物理实现。
- 仿真用于验证功能。该书第1.5节(第17页)详细讨论了仿真的内容。
- 综合过程用于将RTL功能映射到目标ASIC类型的相应标准单元上。综合的输出称为门级网表。综合过程将在第1.6节(第31页)中作更详细的描述。
- 通过仿真逻辑等价检查器(一种形式验证方法),可以验证门级实现在功能上等同于RTL功能。--> 现在常用形式验证工具做等价验证,常用工具为s家fmt和c家lec。
- 时钟树综合用于将时钟驱动器均匀地分布到整个设计中。通常会使用扫描链(scan chain)插入工具来增强设计的可测试性。
- 布局和布线软件会计算如何在实际的硅芯片上布局单元,并规划互连走线。布局和布线软件的输出是一个图形数据系统文件(GDSII)文件。GDSII是一种二进制格式,其中包含有关几何形状(多边形)和其他数据的信息,这些信息对于在硅芯片上实际构建IC是必要的。
- 通过执行设计规则检查(DRC),确保将由该代工厂制造的ASIC所遵循的所有规则都已得到遵守,例如栅极扇出负载。
- 进行静态时序分析(STA)以确保设置/保持时间得到满足,同时考虑到互相作用的net和时钟树偏移的延迟影响。
- 最后将GDSII文件和其他数据发送给负责制造ASIC的代工厂。将这些文件交给代工厂的过程被称为“tapeout” ASIC,因为在ASIC设计的早期阶段,人们使用磁带将文件发送给代工厂。
3.2 FPGA
FPGA 是现场可编程 门阵列(Field Programmable Gate Array)的缩写,FPGA是一种集成电路,包含一定数量的逻辑块,这些逻辑块在IC制造完成后可以进行配置(而ASIC的内容和布局必须在制造之前确定)。FPGA所包含的功能性无法与 ASIC 相媲美,且运行时钟速度较慢,这在 RTL级别的设计中是重要的考量因素。但FPGA技术的最新进展显著缩小了 FPGA和 ASIC 之间的差距。总的来说,FPGA 可以用于实现与ASIC 相同的功能。
FPGA包含许多称为可配置逻辑块(CLB)的小型逻辑组件的阵列。一些FPGA厂商将这些块称为逻辑阵列块(LAB),一个典型的CLB可能包含一个或多个查找表(LUT)和一些选择器(MUX),和一个存储元素,例如D型触发器。大多数FPGA中的查找表是小型RAM,编程时使用逻辑运算,如AND、OR和XOR。从LUT中选择所需的操作允许CLB以多种方式使用,从简单的"与"或"异"门到更复杂的组合功能。某些FPGA中的CLB可能还具有其他功能,例如加法器。MUX可使组合结果直接由CLB输出(异步输出)或存储在存储单元中((同步输出)。
FPGA的制造过程中会包含一个由数百或数千个CLB单元组成的阵列,以及可配置的互连结构,这些互连结构可以被“编程”成所需的CLB单元配置。FPGA还包含I/O端口,这些端口可以配置为连接到CLB阵列的任意一列或一行。
下图显示了一个复杂FPGA的典型设计流程。
FPGA设计流程的前端与ASIC类似,但后端有所不同。与ASIC设计流程相比,FPGA设计流程后端的主要区别在于FPGA的放置和布线。对于ASIC,放置和布线软件决定了IC的制造方式。而对于FPGA,综合放置和布线软件则决定了预先制造的IC将如何进行编程。本书将重点介绍前端步骤2和3,即RTL建模和模拟,这是ASIC和FPGA设计之间差异最小的部分。
3.3 适用于ASIC和FPGA的RTL编码风格
理想情况下,相同的RTL代码可以用于针对ASIC或FPGA进行开发:在RTL级别进行工作时,工程重点在于设计和验证功能,而无需考虑具体的实现细节。综合编译器的职责是将RTL功能映射到特定的ASIC或FPGA技术上。
大多数(但不是全部)RTL代码都能在ASIC和FPGA上得到同样良好的综合。但这一概括性结论也存在例外。RTL模型的某些方面需要考虑设计是将在ASIC还是FPGA上实现。这些方面包括:
- reset,大多数ASIC单元库都包含同步和异步复位触发器。设计工程师可以使用被认为最适合设计的复位类型来编写RTL模型;一些FPGA的灵活性较差,仅具备一种类型的复位触发器(通常是同步的)。虽然综合编译器可以将具有异步复位的RTL模型映射到门级同步复位,或者反之,但需要额外的逻辑门。许多FPGA还支持全局复位功能和上电复位触发器状态,这是ASIC所不具备的。第8章第8.1.5节(第286 页)更详细地讨论了建模复位。
- Vector sizes(矢量大小),对于最大矢量宽度和矢量操作,ASIC具有相当程度的灵活性,处理大型矢量时,复杂的操作将需要大量的逻辑门,但大多数ASIC中使用的标准单元架构能够支持这些操作。FPGA在这方面则较为受限。预定义的CLB数量及其在FPGA内的布局,可能限制了对大型矢量进行复杂操作的能力,这要么是因为可用的CLB数量有限,要么是因为在CLB之间进行互连的布线复杂性所致。ASIC和FPGA之间的这种差异确实意味着,即使是在RTL级别的抽象层面,设计工程师也必须考虑到设备的局限性,以确保实现的功能与之相匹配。
本书中所提供的多数示例、编码风格和指南,同样适用于ASIC和 FPGA 设计。对于针对 ASIC或 FPGA 时可能影响 RTL编码风格的少数特殊情况,书中有所特别说明。