7、16位除法器

7、16位除法器

原理: 11010 / 101 = 101…1
为什么被除数要补位?因为被除数要移位超过自身原有位数。
为什么除数要补位? 因为除数要与被除数按位对齐,相减。
比较被除数与除数大小,然后相减做判断。

以5位除法器为例:

Reg_a = 00000_11010		//被除数
Reg_b = 00101_00000		//除数
Temp  = 00000
I = 0
Reg_a = 00001_10100
Temp = 00000
Reg _b = 00101_00000
Reg_a < reg_b
Temp = 00000
I = 1
Reg_a = 00011_01000
Temp = 00000
Reg_b = 00101_00000
Reg_a <reg_b
Temp = 00000
I = 2
Reg_a = 00110_10000
Temp = 00000
Reg_b = 00101_00000
Reg_a > reg_b
Reg_a = 00001_10000
Temp = 00001
I = 3
Reg_a = 00011_00000
Temp = 00010
Reg_b = 00101_00000
Reg_a < reg_b
Temp = 00010
I = 4
Reg_a = 00110_00000
Temp = 00100
Reg_b = 00101_00000
Reg_a > reg_b
Reg_a = 00001_00000
Temp = 00101

16位触除法器仅仅改变被除数和除数补零个数

module division
(
    input [15:0]  a,	//被除数
    input [7:0 ]  b,	//除数
    output [15:0] res,	//商
    output [15:0] yu	//余数
);
    reg [31:0] reg_a;
    reg [31:0] reg_b;
    reg [15:0] temp;
	
    integer i ;
	always@(*)begin
		reg_a = {16'b0,a};
		reg_b = {b,16'b0};
		temp = 0;
		for(i=0;i<16;i=i+1)begin		
			reg_a = reg_a << 1;
			temp = temp << 1;
			if(reg_a >= reg_b)begin
				reg_a = reg_a - reg_b;
				temp[0] = 1;
			end
			else begin
				reg_a = reg_a;
				temp[0] = 0;
			end
		end
	end
    assign res = temp;
    assign yu = reg_a[31:16];
	
endmodule
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值