找回密码
 注册
关于网站域名变更的通知
查看: 461|回复: 1
打印 上一主题 下一主题

32位无符号除法器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-30 11:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
32位无符号除法器

  ]/ U" `+ Y  _5 }; m4 S8 K3 k
, V: F- L* @3 i- b2 J0 }在Verilog HDL语言中虽然有除的运算指令,但是除运算符中的除数必须是2的幂,因此无法实现除数为任意整数的除法,很大程度上限制了它的使用领域。并且多数综合工具对于除运算指令不能综合出令人满意的结果,有些甚至不能给予综合。对于这种情况,一般使用相应的算法来实现除法,分为两类,基于减法操作和基于乘法操作的算法。[1]
基于减法的除法器的算法:
        对于32的无符号除法,被除数a除以除数b,他们的商和余数一定不会超过32位。首先将a转换成高32位为0,低32位为a的temp_a。把b转换成高32位为b,低32位为0的temp_b。在每个周期开始时,先将temp_a左移一位,末尾补0,然后与b比较,是否大于b,是则temp_a减去temp_b将且加上1,否则继续往下执行。上面的移位、比较和减法(视具体情况而定)要执行32次,执行结束后temp_a的高32位即为余数,低32位即为商。
" T  h- T! B/ L
Verilog HDL 代码
/*
功能:     32位除法器
输入参数: 被除数a,除数b
输出参数: 商yshang,余数yyushu
备注: 采用移位、比较和减法(从高位开始)实现的除法运算
本例实现的是32位除法器的例子
*/
module division(a,b,yshang,yyushu);
input[31:0] a; //被除数
input[31:0] b; //除数
output[31:0] yshang; //
output[31:0] yyushu; //

0 S8 a' ^! X& h+ y
reg[31:0] yshang;
reg[31:0] yyushu;

5 d& X& |$ O1 {; R. F
. F1 v# Z6 u2 E9 a( O# H
reg[31:0] tempa;
reg[31:0] tempb;
9 H% x  w" y: `% C
. Q: d" l" V) e7 Y
reg[63:0] temp_a;
reg[63:0] temp_b;
/ L( P8 q- X* W" J' o

, j( v/ d1 ]' U5 h; R/ ?+ T0 ]
always @(a or b)
begin
        tempa <= a;
        tempb <= b;
end
1 _( f* o/ X9 z6 [+ L; \  m  h

+ X) ?& D3 B* J. ]8 z$ A5 S
integer i;
9 W: A2 p1 b5 `
always @(tempa or tempb)
begin
        temp_a = {32'h00000000,tempa}; //
        temp_b = {tempb,32'h00000000}; //
        for(i = 0;i < 32;i = i + 1) //32次循环
        begin
                temp_a = {temp_a[62:0],1'b0}; //左移一位
                if(temp_a[63:32] >= tempb) //注意:temp_a的高32位于tempb比较,不是与temp_b比较
                        temp_a = temp_a - temp_b + 1'b1; //加1表示商加1
                else
                        temp_a = temp_a;
        end

* `. @" n$ a1 _: C# c4 T
        yshang <= temp_a[31:0];
        yyushu <= temp_a[63:32];
/ l: A5 `, |0 S
end
endmodule
% x+ v2 _- Y: j- }1 P! X4 J
波形仿真与测试结果
[url=http://upload.ednchina.com/Attachment.aspx?attachmentid=146629][/url]
图1  32位无符号数除法功能仿真图
* {# ?) R( P; r6 G7 y
        从仿真图1中可以得出,运算速度很快,但是这是基于占用大量LE的基础上的,在FPGA的设计中,要关心两个参数:逻辑资源的占用率和速度。这种采用组合逻辑实现的除法器以耗费大量LE来获取速度优势的设计在被除数小于8位时应用还可以,大于8位,就得改变算法。

: X: N" v3 Y+ @) c: v
图2   32位无符号除法的分析综合报告
& H$ A; v9 a& T4 ^/ a! G4 @

该用户从未签到

2#
发表于 2019-5-30 18:05 | 只看该作者
很棒的资料 值得一看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 20:18 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表