2.一位全加器

1.定义

实现两个二进制数相加

2.真值表


3.逻辑表达式

C_{i}=x_{i} y_{i}  +x_{i} c_{i-1} +y_{i} c_{i-1}

S_{i}=x_{i} \oplus\ y_{i}    \oplus  c_{i-1}

4.verilog 程序

4.1 数据流描述方式

module add_full(

x,y,c,sum,count

input x,y,c;

output sum,count;

wire S1,T1,T2,T3;

assign S1=x^y;

assign sum=S1^c;

assign T1=x&y;

assign T2=x&c;

assign T3=y&c;

assign count=T1|T2|T3;

endmodule

4.2门级描述方式

module add_full(

x,y,c,sum,count

input x,y,c;

output sum,count;

wire S1,T1,T2,T3;

xor x1(S1,x,y);#先异或输入下xy,S1=x\oplus y

xor x2(sum,S1,c);#sum=S1\oplus c,完成和的逻辑表达式

and a1(T1,x,y);

and a2(T2,x,c);

and a3(T3,c,y);

or o1(count,T1,T2,T3);

endmodule

4.3 行为描述方式

module add_full(

x,y,c,sum,count

input x,y,c;

output sum,count;

reg T1,T2,T3;

reg count,sum;#默认一位

always@(x or y or c)#当输入有变化时执行

begin

        sum=x^y^c;

        T1=x&y;

        T2=x&c;

        T3=y&c;

        count=T1|T2|T3;

end

endmodule

5 RTL 逻辑电路图


逻辑图

6.仿真

6.1 testbench

`timescale 1ns / 1ps


module sim_add_full(

    );

reg Ain,Bin,Cin;

reg clk;

wire sum,count;

initial

begin

    #1

    Ain=0;

    Bin=0;

    Cin=0;

    clk=0;

end

always #5 clk=~clk;

always@(posedge clk)

    begin

        Ain={$random}%2;

        Bin={$random}%2;

        Cin={$random}%2;

    end

add_full a1(Ain,Bin,Cin,sum,count);

endmodule

6.2 仿真图


6.1仿真图
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。