超前进位加法器的流水线化

本文介绍了使用Verilog进行超前进位加法器的设计,通过计算G和P信号来提前处理进位,采用流水线技术提高运算速度。设计包括了G和P信号的计算、进位信号的生成、以及多级触发器的插入,以实现16位加法器的并行和串行结合运算。通过模块化设计,实现了不同层次的加法和进位计算,优化了电路延迟。

建议先看我的这篇文章超前进位加法器

思想:

超前进位的思想:通过计算G和P信号,来解决后面三个16bit模块的进位信号,因此可以把高位的三个16bit模块并行起来。
流水线的做法: 在关键路径上插触发器,尽量均衡各部分的延时。

具体设计:g和p信号的计算以及G(GX)和P(PX)信号的计算,与C_in无关,因此可以单独先算出来。 通过这些进位产生/传播信号计算各模块的C_in。然后就是把关键路径尽量均分,这里插入三级触发器。

架构图如下:

自己画的架构图,按照这个架构用verilog实现并仿真验证

verilog代码实现

module adder_nocarry( 
    input A,B,C_in,
    output S
    );
    assign S = A ^ B ^ C_in;
endmodule

module adder_16bit( //超前三位计算进位信号
    input [15:0]A,B,
    input [15:0]C,
    output [15:0]Y
);
    generate 
        genvar i;
        for(i=0;i<16;i=i+1)
        begin
            adder_nocarry a (A[i],B[i],C[i],Y[i]); 
        end
    endgenerate
endmodule

module Carry_signal_cal_mode(
    input [3:0]g,p,
    input C_in,
    output [3:0]C
);
    assign C[0] = g[0] | (p[0]&C_in);
    assign C[1] = g[1] | (p[1]&g[0]) | (p[0]&p[1]&C_in) ;
    assign C[2] = g[2] | (p[2]&g[1]) | (p[2]&p[1]&g[0]) | (p[2]&p[1]&p[0]&C_in);
    assign C[3] = g[3] | (p[3]&g[2]) | (p[3]&p[2]&g[1]) | (p[3]&p[2]&p[1]&g[0]) | (p[3]&p[2]&p[1]&p[0]&C_in) ;
endmodule

module Carry_signal_cal_mode_16bit(
    input [15:0]g,p,
    input [3:0]C_in,
    output [15:0]C
);
    generate 
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值