除法器的FPGA实现

       

目录

1.除法器系统框图:

2.除法运算实例 

3.算法实现思路

 4.完整代码及仿真


        与乘法可以由一系列的移位和累加操作实现相比,除法则可以转化为减法和除数的右移。在使用FPGA进行数字信号处理的过程中,人们对于除法器的使用会格外慎重,因为它消耗资源量大,且有较大的时延。本文将从实例出发,尝试着用verilog实现除法器。首先绘制除法器的系统框图,从一个除法运算的实例中提炼出除法器的结构,然后进行代码的编写与仿真。

1.除法器系统框图:

module Divider
#(parameter  DIVIDENT_WIDTH = 16,
            DIVISOR_WIDTH = 16)    
(
    input                               sys_clk,
    input                               rst,
    input  [DIVIDENT_WIDTH - 1 : 0]     dividend     ,
    input  [DIVISOR_WIDTH - 1 : 0]      divisor      ,
    input                               divide_in_vld,
    output reg [DIVIDENT_WIDTH - 1 : 0] quotient            ,
    output reg [DIVISOR_WIDTH - 1 : 0]  remainder           ,
    output reg                          divide_out_vld      

);

 信号说明

信号名称 方向 描述
dividend     输入 被除数
divisor 输入 除数
divide_in_vld 输入 输入有效标志
quotient 输出
remainder 输出 余数
divide_out_vld       输出       输出有效标志

 

2.除法运算实例 

        以8bit数121(1011001)除以9(1001)为例, 下图为121除以9的运算过程

1.1111 > 1001 , 给商的对应位置1,1111 - 1001 =  110 ,将被除数的对应位0填充到110的最低位得到1100,作为下一个与被除数比较的数。

2.1100 > 1001 , 给商的对应位置1,1100 - 1001 = 11,将被除数的对应位0填充到11的最低位得到110

3.110 <1001 , 因此给商的对应位置0 ,将被除数的对应位1填充到110的最低位得到1101

4.1101 >1001, 因此将商的对应位置零,1101-1001 = 100,此时除法运算结束,商为1101,余数为100

        将根据被除数的有效位宽对除数进行截取得到的被除数,命名为比较数,通过对上述除法运算的实现过程的观察,我们可以发现除法运算主要由以下几个步骤组成

1.将比较数与被除数进行比较,如第一步运算的1111与1001比较

2.比较数大于等于被除数,则给商的对应位置一,同时将比较数同被除数作差,然后将被除数的对    应位填充到作差结果的最低位作为新的比较数。 比较数小于被除数,则给商的对应位置零,将被除数对应位填充到比较数的最低位作为新的比较数

重复这两步直到除数最低位到达被除数最低位。

3.算法实现思路

        总结以上的步骤,除法运算可以概括为对齐,比较,作差,新的比较数生成。从被除数的角度来看,除法运算为对齐后除数的右移。从除数的角度来看,除法运算为对齐后被除数的左移,同样以上面8bit数121除以9为例࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值