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

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

3天内不再提示

如何将算法“翻译”成Verilog?

ruikundianzi 来源:IP与SoC设计 作者:IP与SoC设计 2022-11-03 15:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我是一名数字前端IP设计工程师,方向为通信芯片IP设计,我的主要工作就是“翻译”算法代码。

经典的ASIC开发流程主要有:

以算法设计为主导

算法C代码手工转换为RTL

RTL与算法C代码生成的测试向量对比进行验证

依赖FPGA做大量实时、现场测试

适合通信信号处理,音视频处理或图像处理等产品

我的工作主要就是将算法C代码手工转换为RTL,尤其是通信芯片的设计,算法主要是将浮点运算近似成定点运算,定点的精度决定了系统的性能,所以一种开发模式就是,用C平台生成的case数据和RTL仿真的数据进行对比,保证定点化后的仿真性能。

所以对于单个计算模块的开发来说,可以说就是体力活了,算法的计算过程已经摆在那里,单就是纯翻译。

然而再复杂的算法,在设计工程师的眼里,也就是一堆数学公式,算法设计者也应该尽量做简单的算法实现,比如除法,求幂次方、开平方等复杂运算到了设计工程师这里都已经转化成了简单的乘法和加法运算。更复杂的就是累加、累乘(我所能接触到的)。

做芯片第一应该关注的是芯片的PPA(Performance, Power, Area),如何设计的出更高性能的电路,占用更少的资源/面积,更低的功耗。这才是我们的专业知识。

通过学习算法代码和文档以及协议,了解算法的计算意图。然后进行数据通路的分析,整体的数据流走向。哪些需要计算的数据可以用寄存器存储,哪些数据需要用RAM存储。模块的划分可拆解,哪些计算单元是功能类似的,可以做成一个小IP,乘法器同时使用的最大数量,是否能在整个大模块中分时复用。

算法的设计中没有时序的概念,也没有计算时间的长短。需要设计工程师去整理整个模块的计算流水,流水线排的时间长,需要的计算逻辑就越少,反之,面积越大。面积与速度互换思想,贯穿始终。现成乘法器的数量有限,是否能加上几个乘法器而获得模块整体运算速度提高30%的收益,都需要去折中(Trade off)考虑。

排好计算流水,控制通路,一般都使用状态机去做,当然,状态机怎么设计算法可不会教你。整个模块与更高层模块的交互,接口控制时序需要讨论确定。数据通路可能还需要用到RAM/Regfile去缓存中间数据的结果,RAM/Regfile的读写地址控制也是常见设计。数据通路的运算,是主要消耗资源的部分,所以一个好的详细设计方案非常重要,同样的设计,别人可以用比你小30%的面积和少30%的时间来实现。这可能就是设计工程师真正的价值体现之处。

对于通信算法中,矩阵运算也是比较常见的,复杂矩阵的运算是最耗费资源的,矩阵运算的拆解也需要很多技巧,比如矩阵的乘法是A的第一行乘以B的第一列,累加得到第一个元素,这部分的运算电路可以复用流水起来做。一个矩阵需要拆解合并成数个小矩阵,想要保持并行,用寄存器存储,就会消耗的资源多。存在RAM中就是串行流水做会消耗的时间长,所以这都需要在模块架构设计阶段去计算处理时间和评估消耗资源、折中是否采取(Trade off)。

这种大型矩阵运算动辄几百上千bit的寄存器输出,连线选择运算,可能会造成后端congestion问题,所以方案设计的重要性又体现出来了。组合逻辑的运算,如果路径过长,时序会出现问题,插寄存器的位置也非常重要,消耗的寄存器的数量也是不同的,甚至可以通过手动retimming,找个寄存器把打拍的位置换一下,消耗的资源还是相同的。

对于芯片的功耗前端能做的就是,去加一些时钟门控,模块不用时候可以关掉,组合逻辑计算单元不用的时候避免翻转,乘法器的使能信号的控制,避免无效翻转,数据通路寄存器带着使能打拍,工具也会自动插时钟门控,这些就和算法没关系了。

至于算法,当然不同领域的相关知识不同,虽然设计方法是完全类似的,但是在一个领域深扎,成为这个领域的专业的人,可以更好的理解算法到硬件的实现。

