收藏此站 联系我们 网站
当前位置:首页» 公司新闻 » 【建站服务】高端!网站定制/设计/优化/二次开发/制作/搭建-三亚高端网站建设-域名申请

【建站服务】高端!网站定制/设计/优化/二次开发/制作/搭建-三亚高端网站建设-域名申请

作者: 风兰 . 阅读量: 10 . 发表时间:2022-09-21 03:20:37

网站建设

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


高端!网站定制/设计/优化/二次开发/制作/搭建-三亚高端网站建设

网站建设.png


[N-1:0]   mult1_ref [M-1:0];

    reg  [M-1:0]   mult2_ref [M-1:0];

    always @(posedge clk) begin

        mult1_ref[0] <= mult1 ;

        mult2_ref[0] <= mult2 ;

    end


    genvar         i ;

    generate

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

            always @(posedge clk) begin

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

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

            end

        end

    endgenerate

   

    //自校验

    reg  error_flag ;

    always @(posedge clk) begin

        # 1 ;

        if (mult1_ref[M-1] * mult2_ref[M-1] != res && res_rdy) begin

            error_flag <= 1'b1 ;

        end

        else begin

            error_flag <= 1'b0 ;

        end

    end


    //module instantiation

    mult_man  #(.N(N), .M(M))

     u_mult

     (

      .clk              (clk),

      .rstn             (rstn),

      .data_rdy         (data_rdy),

      .mult1            (mult1),

      .mult2            (mult2),

      .res_rdy          (res_rdy),

      .res              (res));

仿真结果


前几十个时钟周期的仿真结果如下。


由图可知,仿真结果判断信号 error_flag 一直为 0,表示乘法设计正确。


数据在时钟驱动下不断串行输入,乘法输出结果延迟了 4 个时钟周期后,也源源不断的在每个时钟下无延时输出,完成了流水线式的工作。




相对于一般不采用流水线的乘法器,乘法计算效率有了很大的改善。


但是,流水线式乘法器使用的寄存器资源也大约是之前不采用流水线式的 4 倍。


所以,一个数字设计,是否采用流水线设计,需要从资源和效率两方面进行权衡。


除法器原理(定点)

和十进制除法类似,计算 27 除以 5 的过程如下所示:




除法运算过程如下:


(1) 取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。

(2) 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。

(3) 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。

(4) 重复过程 (3),直到被除数最低位数据也参与计算。

需要说明的是,商的位宽应该与被除数保持一致,因为除数有可能为1。所以上述手动计算除法的实例中,第一步做比较时,应该取数字 27 最高位 1 (3'b001) 与 3'b101 做比较。 根据此计算过程,设计位宽可配置的流水线式除法器,流水延迟周期个数与被除数位宽一致。


除法器设计

单步运算设计


单步除法计算时,单步被除数位宽(信号 dividend)需比原始除数(信号 divisor)位宽多 1bit 才不至于溢出。


为了便于流水,输出端需要有寄存器来存储原始的除数(信号 divisor 和 divisor_kp)和被除数信息(信号 dividend_ci 和 dividend_kp)。


单步的运算结果就是得到新的 1bit 商数据(信号 merchant)和余数(信号 remainder)。


为了得到最后的除法结果,新的 1bit 商数据(信号 merchant)还需要与上一周期的商结果(merchant_ci)进行移位累加。


单步运算单元设计如下(文件名 divider_cell.v):


实例

// parameter M means the actual width of divisor

module    divider_cell

    #(parameter N=5,

      parameter M=3)

    (

      input                     clk,

      input                     rstn,

      input                     en,


      input [M:0]               dividend,

      input [M-1:0]             divisor,

      input [N-M:0]             merchant_ci , //上一级输出的商

      input [N-M-1:0]           dividend_ci , //原始除数


      output reg [N-M-1:0]      dividend_kp,  //原始被除数信息

      output reg [M-1:0]        divisor_kp,   //原始除数信息

      output reg                rdy ,

      output reg [N-M:0]        merchant ,  //运算单元输出商

      output reg [M-1:0]        remainder   //运算单元输出余数

    );


    always @(posedge clk or negedge rstn) begin

        if (!rstn) begin

            rdy            <= 'b0 ;

            merchant       <= 'b0 ;

            remainder      <= 'b0 ;

            divisor_kp     <= 'b0 ;

            dividend_kp    <= 'b0 ;

        end

        else if (en) begin

            rdy            <= 1'b1 ;

            divisor_kp     <= divisor ;  //原始除数保持不变

            dividend_kp    <= dividend_ci ;  //原始被除数传递

            if (dividend >= {1'b0, divisor}) begin

                merchant    <= (merchant_ci<<1) + 1'b1 ; //商为1

                remainder   <= dividend - {1'b0, divisor} ; //求余

            end

            else begin

                merchant    <= merchant_ci<<1 ;  //商为0

                remainder   <= dividend ;        //余数不变

            end

        end // if (en)

        else begin

            rdy            <= 'b0 ;

            merchant       <= 'b0 ;

            remainder      <= 'b0 ;

            divisor_kp     <= 'b0 ;

            dividend_kp    <= 'b0 ;

        end

    end


endmodule

流水级例化


将单步计算的余数(信号 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,



高端!网站定制/设计/优化/二次开发/制作/搭建-三亚高端网站建设


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

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


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务