`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 ); reg [3:0] C; reg [3:0] G; reg [3:0] P; reg [3:0] rS; integer i; always @(*)begin for(i=0;i<4;i=i+1)begin G[i]=A_in[i] & B_in[i]; P[i]=A_in[i] ^ B_in[i]; C[i]=i>0 ? (G[i] | P[i] & C[i-1]) : (G[i] | P[i] & C_1); rS[i]=i>0 ? (P[i] ^ C[i-1]) : P[i] ^C_1; end end assign S=rS; assign CO=C[3]; endmodule 注意点: 使用always语句因此CGPS需要定义为reg而不是wire,也因此最终结果需要执行assign S=rS; 题目要求使用门级语言,因此需要将乘法运算转化为与操作,加法运算转为或操作。 技巧在于i>0 ? (*):(*),有效解决了C[-1]的特殊情况 标签:wire,rS,4bit,VL12,1ns,assign,加法器,input,reg From: https://www.cnblogs.com/Wenz-Mouse/p/18360220