字符串 异或运算_一个异或运算引发的设计技巧(1)

博客提及上期关于create_clock使用的内容,介绍了异或运算在FPGA设计中的应用。1bit异或用LUT2即可完成,但位宽达512位且算法运算多、时钟要求高时,LUT实现受限。还列举了字符串与列表转换、列表排序等FPGA设计相关问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

65a78a97ff4426c8953629ed5ef604d2.png

上期内容:create_clock你用对了吗

1f423c06dc6468ec3c676afc213d4fe6.png

异或运算是基本的逻辑运算,在FPGA设计中经常遇到。其实现方式也很简单,例如1bit的a和b相异或,只需要一个2输入查找表(LUT2)就可以完成。但是,如果a和b的位宽达到了512位,而且实际算法包含很多此类运算,且要求时钟运行在600MHz,采用LUT实现就有点捉襟见肘了。

 高速设计中,采用LUT实现512位异或运算会有哪些弊端呢?从资源角度而言,a和b都是512位,那么就要消耗512个LUT2。如果存在很多这样的操作,意味着LUT的利用率会提升,从而增大了布线拥塞的风险。从时序角度而言,作为设计的一部分,这些LUT2很有可能分散到不同列的Slice中,如下图所示。图中红色标记即为LUT。这意味着某些LUT输出端的布线延迟会很大,从而给时序收敛带来压力。e7dfaee173e058bbaa151357355d3541.png为此,我们想到了DSP48。DSP48包含一个逻辑运算单元ALU,可实现多种逻辑运算,其中就包括异或运算,如下图所示(图片来源,Table 2-10, ug579)。观察图中红色方框标记的行,将相应的OPMODE和ALUMODE设置为指定的常数,就可以实现一个48位的异或运算。这就要用到DSP48E2的原语(Primitive),要求对原语中的参数、输入/输出端口的含义有所了解,这个过程较为繁琐。好在Vivado提供了一个综合属性USE_DSP,通过该属性可以将异或运算映射到DSP48中。这里我们重点讨论这种方法。1ef466275ded1b263fa8f4c96ea2d166.png看看如下图所示的SystemVerilog代码,属性use_dsp的值为logic,作用于module(当use_dsp值为logic时,对于SystemVerilog,只能作用于module),这里位宽为36。对输入、输出均采用了寄存,从而使得输入到输出的Latency为2。这个模块可以很好地映射到DSP48中,包括其中的寄存器,不会消耗Slice中的任何资源。这里需要注意一点的是只有当输入数据位宽大于某个值且use_dsp属性值为logic时,才可以将异或运算映射到DSP48中。两个条件缺一不可。有兴趣的同学可以测试一下,这里要求位宽的最小值是多少。d6224af68f71c27d62cf8f7cf2ffeb8d.png但是,如果将其中的位宽改为512,综合后的资源报告如下图所示。可以看到,此时只消耗了4个DSP48,同时消耗了320个LUT,这意味着并不是所有位的异或运算都映射到DSP48中。那么该如何解决这个问题呢?且看下回分解。

555cd6fd04a8b4b2083b68b436b2b9b2.png

技巧1:对于大位宽且要求运行在较高时钟频率下的逻辑运算,例如:与、或、非、同或、异或等,可采用DSP48实现。技巧2:采用DSP48实现逻辑运算时,除了直接使用原语的方式外,采用use_dsp属性实现映射更为简洁可控。只有当输入数据位宽大于某个值且use_dsp属性值为logic时,才可以将异或运算映射到DSP48中。两个条件缺一不可。有兴趣的同学可以测试一下,这里要求位宽的最小值是多少。80c3f663a763cc3b72bd9528a619fadb.png

5f1d6182bcc94dc0506243c92da3cf5a.png

create_clock你用对了吗

字符串和列表之间的转换

列表排序其实不难

警惕设计中的DONT_TOUCH

老生常谈的复位,你真的用对了吗

如何优化高扇出net?

常用的跟Pblock相关的Tcl命令

比较器如何用DSP48实现

HLS案例分析:数组求和(2)HLS案例分析:数组求和(1)关于Pblock的8个必知问题一次创建多个PblockPblock可以这么画在Vivado HLS中使用TclVivado 2019.1新特性(5):更新的report_qor_suggestionsVivado 2019.1新特性(4):VHDL 2008 Generic2019年上半年文章汇总Tcl知识库(更新至2019.1)Vivado HLS知识库(更新至2019.1)Vivado知识库(更新至2019.1)

b526b652e25ad49335599ffee4274ee3.png

1af6e00de067dfb3b1dfbf4cfbecb503.png

文 | Lauren 图 | Lauren

Copyright @ Lauren的FPGA

转载事宜请私信 | 获得授权后方可转载

bfcb4b99ba693fee4a1d0c7edce26659.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值