8位加法器的流水线设计(2级流水、四级流水)

这篇具有很好参考价值的文章主要介绍了8位加法器的流水线设计(2级流水、四级流水)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

思考:流水线的设计是为了提高频率,在一个耗时比较长的组合逻辑中,加入寄存器,
可以将这个较长的组合逻辑分裂几份,从而提升主频,缺点是增加了寄存器的资源。
二级流水线的加法器的设计思想如下:
在第一个周期完成低四位的加法计算,使用一个四位加法器即可。在第二个周期在使用
一个四位加法器完成高四位的加法运算。因此到第二个周期结束才有计算结果。但是接下来
由于流水线的作用,每个周期都会出一个计算结果,需要注意的是两个8位加数从进去到
出来是经过两个时钟周期的。

二级流水

module  adder_8_2pip(
    input   wire    [7:0]   ina         ,
    input   wire    [7:0]   inb         ,
    input   wire            cin         ,
    input   wire            clk         ,
    
    output  reg     [7:0]   sum         ,
    output  reg             cout
);

reg     [3:0]       tempa       ;           //ina[7:4]寄存
reg     [3:0]       tempb       ;           //inb[7:4]寄存
reg     [3:0]       first_sum   ;           //低四位的和
reg                 first_cout  ;           //低四位的进位

always @(posedge clk) begin
    begin
        {first_cout, first_sum} <= ina[3:0] + inb[3:0] + cin;
        tempa <= ina[7:4];                   //ina的高四位寄存
        tempb <= inb[7:4];                   //inb的高四位寄存
    end
end

always @(posedge clk) begin
    begin
        {cout,sum[7:4]} <= tempa + tempb + first_cout;//高四位相加
        sum[3:0] <= first_sum;                        //第一周期的低四位和
    end
end

endmodule

testbench如下:

//author:   Zhouxingxing
//date:     2022/8/19
//function: 8位加法器的二级流水线实现

module  tb_adder_8_2pip;

reg     [7:0]   ina     ;
reg     [7:0]   inb     ;
reg             cin     ;
reg             clk     ;

wire    [7:0]   sum     ;
wire            cout    ;

adder_8_2pip u_adder_8_2pip(
    .ina    (ina)       ,
    .inb    (inb)       ,
    .cin    (cin)       ,
    .clk    (clk)       ,
    
    .sum    (sum)       ,
    .cout   (cout)
);

task run;
    @(posedge clk);
    ina = $random() % (2**8);
    inb = $random() % (2**8);
    cin = $random() % 2;
endtask

//产生时钟
initial begin
    clk = 1'b0;
end
always #10 clk = ~clk;

//产生激励
initial begin
    #50;
    repeat(50) begin
        run();
    end
end

endmodule

仿真波形如下,可以看出是在两个周期后出数据,之后每个周期都会出一个数据。
8位加法器的流水线设计(2级流水、四级流水)

四级流水

四级流水设计,只不过此时采用的是二位加法器,并且多加触发器来缓存中间数据。文章来源地址https://www.toymoban.com/news/detail-506552.html

//author:   Zhouxingxing
//date:     2022/8/19
//function: 8位加法器的四级流水线实现

module adder_8_4pip(
    input   wire    [7:0]   ina     ,
    input   wire    [7:0]   inb     ,
    input   wire            cin     ,
    input   wire            clk     ,
    
    output  reg     [7:0]   sum     ,
    output  reg             cout
);

reg     [7:0]       tempa       ;
reg     [7:0]       tempb       ;
reg                 tempcin     ;
reg                 first_cout  ;
reg                 second_cout ;
reg                 third_cout  ;
reg     [1:0]       first_sum   ;
reg     [5:0]       first_ina   ;
reg     [5:0]       first_inb   ;
reg     [3:0]       second_sum  ;
reg     [3:0]       second_ina  ;
reg     [3:0]       second_inb  ;
reg     [5:0]       third_sum   ;
reg     [1:0]       third_ina   ;
reg     [1:0]       third_inb   ;

//输入数据缓存
always @(posedge clk) begin
    begin
        tempa <= ina;
        tempb <= inb;
        tempcin <= cin;
    end
end

//第一级 对低两位相加 将未参加计算的数据缓存
always @(posedge clk) begin
    begin
        {first_cout, first_sum} <= tempa[1:0] + tempb[1:0] + tempcin;
        first_ina <= tempa[7:2];
        first_inb <= tempb[7:2];
    end
end

//第二级 对第三位和第四位相加 将未参加计算的数据缓存
always @(posedge clk) begin
    begin
        {second_cout, second_sum} = {first_ina[1:0] + first_inb[1:0] + first_cout, first_sum};
        second_ina <= first_ina[5:2];
        second_inb <= first_inb[5:2];
    end
end

