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

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

3天内不再提示

关于Verilog代码设计之时分复用详解

电子工程师 来源:开源博客 作者:FPGA开源工作室 2021-04-07 18:49 次阅读

芯片第一要追求的是功能,在保证功能都满足的情况下追求性能,在性能满足的情况下追求成本,也就是面积。当然功耗也十分重要。

提高速度和降低面积属于两个矛盾的目标,各自努力的方向基本相反,想要更快的运行速度,就得堆更多的资源,在具体的设计中往往需要折中(Trade off)。

在性能允许条件下采用时分复用更多的逻辑来减少芯片的面积,面积及成本。

加比选

通常情况下面积关系为加法器 》 比较器 》 选择器,乘法器可以认为是多个加法器。所以就有先选后比,先选后加,先选后乘。

assign sum[4:0] = enable ? (data_a + data_b) : (data_c + data_d);assign add_a[3:0] = enable ? data_a : data_c;assign add_b[3:0] = enable ? data_b : data_d;assign sum[4:0] = add_a + add_b;

789a10f2-96ca-11eb-8b86-12bb97331649.png

画个图意思一下。

78a38754-96ca-11eb-8b86-12bb97331649.png

图中的加法器可以替换成,比较器,乘法器,一个运算单元,甚至巨大的一个模块。

乘法器时分复用

在计算模块中乘法器也是非常大的一部分逻辑,一个设计要考虑PPA最优,一个必须要考虑乘法器的数量多少以及复用能不能最大化,追求最好的设计是整个数据通路中乘法器空闲不下来。通常的设计是做一个专门的乘法器模块,按系统最大的位宽开辟乘法器位宽逻辑,根据设计流程最大程度上复用乘法器资源。

78d48be2-96ca-11eb-8b86-12bb97331649.png

每一路乘法配备一个vld,用vld来作为当前有效的乘法运算,乘法器的结果随着vld的下一拍进行锁存。从下图可以看出乘法器的复用需要将各个部分的运算时间区分开,不可避免系统的时间会变长,想要缩短时间则可以用更多的乘法器来大幅缩短时间,想要面积更小,则用更少的乘法器资源来时分复用。面积与速度互换思想核心。

78e78cba-96ca-11eb-8b86-12bb97331649.png

always @(*)beginif(mult0_vld) mult_a[3:0] = mult_a0;else if(mult1_vld) mult_a[3:0] = mult_a1;else // if(mult2_vld) mult_a[3:0] = mult_a2;end

第二种选择器写法

assign mult_a[3:0] = ({4{mult0_vld}} & mult_a0) | ({4{mult1_vld}} & mult_a1) | ({4{mult2_vld}} & mult_a2)

第二种写法需要保证vld条件不会同时有效,看上去只用了一些门实现,而且没有优先级,感觉比第一种写法逻辑少,但实际上经过工具的优化后,可能消耗逻辑差不多。但是第二种写法在综合后就会是你写的这个样子,而第一种则会综合成一堆组合逻辑门。对于ECO来说,第二种写法更友好,第一种复杂多了。

而我更喜欢第一种写法,因为第一种在收集覆盖率时会更友好。代码覆盖率会清楚的看到哪一行没跑到,条件覆盖率也比较简单。每个if里面就一个条件。

乘法器调用方法,一般是在乘法器的输入保证寄存器输入,结果输出到各个复用模块时打一拍再使用。可以做成在进行完乘法运算后再打拍,这样消耗的寄存器会少很多。画个图意思一下(单bit)。

78f4248e-96ca-11eb-8b86-12bb97331649.png

修改完后的寄存器省了很多,但是乘法器的输出寄存器负载会变大,不过后端综合时约束了max_fan_out工具会自动插buffer和复制寄存器,经过实测还是会节省很多面积。不过这是在时序较好的情况下,如果时序比较紧,这样插多余的buffer会导致时序过不了。

RAM的复用

大于1k的寄存器组使用,考虑用RAM替代,但用RAM读写数据需要时序控制逻辑,并行度会降低。要求并行度高,可使用多个RAM。

792680f0-96ca-11eb-8b86-12bb97331649.png

从设计的整体来看,RAM也可以复用,前面处理完空闲下来的ram,后面处理也可以使用。

真的要这么多的复用吗?

复用可以是各种的,从单个逻辑运算到一个巨大的IP。那么真的要这么多的复用吗?前面说的复用必然需要分时,所以会导致系统处理时间变长,所以必须在保证处理性能的前提下通过复用来减少面积。

在控制通路上,大大小小的计数器会有很多个,理论上一些计数器也可以复用,但是共用一个计数器意味着,这个计数器的开始和结束逻辑复杂,而到了调试(debug)阶段,必然会是调试变得复杂繁琐。

一个加法器如果要复用的数据比较多,除了是debug看起来复杂之外,增加的选择器逻辑可能也不一定会小。

两个独立的模块中有部分相同的逻辑,是否真的有必要在提高了复杂度和模块之间的耦合度的情况下去复用,这也需要考虑。

到了项目后期一个小改动也是需要回归测试所有的测试用例,为了一小点减少逻辑而付出相对巨大的工作量从而影响进度,总的来说获得的边际收益是非常小的。

