VL12 4bit超前进位加法器电路

 

`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]的特殊情况
posted @ 2024-08-15 09:22  段星儿  阅读(18)  评论(0)    收藏  举报