4位数值比较器电路
输入描述:
input [3:0] A ,
input [3:0] B
输出描述:
output wire Y2 , //A>B
output wire Y1 , //A=B
output wire Y0 //A<B
这个题刚开始看毫无思路,多看两遍题目,它其实是从高位到低位逐次比较判断。下面就是具体执行,借鉴评论区大佬代码,先写4位module,1位module在后面。
`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 W_y2[0:3];
wire W_y1[0:3];
wire W_y0[0:3];
genvar gen_i;
for (gen_i = 0; gen_i < 4; gen_i = gen_i + 1) begin
compare_1 compare_1_u(
.A (A[gen_i] ),
.B (B[gen_i] ),
.Y2(W_y2[gen_i]),//A>B
.Y1(W_y1[gen_i]),//A=B
.Y0(W_y0[gen_i]) //A<B
);
end
assign Y2 = W_y2[3] | ((W_y1[3]) & (W_y2[2])) | ((W_y1[3]) & (W_y1[2]) & (W_y2[1])) | ((W_y1[3]) & (W_y1[2]) & (W_y1[1]) & (W_y2[0]));
assign Y0 = W_y0[3] | ((W_y1[3]) & (W_y0[2])) | ((W_y1[3]) & (W_y1[2]) & (W_y0[1])) | ((W_y1[3]) & (W_y1[2]) & (W_y1[1]) & (W_y0[0]));
assign Y1 = W_y1[3] & W_y1[2] & W_y1[1] & W_y1[0];
endmodule
module compare_1(
input A,
input B,
output Y2,//A>B
output Y1,//A=B
output Y0 //A<B
);
assign Y2 = A & (!B);
assign Y0 = (!A) & B;
assign Y1 = !(Y2 | Y0);
endmodule