0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Mentor Graphics Catapult工具的HLS硬件设计

路科验证 来源:路科验证 作者:路科验证 2022-08-26 13:59 次阅读

本文介绍基于Mentor Graphics Catapult工具的HLS(High LevelSynthesis,高层次综合)硬件设计。

e9bb4c44-2501-11ed-ba43-dac502259ad0.png

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

e9dcbb90-2501-11ed-ba43-dac502259ad0.png

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

ea02e446-2501-11ed-ba43-dac502259ad0.png

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

ea144bdc-2501-11ed-ba43-dac502259ad0.png

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

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

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

ea250742-2501-11ed-ba43-dac502259ad0.png

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

ea48a170-2501-11ed-ba43-dac502259ad0.png

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

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

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

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

ea54317a-2501-11ed-ba43-dac502259ad0.png

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

ea70b6ba-2501-11ed-ba43-dac502259ad0.png

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

ea8840a0-2501-11ed-ba43-dac502259ad0.png

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

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

eab33332-2501-11ed-ba43-dac502259ad0.png

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

eac2b05a-2501-11ed-ba43-dac502259ad0.png

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

eadee78e-2501-11ed-ba43-dac502259ad0.png

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

eaebad84-2501-11ed-ba43-dac502259ad0.png

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

eafefcc2-2501-11ed-ba43-dac502259ad0.png

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

eb2d98de-2501-11ed-ba43-dac502259ad0.png

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

eb4b9834-2501-11ed-ba43-dac502259ad0.png

采用基于类的方式来实现模块设计。定义__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)更新之前,即当前输出与之前的输入和状态变量相关,摩尔型。

eb57f6ec-2501-11ed-ba43-dac502259ad0.png

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

eb755692-2501-11ed-ba43-dac502259ad0.png

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

eb8f435e-2501-11ed-ba43-dac502259ad0.png

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

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 硬件设计
    +关注

    关注

    18

    文章

    397

    浏览量

    44584
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13635
  • HLS
    HLS
    +关注

    关注

    1

    文章

    129

    浏览量

    24136

原文标题:基于Catapult的HLS硬件设计

文章出处:【微信号:Rocker-IC,微信公众号:路科验证】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    为什么用TVP7002采集到的PC graphics会闪烁呀?

    我们正在利用TVP7002芯片接收分辨率为1600*1200的VGA输入信号;当PC graphics 是纯白色(R[9:2]=0xff,G[9:2]=0xff,B[9:2]=0xff)的画面
    发表于 12-12 08:46

    MSP430™硬件工具

    电子发烧友网站提供《MSP430™硬件工具.pdf》资料免费下载
    发表于 11-07 09:10 0次下载
    MSP430™<b class='flag-5'>硬件</b><b class='flag-5'>工具</b>

    NFC IC配置工具NFC Cockpit的主要特性

    开发NFC应用,除了NFC IC硬件平台,得心应手、简便易用的软件工具也少不了!今天我们就向大家介绍一款超级好用的NFC IC配置工具——NFC Cockpit!
    的头像 发表于 08-27 10:14 1147次阅读
    NFC IC配置<b class='flag-5'>工具</b>NFC Cockpit的主要特性

    优化 FPGA HLS 设计

    优化 FPGA HLS 设计 用工具用 C 生成 RTL 的代码基本不可读。以下是如何在不更改任何 RTL 的情况下提高设计性能。 介绍 高级设计能够以简洁的方式捕获设计,从而
    发表于 08-16 19:56

    一种在HLS中插入HDL代码的方式

    很多人都比较反感用C/C++开发(HLS)FPGA,大家第一拒绝的理由就是耗费资源太多。但是HLS也有自己的优点,除了快速构建算法外,还有一个就是接口的生成,尤其对于AXI类接口,按照标准语法就可以很方便地生成相关接口。
    的头像 发表于 07-16 18:01 760次阅读
    一种在<b class='flag-5'>HLS</b>中插入HDL代码的方式

    西门子推出Catapult AI NN:重塑神经网络加速器设计的未来

    的需求,西门子数字化工业软件日前推出了一款名为Catapult AI NN的创新软件,旨在帮助神经网络加速器在专用集成电路(ASIC)和芯片级系统(SoC)上实现更高效的高层次综合(HLS)。
    的头像 发表于 06-19 16:40 734次阅读

    西门子推出Catapult AI NN软件,赋能神经网络加速器设计

    西门子数字化工业软件近日发布了Catapult AI NN软件,这款软件在神经网络加速器设计领域迈出了重要一步。Catapult AI NN软件专注于在专用集成电路(ASIC)和芯片级系统(SoC)上实现神经网络的高层次综合(HLS
    的头像 发表于 06-19 11:27 873次阅读

    西门子推出Catapult AI NN软件

    西门子数字化工业软件日前推出Catapult AI NN软件,可帮助神经网络加速器在专用集成电路(ASIC)和芯片级系统(So)上进行高层次综合(HLS)。
    的头像 发表于 06-19 10:48 828次阅读

    西门子推出Catapult AI NN软件,加速神经网络在ASIC和SoC上综合

    综合(HLS)提供强有力的支持。Catapult AI NN的推出,标志着西门子在人工智能(AI)与硬件设计融合领域迈出了坚实的一步。
    的头像 发表于 06-18 17:29 1173次阅读

    DA1453x-DA1469x 生产线工具软件和硬件用户手册

    电子发烧友网站提供《DA1453x-DA1469x 生产线工具软件和硬件用户手册.rar》资料免费下载
    发表于 05-21 17:19 0次下载
    DA1453x-DA1469x 生产线<b class='flag-5'>工具</b>软件和<b class='flag-5'>硬件</b>用户手册

    存内计算技术工具链——量化篇

    本篇文章将重点讲述存内计算技术工具链之“量化”,我们将从面向存内计算芯片的深度学习编译工具链、神经网络中的量化(包括训练后量化与量化感知训练)、基于存内计算芯片硬件特性的量化工具这三个
    的头像 发表于 05-16 12:35 1263次阅读
    存内计算技术<b class='flag-5'>工具</b>链——量化篇

    为何高端FPGA都非常重视软件

    了数据字,并且不需要位交换,则可以使用这些额外的路由资源。 对于他们的HLS入门,Achronix与Mentor合作,后者的Catapult-C可能是市场上最成熟的ASIC HLS
    发表于 03-23 16:48

    苹果硬件诊断工具获iFixit好评,适用DIY维修者但仍需改进空间

    苹果于 2021 年启动自助维修计划,旨在为有意动手修理设备的消费者提供官方零配件。此计划的一环便是,去年初首次向终端用户开启了原本仅供苹果专卖店及授权服务供应商 (AASP)使用的硬件诊断工具
    的头像 发表于 03-22 15:30 545次阅读

    如何优化HLS仿真脚本运行时间

    需求:由于自己目前一个 HLS 仿真脚本需要运行 1个多小时,先打算通过打印时间戳的方式找出最耗时的部分,然后想办法优化。
    的头像 发表于 02-23 09:29 711次阅读

    芯片设计及使用的EDA工具介绍

    机遇总是与挑战并存,目前国内在高端EDA工具研发方面,面临着如Synopsys、Cadence和Mentor等国际EDA供应商的巨大挑战,即使是作为本土最大的EDA公司,华大九天目前也只能够提供产业所需EDA解决方案的1/3左右。
    发表于 01-18 15:19 1485次阅读
    芯片设计及使用的EDA<b class='flag-5'>工具</b>介绍