四位流水线乘法器(用加法器替代乘法器)

module cy4(
            clk     ,
            rst_n   ,
            vld_in  ,//输入有效指示信号
            x       ,
            y       ,
            p       ,//乘积结果
            vld_out  //输出有效指示信号    
);

input      clk                      ;
input      rst_n                    ;
input      vld_in                   ;//输入有效指示信号
input      x                        ;
input      y                        ;
output     p                        ; 
output     vld_out                  ;//输出有效指示信号

wire [3:0] x                        ;
wire [3:0] y                        ;
reg  [7:0] p                        ;
wire       vld_in                   ;
reg        vld_out                  ;
reg        vld_in_ff0               ;//缓存输入有效信号

wire [7:0] a0                       ;
wire [7:0] b0                       ;
wire [7:0] a1                       ;
wire [7:0] b1                       ;

reg  [7:0] tmp0                     ;
reg  [7:0] tmp1                     ;

assign a0 = x[0]?{4'b0,y}: 0        ;
assign b0 = x[1]?{3'b0,y,1'b0}: 0   ;

assign a1 = x[2]?{2'b0,y,2'b0} : 0  ;
assign b1 = x[3]?{1'b0,y,3'b0} : 0  ;

//将最终的和分为tmp0和tmp1两部分
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        tmp0 <= 0;
		tmp1 <= 0;
    end
    else if(vld_in) begin
        tmp0 <= a0 + b0 ;
		tmp1 <= a1 + b1;
    end
end

//tmp0和tmp1相加即为最终的结果
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        p <= 0;
    end
    else if(vld_in_ff0) begin
        p <= tmp0 + tmp1;
    end
end
//输入有效指示信号vld_in缓存到vld_in_ff0寄存器中
//加入vld_in_ff0中间寄存器符合流水线分布(即“对称性”)
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        vld_out    <= 0;
        vld_in_ff0<=0;
    end
    else  begin
        vld_in_ff0  <= vld_in;
        vld_out  <= vld_in_ff0;
    end
end
endmodule

在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值