基于Catapult的HLS硬件设计

路科验证 2022-08-26 12:09




本文介绍基于Mentor Graphics Catapult工具的HLSHigh Level Synthesis,高层次综合)硬件设计。


首先将简单介绍高层次综合在数字芯片流程中所处的层次、其独特优势等等;接着将介绍如何基于Catapult工具进行HLS设计,例如Catapult支持的数据类型、接口类型;最后将以RMD(Rough Mode Decision,粗略模式估计)为例介绍如何实现寄存器、状态机和RAM等硬件电路基本组件。


如图表所示,数字芯片的硬件描述层级可以被粗略分为四个,从底向上依次是物理级(晶体管级)、门级、RTL(Register Transfer Level,寄存器传输级)级和系统级/算法级。随着芯片复杂度(晶体管数量)的不断提升,在较低层次上描述整个硬件设计变得难以实现。目前的数字芯片集中于在RTL级以Verilog / System Verilog语言描述硬件电路,特殊情况下为了追求极致的性能可能会在门级/物理级进行电路设计。总体来说,主要依靠DC(Design Compiler), ICC(IC Compiler)这样的EDA(Electronics Design Automation,电子设计自动化)工具来实现硬件描述层次的降低。随着EDA工具的不断发展,在系统级/算法级使用C/C++/System C等高级语言描述硬件电路逐渐被厂商采纳以提升硬件开发效率。即在DC和ICC前,再使用HLS的综合器来实现硬件描述层次的降低。


HLS的出现,让硬件描述层级再次提升,有利于降低硬件设计难度,减少硬件开发时间,让开发人员可以更多关注系统级/算法级的设计。越高层次的优化往往能带来更多的系统收益。但需注意,使用C等高级语言描述硬件电路本质仍是设计硬件,在写相关代码时仍需做到能估计出相关的硬件电路。在FPGA开发流程中,Vivado HLS是最常使用的HLS工具。而在ASIC开发流程中,Catapult是最常使用的。


HLS在设计和验证方面都存在诸多优势:

在设计方面,直接在算法级进行电路设计,有利于进行算法/架构探索。C/C++代码开发后通过HLS+DC/FPGA快速得到硬件代价(面积/性能)的估计值。相同的设计源码,通过更改循环展开/循环流水的参数能快速调整设计的吞吐率,进而在性能和面积之间轻松调整;通过调整HLS的时钟周期约束,能快速调整设计所能达到的最高频率。同一份代码,能在多个平台/场景间最大化复用。

在验证方面,仿真C模型后能将其作为golden,和后续HLS生成的RTL代码进行形式验证,以及同步仿真,即RTL仿真时复用C仿真的测试用例。此外,在C模型层次仿真所需时间更少。


高层次综合和DC综合过程较为相似:用户输入设计源文件,设计约束和目标工艺库等信息,HLS工具将自动分配硬件资源,根据延时信息和目标频率将各个运算分配到各个时钟周期里。HLS工具将自动插入时钟和复位(同步复位/异步复位)。产生的RTL文件可以被用于后续的FPGA设计和ASIC设计。


Catapult有一系列EDA工具来辅助HLS设计:

在C模型(CMODEL)层次,可以使用C Design Checker来进行语法检查和形式验证分析;使用inFactStimulus来仿真C++/RTL,也可指定其他外部仿真工具如VCS;使用CCOV HLS-Aware Coverage来进行覆盖率收集。

在CMODEL到RTL模型(VMODEL)转换中,使用Catapult High-Level Synthesis生成高质量、功耗优化的RTL。

在VMODL层次,使用SLEC-HLS Formal进行C++和RTL的形式验证检查;使用SCVerify进行C-RTL同步仿真,复用相同的C测试用例。


在RTL设计中,以模块(Module)为最小单元进行硬件设计。在Catapult HLS设计中,支持以函数(function)和类(Class)作为最小单元进行设计,HLS综合工具将为其自动插入时钟和复位。


Catapult HLS支持比特精度的数据类型ac_int, 通过设计位宽W 和 符号标志位 S来定义信号。此外,其还支持定点数类型ac_fixed,在ac_int的基础上新增整数位宽I。


Catapult HLS使用 ac_channel 来定义输入端口和输出端口的数据类型。若某端口只被读取,则将其推导为输入端口;若某端口只被写入,则将其推导为输出端口;若某端口既有读取又有写入,则会被推导为双向端口。如需进行累加,建议使用中间变量来进行累加,累加结束后再将结果写入,从而避免输出端口被推导为双向端口。

ac_channel 支持多种接口协议,输入输出默认类型为ccs_in_wait和ccs_out_wait,会自动维护ready和 valid,也可将其修改为最简洁的ccs_in/ccs_out类型。


Catapult HLS支持循环展开,用面积换性能,如果迭代块无数据依赖可以被完全展开。


Catapult HLS支持循环流水,也是用面积换性能,提升整体的吞吐率,并降低从输入到输出的延时。当存在数据依赖导致循环展开无法使用时,可以采用循环流水的方式优化。


对每个循环都可以指定其流水与否,II(Init Interval)确定了流水线的初始化间隔,即每隔几个周期开启一次新的数据迭代。


可以通过在源码中加入诸如 #praga unroll yes的指令来设置约束;也可以通过tcl指令在脚本中设置约束,诸如设置RMD的预测模块(enc_rmd_pre)采用流水实现。


