FPGA project : full_adder

 

module full_adder(
    input         wire        data_1 ,
    input         wire        data_2 ,
    input         wire        cin_1  ,

    output        wire        count  ,
    output        wire        sum             
);

    wire                      count_r_1 ;
    wire                      sum_r_1   ;
half_adder half_adder_insert_1 (
    .data_1                 ( data_1    ) ,
    .data_2                 ( data_2    ) ,
    .count                  ( count_r_1 ) ,
    .sum                    ( sum_r_1   )
);

    wire                      count_r_2 ;
half_adder half_adder_insert_2 (
    .data_1                 ( sum_r_1   ) ,
    .data_2                 ( cin_1     ) ,
    .count                  ( count_r_2 ) ,
    .sum                    ( sum       )
);

    assign count = count_r_1 || count_r_2 ;

endmodule

module half_adder(
    input        wire       data_1      ,
    input        wire       data_2      ,
    output       wire       count       ,
    output       wire       sum      
);

    assign { count, sum } = data_1 + data_2 ;
    
endmodule
`timescale 1ns/1ps
module test();
    reg           data_1_tb  ;
    reg           data_2_tb  ;
    reg           cin_1_tb   ;

    wire          count_tb   ;
    wire          sum_tb     ;

full_adder full_adder_insert(
    .data_1     ( data_1_tb) ,
    .data_2     ( data_2_tb) ,
    .cin_1      ( cin_1_tb ) ,

    .count      ( count_tb ) ,
    .sum        ( sum_tb   )             
);

    parameter CYCLE = 20 ;

    initial begin
        data_1_tb <= 1'b0 ;
        data_2_tb <= 1'b0 ;
        cin_1_tb  <= 1'b0 ;
        #( CYCLE * 1000 ) ;
        $stop ;
    end

    always #( CYCLE * 5 ) data_1_tb <= ($random) % 2 ;
    always #( CYCLE * 5 ) data_2_tb <= ($random) % 2 ;
    always #( CYCLE * 5 ) cin_1_tb  <= ($random) % 2 ;

    initial begin
        $timeformat(-9, 0, "ns", 6) ;
        $monitor("@time%t: data_1_tb=%b, data_2_tb=%b, cin_1_tb=%b, count_tb=%b, sum=%b ",$time, data_1_tb, data_2_tb, cin_1_tb, count_tb, sum_tb) ;
    end

endmodule

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值