ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

除法器电路设计

2021-12-28 16:05:29  阅读:157  来源: 互联网

标签:除法器 tmp end 16 电路设计 余数 15 reg


除法器电路的设计思路,列出数学计算的步骤即可进行类比推导(这里以27除5作为示例),分为以下4步:

  1. 取被除数的高几位数据,位宽需要与除数相同。
  2. 将被除数高位数据与除数作比较,若前者大于后者,则对应商为1。两者作差得到第一步余数。否则得0,将前者作为余数。
  3. 将上一步的余数与被除数剩余最高位1bit数据拼接成新的数据,再与除数作比较。可得新的商和余数。
  4. 重复步骤3,直到被除数最低位数据也参与计算。

以下是一个基于减法的除法器verilog代码。设16bit的A除以8bit的B,求出商与余数。

module division(
    input wire [15:0] A,
    input wire [7:0] B,
    output wire [15:0] result,
    output wire [15:0] odd
    );

reg [15:0] a_reg;
reg [15:0] b_reg;
reg [31:0] tmp_a;
reg [31:0] tmp_b;
integer i;

always@(*) begin
    a_reg = A;
    b_reg = B;
end

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

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

endmodule

 

对于16位的无符号除法运算,其商和余数不会超过16bit。因此tmp_a中的高16位为余数,低16位为商。

testbench代码如下:

`timescale 1ns/1ps
module tb_division();

reg clk;
reg [15:0] A;
reg [7:0] B;
wire [15:0] result;
wire [15:0] odd;

initial begin
    A = 0;
    B = 0;
    #100;
    A = 27;
    B = 5;    
end

division inst_division (.A(A), .B(B), .result(result), .odd(odd));

endmodule

 

modelsim仿真结果:

 

标签:除法器,tmp,end,16,电路设计,余数,15,reg
来源: https://www.cnblogs.com/Achilles7/p/15740917.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有