题解 | #4bit超前进位加法器电路#
4bit超前进位加法器电路
https://www.nowcoder.com/practice/4d5b6dc4bb2848039da2ee40f9738363
`timescale 1ns/1ns module lca_4( input [3:0] A_in , input [3:0] B_in , input C_1 , output wire CO , output wire [3:0] S ); wire [4:0] g,p,c; //产生信号,传输信号,内部进位 assign c[0] = C_1; assign p = A_in ^ B_in; assign g = A_in & B_in; assign c[1] = g[0] | (p[0] & c[0]); assign c[2] = g[1] | (p[1] & g[0]) | (p[1] & p[0] & c[0]); assign c[3] = g[2] | (p[2] & g[1]) | (p[2] & p[1] & g[0]) | (p[2] & p[1] & p[0] & c[0]); assign c[4] = g[3] | (p[3] & g[2]) | (p[3] & p[2] & g[1]) | (p[3] & p[2] & p[1] & g[0]) | (p[3] & p[2] & p[1] & p[0] & c[0]); assign S = p^c[3:0]; assign CO = c[4]; endmodule
首先对于一个全加器,其和信号s = A ^ B ^ C,进位信号为C = A&B | (A^B)&Ci。那么多位数Si = A ^ B ^ Ci-1,Ci = Ai&Bi | (Ai^Bi)&Ci-1。定义产生变量Gi=Ai&Bi。传输变量Pi=Ai^Bi。产生变量的意思是当A,B都为1是才会产生进位,传输信号是传输进位,这个解释有点抽象,但是带入式子中就很好理解了。如当Pi为1时,意味着Ai和Bi是相反的即Ai&Bi=0,Ai^Bi=1,那么,Ci = Ai&Bi | (Ai^Bi)&Ci-1就化简为Ci=Ci-1,即低位的进位被传输到高位了。然后要写几bit的超前进位加法器,就依次化简就能得到最后的进位计算式子。