题解 | #4位数值比较器电路#

4位数值比较器电路

https://www.nowcoder.com/practice/e02fde10f1914527b6b6871b97aef86d

`timescale 1ns/1ns

module comparator_4(
	input		[3:0]       A   	,
	input	   [3:0]		B   	,
 
 	output	 wire		Y2    , //A>B
	output   wire        Y1    , //A=B
    output   wire        Y0      //A<B
);
	
	wire [3:0] Y2_1;
	wire [3:0] Y1_1;
	wire [3:0] Y0_1;
	
	/*compare u_compare0(
		.A(A[0]),
		.B(B[0]),
		.Y2(Y2_1[0]),
		.Y1(Y1_1[0]),
		.Y0(Y0_1[0])
	);

	compare u_compare1(
		.A(A[1]),
		.B(B[1]),
		.Y2(Y2_1[1]),
		.Y1(Y1_1[1]),
		.Y0(Y0_1[1])
	);

	compare u_compare2(
		.A(A[2]),
		.B(B[2]),
		.Y2(Y2_1[2]),
		.Y1(Y1_1[2]),
		.Y0(Y0_1[2])
	);

	compare u_compare3(
		.A(A[3]),
		.B(B[3]),
		.Y2(Y2_1[3]),
		.Y1(Y1_1[3]),
		.Y0(Y0_1[3])
	);*/


	genvar i;
	generate 
		for (i=0;i<=3;i=i+1) begin:com
			compare u_compare3(
				.A(A[i]),
				.B(B[i]),
				.Y2(Y2_1[i]),
				.Y1(Y1_1[i]),
				.Y0(Y0_1[i])
			);
		end
	endgenerate

	assign Y2 = Y2_1[3] | (Y1_1[3] & ((Y2_1[2]) | (Y1_1[2] & Y2_1[1]))) | (Y1_1[3] & (Y1_1[2]) & (Y1_1[1]) & Y2_1[0]);
	assign Y1 = (Y1_1[3] & (Y1_1[2]) & (Y1_1[1]) & Y1_1[0]);
	assign Y0 = Y0_1[3] | (Y1_1[3] & ((Y0_1[2]) | (Y1_1[2] & Y0_1[1]))) | (Y1_1[3] & (Y1_1[2]) & (Y1_1[1]) & Y0_1[0]);
	

endmodule

module compare(
	A,
	B,
	Y2,
	Y1,
	Y0
);
	input A;
	input B;
	input Y2;
	input Y1;
	input Y0;
	
	//门级描述方式——————and,or,xor,nand,nor,xnor
	assign Y2 = A & (~B);
	assign Y0 = (~A) & B;
	assign Y1 = ((~A) & (~B)) | (A & B);

endmodule

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务