zoukankan      html  css  js  c++  java
  • 32位除法器的verilog语言实现

    32位除法器verilog语言实现的原理

          对于32位的无符号数除法,被除数a除以除数b,他们的商和余数一定不会超过32位,首先将a转换成高32位为0,低32位为a的temp_a,再将b转换成高32位为b,低32位为0的temp_b。在每个周期开始前,先将temp_a左移一位,末尾补0,然后与b相比较看是否大于b,若大于b,则temp_a=temp_a-temp_b+1,否则继续往下执行。上面的移位操作、比较和减法要执行32次,执行完成后得到的temp_a的高32位为两数a和b相除的余数,低32位表示商。具体的算法流程可从下图的例子中得到体现

    用verilog代码实现如下:

    module div32(
            input clk,rst_n,
            input start,
            input [31:0] a, 
            input [31:0] b,
            output done,
            output [31:0] yshang,
            output [31:0] yyushu
            ); 
    reg[63:0] temp_a;
    reg[63:0] temp_b;
    reg[5:0] i;
    reg done_r;
    //------------------------------------------------
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n) i <= 6'd0;
        else if(start && i < 6'd33) i <= i+1'b1; 
        else i <= 6'd0;
    end
    //------------------------------------------------
    always @(posedge clk or negedge rst_n)
        if(!rst_n) done_r <= 1'b0;
        else if(i == 6'd32) done_r <= 1'b1;        
        else if(i == 6'd33) done_r <= 1'b0;        
    assign done = done_r;
    //------------------------------------------------
    always @ (posedge clk or negedge rst_n)begin
        if(!rst_n) begin
            temp_a <= 64’h0;
            temp_b <= 64’h0;
        end
        else if(start) begin
            if(i == 6'd0) begin
                temp_a = {32'h00000000,tempa};
                temp_b = {tempb,32'h00000000}; 
            end
            else begin
                temp_a = temp_a << 1;
          if(temp_a >= temp_b) temp_a = temp_a - temp_b + 1'b1;
          else temp_a = temp_a;
            end
         end
    end
     
    assign yshang = temp_a[31:0];
    assign yyushu = temp_a[63:32];
    endmodule

     

  • 相关阅读:
    windows下区块链,私有链搭建详细教程(图文详解)
    MySQL 5.7 mysqldump的Bug导致复制异常
    关于MySQL 5.6 DDL阻塞DML的问题!
    mysqldump 根据时间字段导出数据的问题
    MySQL undo redo
    InnoDB undo, redo,binlog,data什么时候写?
    MySQL master 宕机导致slave数据比master多的case
    Jboss配置自动重连数据库
    星爷001正式开始写blog啦
    本地及远程二级缓存
  • 原文地址:https://www.cnblogs.com/moranhuishou0315/p/11344725.html
Copyright © 2011-2022 走看看