所以复用虽好,但也要适时、适度。
编辑:lyn

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

原文标题:Verilog代码设计之时分复用

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何自动生成verilog代码

    介绍几种自动生成verilog代码的方法。
    的头像 发表于 11-05 11:45 197次阅读
    如何自动生成<b class='flag-5'>verilog</b><b class='flag-5'>代码</b>

    Verilog硬件描述语言参考手册

    一. 关于 IEEE 1364 标准二. Verilog简介三. 语法总结四. 编写Verilog HDL源代码的标准五. 设计流程
    发表于 11-04 10:12 0次下载

    Verilog语法中运算符的用法

    verilog语法中使用以下两个运算符可以简化我们的位选择代码
    的头像 发表于 10-25 15:17 287次阅读
    <b class='flag-5'>Verilog</b>语法中运算符的用法

    怎么样提高verilog代码编写水平?

    ,共同进步。 欢迎加入FPGA技术微信交流群14群! 交流问题(一) Q:怎么样提高verilog代码编写水平?Cpu 从事DFT工作。目前仅限于写一些简单模块。自学的话如何提高verilog编写水平
    发表于 09-25 20:05

    FPGA Verilog HDL代码如何debug?

    ,共同进步。 欢迎加入FPGA技术微信交流群14群! 交流问题(一) Q:Verilog代码如何debug?最近学习fpga,写了不少verilog,开始思考如何debug的问题!c语言是顺序执行,而
    发表于 09-24 19:16

    频分多路复用时分多路复用的区别有哪些

    频分多路复用(FDM)和时分多路复用(TDM)是两种主要的多路复用技术,它们在通信系统中扮演着至关重要的角色。
    的头像 发表于 05-07 15:24 2202次阅读

    时分复用的特点 n路时分复用系统的示意图

    时分复用TDM是采用同一物理连接的不同时段来传输不同的信号,也能达到多路传输的目的。时分多路复用以时间作为信号分割的参量,故必须使各路信号在时间轴上互不重叠。
    的头像 发表于 05-01 16:51 1245次阅读
    <b class='flag-5'>时分</b><b class='flag-5'>复用</b>的特点 n路<b class='flag-5'>时分</b><b class='flag-5'>复用</b>系统的示意图

    16通道、 2/4/8时分多路复用局部调光背光LED驱动器TLC696x2/4/8数据表

    电子发烧友网站提供《16通道、 2/4/8时分多路复用局部调光背光LED驱动器TLC696x2/4/8数据表.pdf》资料免费下载
    发表于 03-25 09:08 0次下载
    16通道、 2/4/8<b class='flag-5'>时分</b>多路<b class='flag-5'>复用</b>局部调光背光LED驱动器TLC696x2/4/8数据表

    verilog调用模块端口对应方式

    Verilog中的模块端口对应方式,并提供示例代码和详细解释,以帮助读者更好地理解和应用。 首先,我们来了解一下Verilog中的模块和模块端口。一个Verilog模块被定义为包含一组
    的头像 发表于 02-23 10:20 1632次阅读

    verilog function函数的用法

    Verilog 是一种硬件描述语言 (HDL),主要用于描述数字电子电路的行为和结构。在 Verilog 中,函数 (Function) 是一种用于执行特定任务并返回一个值的可重用代码块。函数在
    的头像 发表于 02-22 15:49 5032次阅读

    什么是时分双工和频分双工?各有什么优缺点?

    什么是时分双工和频分双工?各有什么优缺点? 时分双工和频分双工是在通信中使用的两种常见的双工通信技术。它们分别使用时间和频率来实现同时双向通信,每种技术都有其独特的优缺点。以下是关于时分
    的头像 发表于 02-01 16:57 3698次阅读

    什么是时分复用TDM?时分复用类型 时分复用优劣势

    什么是时分复用TDM?时分复用类型 时分复用优劣势  时分
    的头像 发表于 01-16 16:03 2429次阅读

    基于时分复用光学参量振荡器的5比特全光量子随机数发生器

    联合研究团队研制出一种基于时分复用简并点飞秒光学参量振荡器,具备高重复频率飞秒光纤激光器泵浦,通过在谐振腔中接入多通单元,能高效拓展光路,实现5比特全光量子随机数发生器,并能保持系统高度的紧凑性和稳定性。
    的头像 发表于 01-09 11:13 486次阅读
    基于<b class='flag-5'>时分</b><b class='flag-5'>复用</b>光学参量振荡器的5比特全光量子随机数发生器

    聚合的载波聚合的时分复用(TDD) 通信系统中发送物理信道方法

    电子发烧友网站提供《聚合的载波聚合的时分复用(TDD) 通信系统中发送物理信道方法.pdf》资料免费下载
    发表于 12-21 09:59 0次下载

    verilog bug的利器—notepad++介绍

    相信大家写verilog代码的时候,都会用到notepad++,大家也知道notepad++可以和vivado关联使用,这样写起工程代码的时候,调试很方便。
    的头像 发表于 12-21 09:41 2040次阅读
    找<b class='flag-5'>verilog</b> bug的利器—notepad++介绍