IP设计工程师经常调侃自己是算法“翻译官”,虽然也没什么问题,但是自嘲归自嘲,如果感兴趣的话,还是应该去想着如何更好的做好自己的设计,做好芯片。即使是“翻译官”也是一个十分有价值的“翻译官”。

审核编辑 :李倩

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

    关注

    23

    文章

    4805

    浏览量

    98560
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114723

原文标题:如何将算法“翻译”成Verilog?

文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问如何将文件从 PC 传输到 visionfive2?

    如何将文件从 PC 传输到 visionfive2?
    发表于 02-03 07:49

    "网关”顶流!PROFINET转CC-LINK,汽车产线的“翻译官”出圈记

    "网关”顶流!PROFINET转CC-LINK,汽车产线的“翻译官”出圈记 现代化汽车制造工厂内部,机器人手臂在进行精密焊接作业 在汽车制造的精密战场上,西门子与三菱的PLC系统如同来自不同国
    的头像 发表于 11-26 16:08 588次阅读
    &quot;网关”<b class='flag-5'>成</b>顶流!PROFINET转CC-LINK,汽车产线的“<b class='flag-5'>翻译</b>官”出圈记

    如何将某个函数或变量放在固定的地址 ?

    如题,如何将某个函数或者变量放在固定的地址?类似于__attribute__( at(绝对地址) ),用的nucleistudio ide, __attribute__( at(绝对地址) )出现警告 at属性被忽视,有类似的属性吗?
    发表于 11-07 06:07

    复杂的软件算法硬件IP核的实现

    Compiler)算法编译转化为可综合的 Verilog 文本,进而通过 FPGA 在硬件上实现算法。 1.C to Hardware 技术简介 AltiumDesign
    发表于 10-30 07:02

    AES加解密算法逻辑实现及其在蜂鸟E203SoC上的应用介绍

    这次分享我们会简要介绍AES加解密算法的逻辑实现,以及如何将AES算法做成硬件协处理器集成在蜂鸟E203 SoC上。 AES算法介绍 AES算法
    发表于 10-29 07:29

    N9H20如何将 SPI 闪存与非作系统 BSP 一起使用?

    N9H20如何将 SPI 闪存与非作系统 BSP 一起使用?
    发表于 09-01 08:27

    N9H2x如何将视频转换为 AVI 文件?

    N9H2x如何将视频转换为 AVI 文件?
    发表于 09-01 08:05

    如何将GCC项目导入NuEclipse?

    如何将GCC项目导入NuEclipse?
    发表于 09-01 07:04

    N9H20如何将非作系统 NVTFAT 与 SPI 闪存一起使用?

    N9H20如何将非作系统 NVTFAT 与 SPI 闪存一起使用?
    发表于 09-01 06:38

    请问使用 NUC505 时如何将代码放入 SRAM 中执行?

    使用 NUC505 时如何将代码放入 SRAM 中执行?
    发表于 08-28 08:25

    请问如何将USB设备设置为全速设备或高速设备?

    如何将USB设备设置为全速设备或高速设备?
    发表于 08-28 06:27

    请问如何将ISP写入Nuvoton 8051 MCU系列?

    如何将ISP写入Nuvoton 8051 MCU系列?
    发表于 08-18 07:34

    广州邮科通信逆变器:12V直流输入的“能量翻译官”,让通信永不断线

    在通信网络这个精密运转的数字生命体中,电力如同流淌的血液。而广州邮科通信专为行业定制的12V直流输入逆变器,则扮演着至关重要的“能量翻译官”角色——它精准高效地通信系统中无处不在的12V直流电“翻译
    的头像 发表于 06-27 15:51 1692次阅读

    如何将K230 image转成jpg?

    如何将K230image转成jpg,我想获取图片,传回我自己的系统 你好,可以使用img.to_jpeg()来对其进行压缩。
    发表于 06-12 06:41

    技术分享 | 迅为RK3568开发板如何将 Linux 板卡虚拟U盘

    技术分享 | 迅为RK3568开发板如何将 Linux 板卡虚拟U盘
    的头像 发表于 06-04 10:57 1334次阅读
    技术分享 | 迅为RK3568开发板<b class='flag-5'>如何将</b> Linux 板卡虚拟<b class='flag-5'>成</b>U盘