1.定义
实现两个二进制数相加
2.真值表
3.逻辑表达式
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=xy
xor x2(sum,S1,c);#sum=S1c,完成和的逻辑表达式
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 仿真图