专栏前言
本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网
// 对于半加器,只有输入a,b,输出和进位表示为:
// S=a^b; ①
// C=a&b; ②
// 全加器,在a,b的基础上增加了进位ci输入:
// S=a^b^ci; ③
// C=a&b+ci&(a^b);④
// 先将全加器中的a,b放入半加器中例化,将输入分别代入①②得到:
// S1=a^b; ⑤
// C1=a&b; ⑥
// 接下来将S1和Ci放入半加器进行例化,将输入分别代入①②得到:
// S2=S1^ci=a^b^ci; ⑦
// C2=S1&ci=(a^b)&ci; ⑧
// ⑦⑧为例化两次的输出,③④是真正全加器的输出,③和⑦完全相等,因此例化两次后的输出可以作为全加器的输出;
// ⑧是全加器④的后半部分,还需要加上⑥,才组成一个完整的全加器进位输出,这就是为什么最后C需要把前两次的进位结果或在一起;
`timescale 1ns/1ns
module add_half(
input A ,
input B ,
output wire S ,
output wire C
);
assign S = A ^ B;
assign C = A & B;
endmodule
/***************************************************************/
module add_full(
input A ,
input B ,
input Ci ,
output wire S ,
output wire Co
);
wire S1, C1, S2, C2 ;
add_half u1(.A(A), .B(B), .S(S1), .C(C1)) ;
add_half u2(.A(S1), .B(Ci), .S(S2), .C(C2)) ;
assign S = S2 ;
assign Co = C1 | C2 ;
endmodule