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

【建站服务】专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-三亚上往建站-域名申请

日期: 2022-09-21 03:17:13 浏览数:3


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



专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-三亚上往建站

网站建设.png

乘法执行过程的中间状态进行保存,以便流水工作,设计代码如下。

单次累加计算过程的代码文件如下(mult_cell.v ):

实例

module    mult_cell
    #(parameter N=4,
      parameter M=4)
    (
      input                     clk,
      input                     rstn,
      input                     en,
      input [M+N-1:0]           mult1,      //被乘数
      input [M-1:0]             mult2,      //乘数
      input [M+N-1:0]           mult1_acci, //上次累加结果

      output reg [M+N-1:0]      mult1_o,     //被乘数移位后保存值
      output reg [M-1:0]        mult2_shift, //乘数移位后保存值
      output reg [N+M-1:0]      mult1_acco,  //当前累加结果
      output reg                rdy );

    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            rdy            <= 'b0 ;
            mult1_o        <= 'b0 ;
            mult1_acco     <= 'b0 ;
            mult2_shift    <= 'b0 ;
        end
        else if (en) begin
            rdy            <= 1'b1 ;
            mult2_shift    <= mult2 >> 1 ;
            mult1_o        <= mult1 << 1 ;
            if (mult2[0]) begin
                //乘数对应位为1则累加
                mult1_acco  <= mult1_acci + mult1 ;  
            end
            else begin
                mult1_acco  <= mult1_acci ; //乘数对应位为1则保持
            end
        end
        else begin
            rdy            <= 'b0 ;
            mult1_o        <= 'b0 ;
            mult1_acco     <= 'b0 ;
            mult2_shift    <= 'b0 ;
        end
    end

endmodule

顶层例化

多次模块例化完成多次累加,代码文件如下(mult_man.v ):

实例

module    mult_man
    #(parameter N=4,
      parameter M=4)
    (
      input                     clk,
      input                     rstn,
      input                     data_rdy ,
      input [N-1:0]             mult1,
      input [M-1:0]             mult2,

      output                    res_rdy ,
      output [N+M-1:0]          res );

    wire [N+M-1:0]       mult1_t [M-1:0] ;
    wire [M-1:0]         mult2_t [M-1:0] ;
    wire [N+M-1:0]       mult1_acc_t [M-1:0] ;
    wire [M-1:0]         rdy_t ;

    //第一次例化相当于初始化,不能用 generate 语句
    mult_cell      #(.N(N), .M(M))
    u_mult_step0
    (
      .clk              (clk),
      .rstn             (rstn),
      .en               (data_rdy),
      .mult1            ({{(M){1'b0}}, mult1}),
      .mult2            (mult2),
      .mult1_acci       ({(N+M){1'b0}}),
      //output
      .mult1_acco       (mult1_acc_t[0]),

t_step0

    (

      .clk              (clk),

      .rstn             (rstn),

      .en               (data_rdy),

      .mult1            ({{(M){1'b0}}, mult1}),

      .mult2            (mult2),

      .mult1_acci       ({(N+M){1'b0}}),

      //output

      .mult1_acco       (mult1_acc_t[0]),

      .mult2_shift      (mult2_t[0]),

      .mult1_o          (mult1_t[0]),

      .rdy              (rdy_t[0]) );


    //多次模块例化,用 generate 语句

    genvar               i ;

    generate

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

            mult_cell      #(.N(N), .M(M))

            u_mult_step

            (

              .clk              (clk),

              .rstn             (rstn),

              .en               (rdy_t[i-1]),

              .mult1            (mult1_t[i-1]),

              .mult2            (mult2_t[i-1]),

              //上一次累加结果作为下一次累加输入

              .mult1_acci       (mult1_acc_t[i-1]),

              //output

              .mult1_acco       (mult1_acc_t[i]),                                      

              .mult1_o          (mult1_t[i]),  //被乘数移位状态传递

              .mult2_shift      (mult2_t[i]),  //乘数移位状态传递

              .rdy              (rdy_t[i]) );

        end

    endgenerate


    assign res_rdy       = rdy_t[M-1];

    assign res           = mult1_acc_t[M-1];


endmodule

testbench


将下述仿真描述添加到非流水乘法器设计例子的 testbench 中,即可得到流水式乘法运算的仿真结果。


2 路数据为不间断串行输入,且带有自校验模块,可自动判断乘法运算结果的正确性。


实例

    reg          data_rdy ;

    reg [N-1:0]  mult1 ;

    reg [M-1:0]  mult2 ;

    wire                 res_rdy ;

    wire [N+M-1:0]       res ;


    //driver

    initial begin

        #55 ;

        @(negedge clk ) ;

        data_rdy  = 1'b1 ;

        mult1  = 25;      mult2      = 5;

        #10 ;      mult1  = 16;      mult2      = 10;

        #10 ;      mult1  = 10;      mult2      = 4;

        #10 ;      mult1  = 15;      mult2      = 7;

        mult2      = 7;   repeat(32)    #10   mult1   = mult1 + 1 ;

        mult2      = 1;   repeat(32)    #10   mult1   = mult1 + 1 ;

        mult2      = 15;  repeat(32)    #10   mult1   = mult1 + 1 ;

        mult2      = 3;   repeat(32)    #10   mult1   = mult1 + 1 ;

        mult2      = 11;  repeat(32)    #10   mult1   = mult1 + 1 ;

        mult2      = 4;   repeat(32)    #10   mult1   = mult1 + 1 ;

        mult2      = 9;   repeat(32)    #10   mult1   = mult1 + 1 ;

    end


    //对输入数据进行移位,方便后续校验

    reg  [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];



专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-三亚上往建站


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

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


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

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

Copyright © 2021 通陆科技

网站建设上往建站