当前位置: 首页 > news >正文

不同建模方式的介绍 RTL建模笔记(1)

说明:该专栏"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设计的典型流程如下图所示。

上图的步骤是:

  1. 第一步指定设计的预期功能。
  2. 所需的功能在模型的抽象RTL级别上进行建模。在这个阶段,重点是功能,而非物理实现。
  3. 仿真用于验证功能。该书第1.5节(第17页)详细讨论了仿真的内容。
  4. 综合过程用于将RTL功能映射到目标ASIC类型的相应标准单元上。综合的输出称为门级网表。综合过程将在第1.6节(第31页)中作更详细的描述。
  5. 通过仿真逻辑等价检查器(一种形式验证方法),可以验证门级实现在功能上等同于RTL功能。--> 现在常用形式验证工具做等价验证,常用工具为s家fmt和c家lec。
  6. 时钟树综合用于将时钟驱动器均匀地分布到整个设计中。通常会使用扫描链(scan chain)插入工具来增强设计的可测试性。
  7. 布局和布线软件会计算如何在实际的硅芯片上布局单元,并规划互连走线。布局和布线软件的输出是一个图形数据系统文件(GDSII)文件。GDSII是一种二进制格式,其中包含有关几何形状(多边形)和其他数据的信息,这些信息对于在硅芯片上实际构建IC是必要的。
  8. 通过执行设计规则检查(DRC),确保将由该代工厂制造的ASIC所遵循的所有规则都已得到遵守,例如栅极扇出负载。
  9. 进行静态时序分析(STA)以确保设置/保持时间得到满足,同时考虑到互相作用的net和时钟树偏移的延迟影响。
  10. 最后将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编码风格的少数特殊情况,书中有所特别说明。

http://www.lryc.cn/news/571203.html

相关文章:

  • 【技术】记一次 Docker 中的 ES 数据迁移,使用 Reindex API
  • C++初阶-queue和deque(队列和双端队列)
  • 台积电(TSMC)工艺库命名规则
  • 在 HTTP 请求返回的状态码不为 200 时,重新发送请求
  • idea中配置svn及提交提示“未检测到更改”提示
  • 条件查询详细说明
  • 为编写Python脚本实现H3C交换机自动化配置笔记一
  • Java编程之外观模式
  • JSON编辑器:三种模式的应用(三)
  • 重构气血经络的数学模型:气血经络级联控制系统核心方程
  • 第17天:数据库学习笔记1
  • MySQL 默认连接数
  • .sstop勒索加密数据库恢复---惜分飞
  • 从电商平台下载数据的项目经验分享 (part 1)
  • 前后端拦截器+MDC实现纯数字 traceId 全链路日志追踪(axios + Spring Boot 超详细实战)
  • DeepSeek 大型 MoE 模型大规模部署压测学习
  • FlinkCDC-Hudi数据实时入湖原理篇
  • JVM监控的挑战:Applications Manager如何提供帮助
  • Spring Boot集成Kafka全攻略:从基础配置到高级实践
  • 多模态大语言模型演进:从视觉理解到具身智能的技术突破
  • Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)
  • 5.安装IK分词器
  • ELK在Java的使用
  • Selenium(选择元素,浏览器/元素操作,等待,页面交互)
  • Windows Python 环境管理终极对比:极简方案 VS 传统方案(仅需 2 个软件实现全流程自动化)
  • Selenium(多窗口,frame,验证码,截图,PO模式)
  • rockx读取单张图片并检测图片内人脸的矩形
  • vite的常用配置
  • 「动态规划::数位DP」统计数字递推 / LeetCode 3352|1012(C++)
  • 线程池(Thread Pool)详解