您身边的网站建设专家
成功案例

【建站服务】三亚网站建设_企业网站制作公司_高端网站设计开发-三亚上往-域名申请

日期: 2022-09-21 03:10:08 浏览数:6


​

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。



三亚网站建设_企业网站制作公司_高端网站设计开发-三亚上往

网站建设.png

级例化


将单步计算的余数(信号 remainder)和原始被除数(信号 dividend)对应位的 1bit 数据重新拼接,作为新的单步被除数输入到下一级单步除法计算单元。

其中,被除数、除数、及商的数据信息也要在下一级运算单元中传递。

流水级模块例化完成除法的设计如下(文件名 divider_man.v):

实例

//parameter N means the actual width of dividend
//using 29/5=5...4
module    divider_man
    #(parameter N=5,
      parameter M=3,
      parameter N_ACT = M+N-1)
    (
      input                     clk,
      input                     rstn,

      input                     data_rdy ,  //数据使能
      input [N-1:0]             dividend,   //被除数
      input [M-1:0]             divisor,    //除数

      output                    res_rdy ,
      output [N_ACT-M:0]        merchant ,  //商位宽:N
      output [M-1:0]            remainder ); //最终余数

    wire [N_ACT-M-1:0]   dividend_t [N_ACT-M:0] ;
    wire [M-1:0]         divisor_t [N_ACT-M:0] ;
    wire [M-1:0]         remainder_t [N_ACT-M:0];
    wire [N_ACT-M:0]     rdy_t ;
    wire [N_ACT-M:0]     merchant_t [N_ACT-M:0] ;

    //初始化首个运算单元
    divider_cell      #(.N(N_ACT), .M(M))
       u_divider_step0
    ( .clk              (clk),
      .rstn             (rstn),
      .en               (data_rdy),
      //用被除数最高位 1bit 数据做第一次单步运算的被除数,高位补0
      .dividend         ({{(M){1'b0}}, dividend[N-1]}),
      .divisor          (divisor),                  
      .merchant_ci      ({(N_ACT-M+1){1'b0}}),   //商初始为0
      .dividend_ci      (dividend[N_ACT-M-1:0]), //原始被除数
      //output
      .dividend_kp      (dividend_t[N_ACT-M]),   //原始被除数信息传递
      .divisor_kp       (divisor_t[N_ACT-M]),    //原始除数信息传递
      .rdy              (rdy_t[N_ACT-M]),
      .merchant         (merchant_t[N_ACT-M]),   //第一次商结果
      .remainder        (remainder_t[N_ACT-M])   //第一次余数
      );

    genvar               i ;
    generate
        for(i=1; i<=N_ACT-M; i=i+1) begin: sqrt_stepx
            divider_cell      #(.N(N_ACT), .M(M))
              u_divider_step
              (.clk              (clk),
               .rstn             (rstn),
               .en               (rdy_t[N_ACT-M-i+1]),
               .dividend         ({remainder_t[N_ACT-M-i+1], dividend_t[N_ACT-M-i+1][N_ACT-M-i]}),   //余数与原始被除数单bit数据拼接
               .divisor          (divisor_t[N_ACT-M-i+1]),
               .merchant_ci      (merchant_t[N_ACT-M-i+1]),
               .dividend_ci      (dividend_t[N_ACT-M-i+1]),
               //output
               .divisor_kp       (divisor_t[N_ACT-M-i]),
               .dividend_kp      (dividend_t[N_ACT-M-i]),
               .rdy              (rdy_t[N_ACT-M-i]),
               .merchant         (merchant_t[N_ACT-M-i]),
               .remainder        (remainder_t[N_ACT-M-i])
              );
        end // block: sqrt_stepx
    endgenerate

    assign res_rdy       = rdy_t[0];
    assign merchant      = merchant_t[0];  //最后一次商结果作为最终的商
    assign remainder     = remainder_t[0]; //最后一次余数作为最终的余数

endmodule

testbench

ndmodule

testbench


取被除数位宽为 5,除数位宽为 3,testbench 中加入自校验,描述如下:


实例

`timescale 1ns/1ns


module test ;

    parameter    N = 5 ;

    parameter    M = 3 ;

    reg          clk;

    reg          rstn ;

    reg          data_rdy ;

    reg [N-1:0]  dividend ;

    reg [M-1:0]  divisor ;


    wire         res_rdy ;

    wire [N-1:0] merchant ;

    wire [M-1:0] remainder ;


    //clock

    always begin

        clk = 0 ; #5 ;

        clk = 1 ; #5 ;

    end


    //driver

    initial begin

        rstn      = 1'b0 ;

        #8 ;

        rstn      = 1'b1 ;


        #55 ;

        @(negedge clk ) ;

        data_rdy  = 1'b1 ;

                dividend  = 25;      divisor      = 5;

        #10 ;   dividend  = 16;      divisor      = 3;

        #10 ;   dividend  = 10;      divisor      = 4;

        #10 ;   dividend  = 15;      divisor      = 1;

        repeat(32)    #10   dividend   = dividend + 1 ;

        divisor      = 7;

        repeat(32)    #10   dividend   = dividend + 1 ;

        divisor      = 5;

        repeat(32)    #10   dividend   = dividend + 1 ;

        divisor      = 4;

        repeat(32)    #10   dividend   = dividend + 1 ;

        divisor      = 6;

        repeat(32)    #10   dividend   = dividend + 1 ;

    end


    //对输入延迟,便于数据结果同周期对比,完成自校验

    reg  [N-1:0]   dividend_ref [N-1:0];

    reg  [M-1:0]   divisor_ref [N-1:0];

    always @(posedge clk) begin

        dividend_ref[0] <= dividend ;

        divisor_ref[0]  <= divisor ;

    end


    genvar         i ;

    generate

        for(i=1; i<=N-1; i=i+1) begin

            always @(posedge clk) begin

                dividend_ref[i] <= dividend_ref[i-1];

                divisor_ref[i]  <= divisor_ref[i-1


三亚网站建设_企业网站制作公司_高端网站设计开发-三亚上往


上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


全国咨询热线:400-111-6878

地址:全国各地都有驻点商务

Copyright © 2021 通陆科技

网站建设:上往建站