对于non-restoring方法,主要是用rem和den移位数据比较,rem_d长度为den+nom的总长,den_d长度为den+nom的总长度,rem_d的初始值为{{d_width{1'b0}},nom};den_d的初始值为{1'b0,den,{(n_width-1){1'b0}}}.每次比较,移位同时进行. 除法运算也是数字信号处理中经常需要使用的.在FPGA设计中,通常为了简化算法,通常将除法近似为对数据进行移位操作即除数是2的整数次幂,因为在FPGA中进行移位很容易,比如右移2位…
FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个"/"号可以解决的. 好在此类基本运算均有免费的IP核使用,本人使用的VIVADO 2016.4开发环境提供的divider gen IP核均采用AXI总线接口,已经不再支持native接口.故做除法运算的重点从设计算法电路转变成了调用AXI总线IP核以及HDL中有符号数的表示问题,极大降低了开…
以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuyuxue/blog/13-11/300280_d7008.html 一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除.为什么说他不好? 一,是什么 锁存器是一种在异步时序电路系统中,对输入信号电平敏感的单元,用来存储…
有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一种解决的方法就是採用定标.数的定标就是将要运算的浮点数扩大非常多倍,然后取整,再用这个数进行运算,运算得到的结果再缩小对应的倍数就能够了.在设计中,一定不要忘记小数点.在FPGA 中是体现不出来小数点的,小数点的位置仅仅有程序猿知道.Q表示小数点的位置,Q15就表示小数点在第15位. 浮点数(x)转…
渐渐地,发现自己已经习惯于发现细节,喜欢打破常规,真的非常喜欢这种feel. 相信很多人在书上或者博文上都有提出“在FPGA中使用for语句是很占用资源的”的观点,特权同学也不例外.那么,这种观点正确吗?我的答案是:对一半,错一半.在某些情况下,使用for循环也许真的挺占用资源的.但我并不想去探讨这种情况.而是谈谈在另外一些情况下使用for语句的好处. 第一个好处:有时使用for循环不但不会浪费多余的资源,而且可以减少代码量,从而提高编码效率:第二个好处是:方便模块的移植.下面举个移位寄存器的简…
FPGA中RAM的使用探索.以4bitX4为例,数据位宽为4为,深度为4. 第一种方式,直接调用4bitX4的RAM.编写控制逻辑对齐进行读写. quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模型下的时钟频率. 第二种方式,调用1bitX4的RAM,例化4次.编写控制逻辑对齐进行读写. quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模型下的时钟频率. 从上述两种情况来看,两种RAM的使用方式,最终使用资源比较接近,方案二稍多,而从时…
FPGA中计数器设计探索,以计数器为32位为例: 第一种方式,直接定义32位计数器. reg [31:0]count; quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模型下的时钟频率. chip planner下资源分布情况. 第二种方式,定义2个16位计数器. reg [15:0]count1,count2; quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模型下的时钟频率. chip planner下资源分布情况 从上述两种情况来…
在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的FPGA,如CYCLONE(r)系列中是没有的.下面介绍如何在低端FPGA中实现这个DPA的功能. 实现架构 在LVDS输入接收时,时钟和数据的相位可能是不确定的,因此我们需要将时钟的相位作出调整,使得时钟能稳定的采集到输入数据.工作的核心就是用锁相环PLL的相位调整功能,产生若干个时钟的不同相位,看…
逻辑门 在ASIC的世界里,衡量器件容量的常用标准是等效门.这是因为不同的厂商在单元库里提供了不同的功能模块,而每个功能模块的实现都要求不同数量的晶体管.这样在两个器件之间比较容量和复杂度就很困难. 解决的办法是给 每个功能赋予一个等效门数值,就比如“A功能模块等价于5个等效门,B功能模块等价于3个等效门···”.下一步就是统计每个功能模块,把他们转换成相应的等效门值,把这些值相加,然后就可以自豪的公布:“我的ASIC包括一千万的等效门,这要比你的ASIC大多了!” 但是,事情没那么简单,不同的…
delay和latency都有延迟的意义,在FPGA中二者又有具体的区别. latency出现在时序逻辑电路中,表示数据从输入到输出有效经过的时间,通常以时钟周期为单位. delay出现在组合逻辑电路.布线中,表示数据从一端到另一端经过的时间,通常以绝对时间衡量. 引起delay的有线延迟.门延迟等,通常是不希望出现的. latency和电路的逻辑设计有关,如果latency很大,通过提升工作的时钟频率,那么绝对的响应时间不会太长. 而delay很大,那么电路的工作频率会受限,从而影响电路的整体…