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

    文章

    4760

    浏览量

    97123
  • Verilog
    +关注

    关注

    30

    文章

    1370

    浏览量

    114107

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    如何将GCC项目导入NuEclipse?

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

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

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

    如何将K230 image转成jpg?

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

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

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

    如何将Linux安装包快速转成玲珑包

    本篇将以 motrix 为例为大家展示如何将 Linux 安装包快速转成玲珑包。
    的头像 发表于 03-12 16:01 1251次阅读
    <b class='flag-5'>如何将</b>Linux安装包快速转成玲珑包

    如何将项目从IAR迁移到Embedded Studio

    本文描述如何将IAR EWARM项目迁移到SEGGER Embedded Studio(简称SES)中。
    的头像 发表于 02-25 17:11 1050次阅读
    <b class='flag-5'>如何将</b>项目从IAR迁移到Embedded Studio

    如何将RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默认支持的IDE只有IAR 和 Keil, 那如何将RT-Thread移植到NXP MCUXPressoIDE上呢?本文内容比较简单但稍有琐碎,希望对有需要的小伙伴有所帮助。
    的头像 发表于 02-13 10:37 2431次阅读
    <b class='flag-5'>如何将</b>RT-Thread移植到NXP MCUXPressoIDE上

    如何将python文件导入到ROS系统中

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
    的头像 发表于 02-11 11:08 1191次阅读
    <b class='flag-5'>如何将</b>python文件导入到ROS系统中

    AI助力实时翻译耳机

    是一种能够实时一种语言翻译成另一种语言的耳机设备。它通常由一个耳机和一个配套的应用程序组成,用户可以通过应用程序选择需要翻译的语言,并通过耳机听到翻译结果。 2 实时
    的头像 发表于 01-24 11:14 3251次阅读
    AI助力实时<b class='flag-5'>翻译</b>耳机

    请问ccs4.2如何将采集到的数据导出dat文件?

    ccs4.2如何将采集到的数据导出dat文件
    发表于 01-14 08:08

    Verilog 与 ASIC 设计的关系 Verilog 代码优化技巧

    Verilog与ASIC设计的关系 Verilog作为一种硬件描述语言(HDL),在ASIC设计中扮演着至关重要的角色。ASIC(Application Specific Integrated
    的头像 发表于 12-17 09:52 1429次阅读

    Verilog 测试平台设计方法 Verilog FPGA开发指南

    Verilog测试平台设计方法是Verilog FPGA开发中的重要环节,它用于验证Verilog设计的正确性和性能。以下是一个详细的Verilog测试平台设计方法及
    的头像 发表于 12-17 09:50 1557次阅读

    Verilog与VHDL的比较 Verilog HDL编程技巧

    Verilog 与 VHDL 比较 1. 语法和风格 VerilogVerilog 的语法更接近于 C 语言,对于有 C 语言背景的工程师来说,学习曲线较平缓。它支持结构化编程,代码更直观,易于
    的头像 发表于 12-17 09:44 2678次阅读

    LLMWorld上线代码翻译新工具——问丫·码语翻译侠,快来体验!

    应用案例 aicode.llmworld.net 案例一 阅读复杂算法,将计算机语言翻译成自然语言和伪代码,快速帮助用户理解算法实现逻辑。 Input(C++): 正弦波信号进行傅里叶变换,并输出其频域结果的C++
    的头像 发表于 12-09 11:11 1597次阅读
    LLMWorld上线代码<b class='flag-5'>翻译</b>新工具——问丫·码语<b class='flag-5'>翻译</b>侠,快来体验!