当前位置:   article > 正文

除法器的Verilog RTL实现_除法 verilog

除法 verilog

除法运算过程

和十进制除法一样,其实除法是一个移位并比较大小的过程
下图为二进制的除法运算(27/5)
在这里插入图片描述

除法运算过程如下:
1.取被除数的高几位数据,位宽和除数相同(上述为3bit数据)。
2.将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为1,两者做差得到第一步的余数;否则得到对应的商为0,将前者直接作为余数。
3.将上一步中的余数与被除数剩余最高位1bit数据拼接成新的数据,然后再和除数做比较,可以得到新的商和余数。
4.重复过程3,直到被除数最低位数据也参与计算。

verilog实现

这里以被除数为16bit,除数为8bit为例。

module division(
	input [15:0] A,
	input [7:0] B,
	output [15:0] result,
	output [15:0] odd
	);
	reg [15:0] a_reg;
	reg [7:0] b_reg;
	reg [31:0] temp_a;
	reg [31:0] temp_b;
	integer i;
	
	always@(*)begin
		a_reg = A;
		b_reg = B;
	end

	always@(*)begin
		temp_a = {16'h0,a_reg};
		temp_b = {b_reg,16'h0};
		
		for(i=0;i<16;i=i+1)begin
			temp_a = temp_a <<1;
			if(temp_a >= temp_b)begin
				temp_a = temp_a-temp_b+1;
			end
			else begin
				temp_a = temp_a;
			end
		end
	end

	assign odd = temp_a[31:16];
	assign result = temp_a[15:0];

endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

注意:
1.商和余数的位宽要和被除数位宽相同
2.被除数在数据前面补零,除数为数据末端补零,补零的长度由被除数位宽决定。
3.循环次数也是由被除数位宽决定。
4.当移位的被除数大于除数时,被除数减去除数是在前16bit得到余数,再加1是在后16bit得到商,
小于时,保持不变接着移位相当于商补0.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/522335
推荐阅读
相关标签
  

闽ICP备14008679号