天天看点

16位计数器之元件例化的学习

16位全加器

         通过该实验,学习元件例化。

1个16位全加器由4个4位全加器构成;

1个4位全加器由4个1位全加器构成;

1位全加器由两个半加器加上一个或门构成;

一个半加器由门级电路构成。

如下图:

16位计数器之元件例化的学习
16位计数器之元件例化的学习
16位计数器之元件例化的学习

顶层文件:

16位计数器之元件例化的学习

第二层:1个16位全加器由4个4位全加器构成;

16位计数器之元件例化的学习

第三层:1个4位全加器由4个1位全加器构成;

16位计数器之元件例化的学习

第四层:1位全加器由两个半加器加上一个或门构成;

16位计数器之元件例化的学习

第五层:一个半加器由门级电路构成

a

b

sum

c_out

1

门级电路如下:

16位计数器之元件例化的学习

代码部分:

//16为全加器

//顶层文件为16为全加器

module add_full_16(a,b,c_in,sum,c_out);

    input

[15:0]a,b;

    input c_in;

    output

[15:0]sum;

    output c_out;

    wire m0_c_out,m1_c_out,m2_c_out;

    add_full_4 m0(.a(a[3:0]),.b(b[3:0]),.c_in(c_in),.sum(sum[3:0]),.c_out(m0_c_out));

    add_full_4 m1(.a(a[7:4]),.b(b[7:4]),.c_in(m0_c_out),.sum(sum[7:4]),.c_out(m1_c_out));

    add_full_4 m2(.a(a[11:8]),.b(b[11:8]),.c_in(m1_c_out),.sum(sum[11:8]),.c_out(m2_c_out));

    add_full_4 m3(.a(a[15:12]),.b(b[15:12]),.c_in(m2_c_out),.sum(sum[15:12]),.c_out(c_out));

endmodule

第二层:

//4位全加器,4个4为全加器构成一个16位的全加器

module add_full_4(a,b,c_in,sum,c_out);

[3:0]a,b;

[3:0]sum;

    wire b0_c_out,b1_c_out,b2_c_out;

    add_full b0(.a(a[0]),.b(b[0]),.c_in(c_in),.sum(sum[0]),.c_out(b0_c_out));

    add_full b1(.a(a[1]),.b(b[1]),.c_in(b0_c_out),.sum(sum[1]),.c_out(b1_c_out));

    add_full b2(.a(a[2]),.b(b[2]),.c_in(b1_c_out),.sum(sum[2]),.c_out(b2_c_out));

    add_full b3(.a(a[3]),.b(b[3]),.c_in(b2_c_out),.sum(sum[3]),.c_out(c_out));

第三层:

//1位全加器

//4个1位全加器构成一个4位全加器

module add_full(a,b,c_in,sum,c_out);

    input a,b;

    input c_in;

    output sum;

    wire h0_sum,h0_c_out,h1_c_out;

    add_half h0(.a(a),.b(b),.sum(h0_sum),.c_out(h0_c_out));

    add_half h1(.a(c_in),.b(h0_sum),.sum(sum),.c_out(h1_c_out));

    assign c_out

= h0_c_out | h1_c_out;

第四层:

//半加器

//两个半加器加上一个或门构成1位全加器

module add_half(a,b,sum,c_out);

    and u0(c_out

,a ,b);

    xor u1(sum

前仿真代码:

`timescale

1ns/1ns

module add_full_16_tb;

    reg

    reg c_in;

    wire

    wire c_out;

    add_full_16 add_full_16(.a(a),.b(b),.sum(sum),.c_in(c_in),.c_out(c_out));

    integer i;

    initial

begin

        a =

0;b =0;c_in

=0;

        forever

            for(i=0;i<65536;i=i+1)begin

                #10 a

= i;b

= i;c_in

= 0;

= 1;

            end

        end

    end

仿真图:

16位计数器之元件例化的学习

继续阅读