题解思路

1、确定题目要求

一级加法器进位信号如下

这里‘+’ ‘·’符号不是‘加’和‘乘’,是‘或’和 ‘与’


4级可以表示为如下,这里P和G是传播信号和生成信号:


因此,应该得到两个子模块:一位运算和四位逻辑


在下面模块中 f为输出的Ci+1  g为输入Gi  P为Pi  C_in为Ci

//一位加法器

module Add1

(

              input a,

              input b,

              input C_in,

              output f,

              output g,

              output p

              );

assign f=a^b^C_in;

assign g=a&b;

assign p=a|b;

endmodule


//4位CLA部件

module CLA_4(

              input [3:0]P,

              input [3:0]G,

              input C_in,

              output [4:1]Ci,

              output Gm,

              output Pm

       );

assign Ci[1]=G[0]|P[0]&C_in;

assign Ci[2]=G[1]|P[1]&G[0]|P[1]&P[0]&C_in;

assign Ci[3]=G[2]|P[2]&G[1]|P[2]&P[1]&G[0]|P[2]&P[1]&P[0]&C_in;

assign Ci[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_in;


assign Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];

assign Pm=P[3]&P[2]&P[1]&P[0];

endmodule


第一步是CLA_4通过输入的数值,一次性算出四个加法器的进位。第二步,由于已经确定了每位的进位数值,ADD1分别例化四次,对四位同时进行加法。


2、写出v代码


module huawei8//四位超前进位加法器

(

       input wire [3:0]A,

       input wire [3:0]B,

       output wire [4:0]OUT

);

       wire [3:0] G;

       wire [3:0] P;

       wire [3:0] F;

       wire [4:1] C;

 Add1 u1

 (    .a(A[0]),

       .b(B[0]),

       .C_in(1'b0),

       .f(F[0]),

       .g(G[0]),

       .p(P[0])

 );

  Add1 u2

 (    .a(A[1]),

       .b(B[1]),

       .C_in(C[1]),

       .f(F[1]),

       .g(G[1]),

       .p(P[1])

 );

   Add1 u3

 (    .a(A[2]),

       .b(B[2]),

       .C_in(C[2]),

       .f(F[2]),

       .g(G[2]),

       .p(P[2])

 );

   Add1 u4

 (    .a(A[3]),

       .b(B[3]),

       .C_in(C[3]),

       .f(F[3]),

       .g(G[3]),

       .p(P[3])

 );

 CLA_4 uut

 (

       .P(P),

       .G(G),

       .C_in(1'b0),

       .Ci(C),

       .Gm(),

       .Pm()

 );

  assign OUT={C[4],F};

 endmodule


仿真结果如下:


`timescale 1ns/1ns



module huawei8//四位超前进位加法器
(
	input wire [3:0]A,
	input wire [3:0]B,
	output wire [4:0]OUT
);
	wire [3:0] G;
	wire [3:0] P;
	wire [3:0] F;
	wire [4:1] C;
 Add1 u1
 (	.a(A[0]),
	.b(B[0]),
	.C_in(1'b0),
	.f(F[0]),
	.g(G[0]),
	.p(P[0])
 );
  Add1 u2
 (	.a(A[1]),
	.b(B[1]),
	.C_in(C[1]),
	.f(F[1]),
	.g(G[1]),
	.p(P[1])
 );
   Add1 u3
 (	.a(A[2]),
	.b(B[2]),
	.C_in(C[2]),
	.f(F[2]),
	.g(G[2]),
	.p(P[2])
 );
   Add1 u4
 (	.a(A[3]),
	.b(B[3]),
	.C_in(C[3]),
	.f(F[3]),
	.g(G[3]),
	.p(P[3])
 );
 CLA_4 uut
 (
	.P(P),
	.G(G),
	.C_in(1'b0),
	.Ci(C),
	.Gm(),
	.Pm()
 );
  assign OUT={C[4],F};
 endmodule


//一位加法器
module Add1
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);
assign f=a^b^C_in;
assign g=a&b;
assign p=a|b;
endmodule

//4位CLA部件
module CLA_4(
		input [3:0]P,
		input [3:0]G,
		input C_in,
		output [4:1]Ci,
		output Gm,
		output Pm
	);
assign Ci[1]=G[0]|P[0]&C_in;
assign Ci[2]=G[1]|P[1]&G[0]|P[1]&P[0]&C_in;
assign Ci[3]=G[2]|P[2]&G[1]|P[2]&P[1]&G[0]|P[2]&P[1]&P[0]&C_in;
assign Ci[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_in;

assign Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];
assign Pm=P[3]&P[2]&P[1]&P[0];
endmodule












如果关于此次题单有问题或者反馈意见,欢迎加入牛客用户反馈群沟通~