IC设计(二)-verilog实现4bit全加器

写作说明:

写给新手,帮助新手快速上手verilog,能够实现快速的FPGA开发需求或者IC design需求。本账号后续会持续更新,旨在帮助新手快速上手IC设计或者人工智能、AI infra,新手想学习可以加关注~

相关链接:

IC设计(一)-verilog实现1bit全加器仿真-CSDN博客

设计代码:

IC设计(一)-verilog实现1bit全加器仿真-CSDN博客中,我们已经实现了一个1bit的全加器。最简单的方案是通过1bit全加器的例化,来拼接成4bit的全加器。(数字IC设计中,“搭积木”的思想非常重要,如何使用已有代码搭出复杂的电路是IC设计师的能力需求。)

代码如下:

`include "full_adder.v"
module full_adder_4bit(
    input wire [3:0] a,
    input wire [3:0] b,
    input wire ci,
    output wire [3:0] So,
    output wire [3:0] Co

);
    wire [3:0] Co_temp;
    //第一个例化模块一般格式有所差异,需要单独例化
    full_adder u_full_adder(
        .Ai(a[0]),
        .Bi(b[0]),
        .Ci(ci==1'd1?1'd1:1'd0),
        .So(So[0]),
        .Co(Co_temp[0])
    );
    //generate重复例化
    genvar i;
    generate
        for(i=1;i<=3;i=i+1) begin
            full_adder u_full_adder(
                .Ai(a[i]),
                .Bi(b[i]),
                .Ci(Co_temp[i-1]),
                .So(So[i]),
                .Co(Co_temp[i])
            );
        end
    endgenerate

    assign Co = Co_temp[3];
endmodule

其中full_adder.v是1bit的全加器设计文件。见IC设计(一)-verilog实现1bit全加器仿真-CSDN博客

测试(testbench)代码:

`timescale 1ns/1ns
`include "full_adder_4bit.v"
module full_adder_4bit_tb();
    reg [3:0] a;
    reg [3:0] b;
    reg ci;
    wire [3:0] So;
    wire [3:0] Co;

    full_adder_4bit u_full_adder_4it(
        .a(a),
        .b(b),
        .ci(1'b0),
        .So(So),
        .Co(Co)
    );

    initial begin
        a = 4'd5;
        b = 4'd2;
        #10
        a = 4'd10;
        b = 4'd8;
    end

    initial begin
        $dumpfile("full_adder_4bit.vcd");
        $dumpvars(0);
        #200 $finish;
    end
endmodule

vcd波形文件打开后,如下图所示:

可以看到,功能验证正确。(testbench采用了最简单的写法,方便新手理解,暂时不考虑覆盖率的问题。)

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值