//第三级 对第五位和第六位相加 将未参加计算的数据缓存
always @(posedge clk) begin
    begin
        {third_cout, third_sum} <= {second_ina[1:0] + second_inb[1:0] + second_cout, second_sum};
        third_ina <= second_ina[3:2];
        third_inb <= second_inb[3:2];
    end
end

//第四级 对第六位和第七位相加 将未参加计算的数据缓存
always @(posedge clk) begin
    begin
        {cout,sum} = {third_ina[1:0] + third_inb[1:0] + third_cout, third_sum};
    end
end

endmodule

到了这里,关于8位加法器的流水线设计(2级流水、四级流水)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA实验一:层次法设计组合电路(加法器)

    目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果及分析

    2024年02月12日
    浏览(30)
  • 计算机组成原理 实验一 四位加法器设计

    实验开发平台:武汉华亨科技公司的EDA/SOPC实验开发平台由NIOSII—EP3C40核心板、EDA/SOPC系统板和HH-SEXT-1扩充子板组成。  芯片编号:EP3C40F780C8  软件:Quartus II 64-Bit 13.1.0.162  启动Quartus 13.1 创建子项目full_adder,芯片选择EP3C40F780C8   新建Verilog HDL File,输入一位全加器代码并保

    2024年02月07日
    浏览(28)
  • Verilog数字系统设计——带进位的8位加法器

    试分别使用门级原语和always 语句设计带进位的8位加法器,要求编制测试模块对实现的逻辑功能进行完整的测试; 使用门级原语设计时注意先在草稿上做出该加法器的门级设计; 如有余力可以进一步使用门级原语设计出带超前进位链的8位加法器(期末有加分); 实验提交

    2024年02月15日
    浏览(31)
  • 【基于FPGA的芯片设计】4位超前进位加法器

    目录 实验原理 源代码 仿真代码 管脚配置 实验板卡:xc7a100tlc sg324-2L,共20个开关         顶层模块 超前进位模块 全加器模块 注:vivado版本为2018版,板卡为xc7a100tlcsg324-2L

    2024年02月06日
    浏览(31)
  • 数字逻辑---头歌实训作业---加法器设计(Logisim)

    第1关:半加器设计 如有任何不解或者想要答案代码,可在评论区喊话我哦,希望我的答案对你有帮助,点个关注再走吧,感谢!!! 本关卡最终答案:   任务描述 本关任务:利用在Logisim中的“组合逻辑分析”工具自动生成半加器电路。 相关知识 半加器电路是指对两个输

    2023年04月13日
    浏览(32)
  • Verilog设计4位CLA加法器电路,并仿真测试

    使用Quartus+modelsim完成本次设计 对于超前进位加法器 (CLA)加法器,它不同于普通加法器。如果对于两个1024位的数字进行相加,那么普通的串行加法器因为只有算出 C x C_{x} C x ​ 才能继续计算 C x + 1 C_{x+1} C x + 1 ​ ,这会导致整体的效率非常低。如果使用超前进位加法器,那

    2024年02月04日
    浏览(36)
  • 头歌计算机组成原理实验—运算器设计(4)第4关:16位快速加法器设计

    实验目的 帮助学生理解成组进位产生函数,成组进位传递函数的概念,熟悉 Logisim 平台子电路的概念,能利用前述实验封装好的4位先行进位子电路以及4位快速加法器子电路构建16位、32位、64位快速加法器,并能利用相关知识分析对应电路的时间延迟,理解电路并行的概念。

    2024年02月05日
    浏览(60)
  • 计算机组成原理--基于Logisim的4位并行加法器实验的应用(超详细/设计/实验/作业/练习)

    掌握快速加法器中先行进位的原理,能利用相关知识设计4位先行进位电路,并利用设计的4位先行进位电路构造4位快速加法器,能分析对应电路的时间延迟。 1.软件:Logisim软件、JAVA环境 2.硬件:计算机Windows 10 利用已设计好的四位先行进位电路构造四位快速加法器,其引脚定

    2024年02月02日
    浏览(86)
  • 加法器、半加器、全加器、超前进位加法器

    简单来讲,半加器不考虑低位进位来的 进位值 ,只有两个输入,两个输出。由一个与门和异或门构成. 真值表: 输入 输出 A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 半加器不考虑低位向本位的[进位],因此它不属于[时序逻辑电路],有两个输入端和两个输出。 设加数(输入端)为A、B

    2024年02月02日
    浏览(41)
  • Verilog流水线设计——Pipeline

    在工程师实际开发过程中,可能会经常遇到这样的需求:数据从数据源端不断地持续输入FPGA,FPGA需要对数据进行处理,最后将处理好的数据输出至客户端。 在数据处理过程中,可能需要一系列的处理步骤。比如常规的信号进行处理步骤有(这里的处理步骤只是举个例子):

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包