四位行波进位加法器的设计(vcs+verdi仿真)

四位行波进位加法器相当于四个全加器的级联

先设计全加器fa.v

module fa(a, b, ci, sum, cout);
input a, b, ci;
output sum, cout;
assign {cout, sum} = a + b + ci;
endmodule

四位加法器add4.v

module add4(a, b, ci, s, cout);
input [3:0] a, b;
input ci;
output cout;
output [3:0] s;
wire [3:1] co;

fa u1(a[0], b[0], ci, s[0], co[1]);
fa u2(a[1], b[1], co[1], s[1], co[2]);
fa u3(a[2], b[2], co[2], s[2], co[3]);
fa u4(a[3], b[3], co[3], s[3], cout);

endmodule

 add4tb.v

`timescale 1ns/1ns

module add4tb;
reg [3:0] a_test, b_test;
wire [3:0] sum_test;
reg cin_test;
wire cout_test;
reg [9:0] test;
integer error_count;

add4 u1( .a(a_test), .b(b_test), .ci(cin_test), .s(sum_test), .cout(cout_test) );

initial
begin
  error_count = 0;
`ifdef vcdplusdump
  $display("\n*** VCD+ file dump is turned on ***\n");
  $vcdpluson;
  #1000;
  $vcdplusoff;
`endif
`ifdef vcddump
  $display("\n*** VCD file dump is turned on ***\n");
  $dumpvars;
//  #1000;
//  $dumpoff;
`endif
`ifdef fsdbdump
  $display("\n*** fsdb file dump is turned on ***\n");
  $fsdbDumpfile("add4.fsdb");
  $fsdbDumpvars(0);
//  #1000
//  $fsdbDumpoff;
`endif
end

initial
begin
  for (test = 0; test <= 9'h1ff; test = test +1) begin
    cin_test = test[8];
    a_test = test[7:4];
    b_test = test[3:0];
    #50
    if ({cout_test, sum_test} !== (a_test + b_test + cin_test)) begin
      error_count = error_count + 1;
      if (error_count <= 10) begin
        $display("***ERROR at time = %0d ***", $time);
        $display("a = %h, b = %h, sum = %h;  cin = %h, cout = %h",
                  a_test, b_test, sum_test, cin_test, cout_test);
      end
      if (error_count == 10) begin
        $display("\n\nError count reached 10, subsequent error messages are suppressed");
        `ifdef vcdplusdump
          $vcdplusoff;
          $vcdplusdeltacycleoff;
          $vcdplusglitchoff;
        `endif
        `ifdef vcddump
          $dumpoff;
        `endif
        `ifdef fsdbdump
          $fsdbDumpoff;
        `endif
      end
    end
    #50;
  end
  if (error_count == 0)
    $display("*** Testbench Successfully Completed! ***");
  else begin
    $display("\n*********************************************");
    $display("*** Testbench completed with %0d errors ***",error_count);
    $display("*********************************************\n\n");
  end
  $finish;
end

endmodule

Verdi仿真结果 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Verilog行波进位加法器是一种使用Verilog语言编写的行波进位加法器行波进位加法器是将N个bit全加器串联起来,用于实现两个Nbit数的相加,其中进位是采用串行进位的方法。通过使用Verilog语言实现行波进位加法器,我们可以对其进行模拟和仿真,并进行功能验证和性能评估。这有助于了解行波进位加法器的原理和功能,并优化其性能以满足特定需求。在Verilog实现中,我们可以使用逻辑门和触发器等基本元件来构建行波进位加法器的电路结构,并通过输入和输出端口来表示输入数和输出结果。对于大位宽的超前进位加法器,虽然它在解决行波进位加法器进位依赖问题上更加有效,但其进位逻辑计算单元面积消耗较大。因此,在实际应用中,我们需要根据具体的设计需求来选择适合的进位加法器实现方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [各种加法器的比对分析与Verilog实现(1)](https://blog.csdn.net/Albert_yeager/article/details/129835819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [verilog学习心得之七--加法器](https://blog.csdn.net/u010668547/article/details/116612871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

via amiko

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值