实验一:四位全加器的RTL设计

    技术2022-07-11  79

    0.前言

    为了熟悉整个数字IC设计流程,以知识点+实验的方式记录。 四位全加器的写法有很多种,按照FPGA的设计方法,可以直接调用一个四位的加法器;但数字IC基于标准cell的设计,为了速度与面积的trade off,以及后端布线方便,本实验采用模块调用的写法。

    1.设计代码

    module adder_4bits( input [3:0] num1, input [3:0] num2, output cout, output [3:0] sum ); wire cout_0; wire cout_1; wire cout_2; adder_1bit adder0 ( .num1 ( num1[0] ), .num2 ( num2[0] ), .cin ( 1'b0 ), .cout ( cout_0 ), .sum ( sum[0] ) ); adder_1bit adder1 ( .num1 ( num1[1] ), .num2 ( num2[1] ), .cin ( cout_0 ), .cout ( cout_1 ), .sum ( sum[1] ) ); adder_1bit adder2 ( .num1 ( num1[2] ), .num2 ( num2[2] ), .cin ( cout_1 ), .cout ( cout_2 ), .sum ( sum[2] ) ); adder_1bit adder3 ( .num1 ( num1[3] ), .num2 ( num2[3] ), .cin ( cout_2 ), .cout ( cout ), .sum ( sum[3] ) ); endmodule module adder_1bit( input num1 , input num2 , input cin , output cout , output sum ); assign {cout,sum}=num1+num2+cin; endmodule

    2.验证代码

    `timescale 1ns/1ps module test_tb(); reg clk_1 ; reg clk_16 ; reg [3:0] num1 ; reg [3:0] num2 ; wire cout ; wire [3:0] sum ; //instance adder_4bits adder ( .num1 ( num1 ), .num2 ( num2 ), .cout ( cout ), .sum ( sum ) ); //generate clk always begin forever #10 clk_1=~clk_1; end always begin forever #160 clk_16=~clk_16; end //add driven by clk always@(clk_1) begin num1=num1+4'b0001; end always@(clk_16) begin num2=num2+4'b0001; end initial begin //test begin clk_1=0; clk_16=0; num1=4'b0000; num2=4'b0000; #20000; $finish; end endmodule
    Processed: 0.012, SQL: 9