全加器的设计
1. 半加器的设计
1)半加器1,布尔函数描述法
module h_adder(a,b,so,co)
input a,b;
output so,co;
assign so = a ^ b;
assign co = a & b;
endmodule
2)半加器2,基于case语句的类真值描述法
module h_adder(a,b,so,co)
input a,b;
output so,co;
reg so,co;
always @(a,b,co,so)
begin
case ({a,b})
0: begin so = 0;co = 1’b0 ;end
1: begin so = 1;co = 1’b0 ;end
2: begin so = 1;co = 1’b0 ;end
3: begin so = 0;co = 1’b1 ;end
endcase
end
endmodule
3)半加器3,直接用算符完成描述
module h_adder(a,b,so,co)
input a,b;
output so,co;
assign {co,so} = a + b;
endmodule
2.全加器和顶层文件设计
module f_adder(ain,bin,cin,cout,sum)
output cout,sum;
input ain,bin,cin;
wire e,d,f; //定义网线型变量用作内部元件之间的连线
h_adder u1(ain ,bin,e,d);//使用位置关联法例化
h_adder u2(.a(e),.so(sum),.b(cin),.co(f));//使用端口名关联法例化
or2a u3(.a(d),.b(f),.c(cout));//使用端口名关联法例化
endmodule
注意:一旦位置关联的例化语句确定后,被连接元件的源文件的的端口表的内的信号排列位置就不能变动。
3. 8位全加器描述
1)module ADDER8B(A,B,CIN,COUT,DOUT)
output [7:0] DOUT;
output COUT;
input [7:0] A,B;
input CIN;
assign DATA = A + B + CIN;
assign COUT = DATA[8]; //加位自动进入DATA[8]
assign DOUT = DATA[7:0];
endmodule
2)module ADDER8B(A,B,CIN,COUT,DOUT)
output [7:0] DOUT;
output COUT;
input [7:0] A,B;
input CIN;
assign {COUT,DOUT} DATA = A + B + CIN; //加位自动进入COUT
endmodule