FPGA上的小逻辑算法总结

本文分享了在FPGA设计中遇到的三个逻辑算法问题及其解决方案。包括判断2的整数幂、复数乘法优化和奇数分频。通过巧妙的逻辑运算,实现了资源的有效利用和性能提升。

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

昨天碰巧看了一下求职相关的题目,最开始是看到NVIDIA ASIC design的笔试和面试题目,后来有找了一些公司AMD,华为的ASIC和FPGA的相关题目,发现都有涉及一些小的逻辑算法(虽然本人对这种考察方式并不认同,跟考试没啥区别)。但是想起来自己很久以前在项目中还真遇到过一个小的逻辑算法问题,虽然对整个系统并非关键路径,但是当时仍然精益求精,找到了一个最优的方法去解决。这些东西虽然没什么大用处,但是多积累一些也没有坏处。

First one:

这个是几年前项目中遇到的一个问题,判断一个数是否为2的整数幂,对于二进制数来讲就是判断其只有一个bit位是1.

今天工作中遇到一个问题就是判断一个数是否为2的整数幂,当然是对于二进制数,这个问题可以转化为此std_logic_vector中是否仅有一个1的问题,开始我想通过计数判断的方式,但是这样做逻辑比较复杂,延时也较长,于是google了一下,没想到真的有更好的方式,在微软面试题中找到了这样一个问题就是求int型1的个数的问题,其中有一种比较高效的解决方法就是01 000 000 &(01 000 000 - 00 000 001),如果该数仅有一个1,那么结果为0,如果不为1个1,那么结果为1,这样仅需要一个减法和求与逻辑即可解决这个问题,2拍足够完成。


Second one:

复数乘法的问题,这个问题当前宽带DBF中有用到(复滤波器,复数加权),很多笔试面试题目中也有,最少只需要3个乘法器就可以实现一次复数乘法:

具体的实现方式是,复数乘法可以用如下表达式(I1+Q1i)*(I2+Q2i)=(I1*I2-Q1*Q2)+(I1*Q2+I2*Q1)i

这里设X=I1*I2-Q1*Q2,Y=I1*Q2+I2*Q1,首先计算Y需要两个乘法器和一个加法器,其次再算X的时候可以采用如下方法,首先计算(I1-Q1)*(I2+O2)=I1*I2-Q1*Q2+I1*Q2-I2*Q1,而I1*Q2和I2*Q1在计算Y的时候已经得到了,因此整个复数乘法只需要3个乘法器即可实现,比传统方式资源减少25%。总结下来,这种方式实现一次复数乘法需要3个乘法器,2个加法器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值