Verilog
文章平均质量分 70
Felix@SH
技术源于积累,成功始于执着! 个人邮箱:justlxy@mail.dhu.edu.cn QQ:1576109464
展开
-
HDL Coding——不要为你的移位寄存器复位!
移位寄存器在HDL设计中很常见,尤其是在Pipeline设计中,经常会使用移位寄存器去增加某一个路径的Latency。下面是一个简单的移位寄存器的例子:图中红色框框圈出来的是综合约束,主要作用是避免综合工具将移位寄存器优化为移位寄存器查找表(SRL,Shift Register LUT)。此时综合工具综合的结果如下图所示(这应该是符合很多初学者的预期的):注:综合工具优化的结果是合理且最优的,这里禁止其优化,仅仅是为了对比结果。其MAP之后的资源利用情况为:160个寄存器,48个Slic原创 2021-04-10 15:46:01 · 605 阅读 · 0 评论 -
FPGA定点小数计算(Verilog版)——平方根倒数运算(使用John Carmack方法)
有一段时间没有写博客了,突然想起前一段时间挖的坑,所以决定今天来填一下……其实,这一篇原本打算写的是采用牛顿迭代法的平方根运算的博文,现在改为平方根倒数运算,很显然就是之前的尝试失败了……为什么说是失败了呢?主要原因就是相比于其他的求平方根方法:CORDIC和查表法,我的方法(先求平方根倒数,再求倒数)并没有足够的优势。可能有人会问,你是不是傻,求平方根就求平方根,非要搞这么复杂干什么?其实,这里的平方根倒数运算采用的是John Carmack的改进方法,基本上只进行一次牛顿迭代就可以满足大部分场合的精原创 2021-04-04 20:31:13 · 4166 阅读 · 2 评论 -
Lattice FPGA中的Ripple Mode之——关于加法器实现的讨论
为什么写这篇博文呢?因为鄙人无意中发现了一个有趣的问题,所以和大家分享一下。其实加法器是很简单的东西,大部分人可能并不注意其在FPGA的具体实现方式。一般情况下,对于简单的加法运算(如三个4bits的数相加),大部分人都是在HDL中直接使用了如下的写法:module top(a,b,c,d,cout,cin); input [3:0] a,b,c; output [3:0] d; input cin; output cout; assign {cout原创 2021-04-04 20:27:59 · 1290 阅读 · 0 评论 -
关于桶形移位寄存器的讨论
桶形移位寄存器即循环移位寄存器,在浮点加减运算、压缩/解压缩和图像处理算法中有应用,所以稍微说明下:例如设计一个8位桶形移位器:8位桶形移位器是有8个数据输入位,8个数据输出位和3个控制输入位的组合逻辑电路,其输出字等于输入字的循环移位,循环移位的次数由控制输入位指定。比如,如果输入字等于ABCDEFGH(每个字母表示一位),且输入控制位为101(5),则输出字为FGHABCDE。学校里的一些教材给出的写法是:module barrel_shifter(data,num,out); i原创 2021-04-04 19:53:13 · 6512 阅读 · 2 评论