此外,还可以通过软件的图形界面来进行设置约束,即在各个综合步骤(Synthesis Tasks)中设置相关的约束。在图形界面进行设置后,transcript history里会显示对应的tcl 指令,可将其搜集起来汇总到脚本中,后续复用。修改源码/配置后可以产生新的Solution,工具会显示各个Solution的延时、吞吐、综合面积和时序裕量。


以RMD模块为例介绍HLS设计,其包含了控制、参考像素管理、帧内模式预测、残差计算、SATD代价计算和模式排序与输出等等子模块。使用HLS实现各个子模块,使用verilog进行顶层设计。RMD将流水处理4个PU,对每个PU会进行7种模式预测。流水线启动延时为12个周期,后续4*7=28个周期逐渐出结果。


采用基于类的方式来实现模块设计。定义__ENC_RMD_CTL_H__这个宏以避免多重编译。define.h中定义了诸如块尺寸和位宽的一些参数,以及封装了一些常用的数据类型,比如AC_UINT(x)即 ac_int。使用#pragmahls_design top 指定顶层函数。使用const修饰一些常量参数,使用static来描述寄存器 (registers),或者也可使用类的成员变量来描述registers,使用AC_UINT(x)来描述网线(wire)。

将状态跳转条件和输出置于状态变量(计数器 cnt_mod/pu,状态机state)更新之前,即当前输出与之前的输入和状态变量相关,摩尔型。


以Planar预测模式为例,其将根据上方、左方和左上方的参考像素来得到当前块的预测值,pxl_t是封装了ac_int<8, false>。对两重循环使用#pragmahls_unroll yes进行循环展开。定义相应位宽的中间变量来记录中间结果,避免被截断。对于这类纯计算函数,无需手动切流水级,工具将根据目标工艺和时钟约束来自动调度,使得各个周期内的运算延时较为均匀。


在非顶层函数的接口中可以使用数组来简化后续索引。为此,在顶层函数的输入和输出处需增加平面格式与多维数组格式的数据格式转换,可使用slc和set_slc进行切片操作。


对于参考像素管理中需要使用到的行缓存,register实现时代价过大,倾向于使用ram实现。为此,1. 使用 static修饰该数组;2. 如果不需要将数组/ram初始化为0,则设置该数组的初始化类型为AC_VAL_DC,即 Don’t Care,以避免工具默认对ram进行初始化为0的操作,节省若干启动周期。3. 在设置目标库时增加相应的ram库,如ccs_sample_mem。此外,可以通过tcl指令来指定某些数组的默认类型,例如将buf_hor_lin_rd 强制设置为Register类型。


路科验证 专注于数字芯片验证的系统思想和前沿工程领域。路桑是Intel资深验证专家,主持验证架构规划和方法学研究,担任过亿门级通信芯片的验证经理角色。在工程领域之外,他在西安电子科技大学和西安交通大学客座讲授芯片验证课程。著有书籍《芯片验证漫游指南》。
评论
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 13浏览
  • 车身域是指负责管理和控制汽车车身相关功能的一个功能域,在汽车域控系统中起着至关重要的作用。它涵盖了车门、车窗、车灯、雨刮器等各种与车身相关的功能模块。与汽车电子电气架构升级相一致,车身域发展亦可以划分为三个阶段,功能集成愈加丰富:第一阶段为分布式架构:对应BCM车身控制模块,包含灯光、雨刮、门窗等传统车身控制功能。第二阶段为域集中架构:对应BDC/CEM域控制器,在BCM基础上集成网关、PEPS等。第三阶段为SOA理念下的中央集中架构:VIU/ZCU区域控制器,在BDC/CEM基础上集成VCU、
    北汇信息 2025-01-03 16:01 173浏览
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 158浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 26浏览
  • 在快速发展的能源领域,发电厂是发电的支柱,效率和安全性至关重要。在这种背景下,国产数字隔离器已成为现代化和优化发电厂运营的重要组成部分。本文探讨了这些设备在提高性能方面的重要性,同时展示了中国在生产可靠且具有成本效益的数字隔离器方面的进步。什么是数字隔离器?数字隔离器充当屏障,在电气上将系统的不同部分隔离开来,同时允许无缝数据传输。在发电厂中,它们保护敏感的控制电路免受高压尖峰的影响,确保准确的信号处理,并在恶劣条件下保持系统完整性。中国国产数字隔离器经历了重大创新,在许多方面达到甚至超过了全球
    克里雅半导体科技 2025-01-03 16:10 121浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 29浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 161浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 23浏览
  • 物联网(IoT)的快速发展彻底改变了从智能家居到工业自动化等各个行业。由于物联网系统需要高效、可靠且紧凑的组件来处理众多传感器、执行器和通信设备,国产固态继电器(SSR)已成为满足中国这些需求的关键解决方案。本文探讨了国产SSR如何满足物联网应用的需求,重点介绍了它们的优势、技术能力以及在现实场景中的应用。了解物联网中的固态继电器固态继电器是一种电子开关设备,它使用半导体而不是机械触点来控制负载。与传统的机械继电器不同,固态继电器具有以下优势:快速切换:确保精确快速的响应,这对于实时物联网系统至
    克里雅半导体科技 2025-01-03 16:11 165浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 21浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