从一位到四位
1、真值表达式
一位真值表,
一位真值表达式
四位真值表
2、verilog思路及代码
4位比较器可以有多个一位比较器组成,由四位真值表可知,判断两个相等很简单,只需要判断最终4个一位比较器的输出值是否相等,而判断大小的思路也是从高位开始比较,如果高位相等就寻找低一位的值。
`timescale 1ns / 1ps
module compare1(
input X,
input Y,
output XGY,
output XSY,
output XEY
);
assign XGY = X & (~Y);
assign XSY = (~X) & Y;
assign XEY = X & Y | (~X ) & (~Y);
endmodule
module compare4(
input [3:0] X,
input [3:0] Y,
output XGY,
output XSY,
output XEY
);
parameter count=4;
wire [3:0] lg,sm,eq;
genvar i;
generate
for(i=0;i<count;i=i+1) begin
compare1 conpare1_1(
.X(X[i]),
.Y(Y[i]),
.XGY(lg[i]),
.XSY(sm[i]),
.XEY(eq[i])
);
end
endgenerate
assign XEY = (eq == 4'hF);
assign XGY = lg[3] | (eq[3] & lg[2]) | (eq[3] & eq[2] & lg[1] ) | (eq[3] & eq[2] & eq[1] & lg[0]);
assign XSY = sm[3] | (eq[3] & sm[2]) | (eq[3] & eq[2] & sm[1] ) | (eq[3] & eq[2] & eq[1] & sm[0]);
endmodule
3、testbench
`timescale 1ns/1ps
module compare_tb();
// Inputs
reg [3:0] X;
reg [3:0] Y;
// Outputs
wire XGY;
wire XSY;
wire XEY;
// Instantiate the module
compare4 uut (
.X(X),
.Y(Y),
.XGY(XGY),
.XSY(XSY),
.XEY(XEY)
);
// Stimulus
initial begin
// Test case 1
X = 4'b0101;
Y = 4'b0111;
#10;
// Test case 2
X = 4'b1100;
Y = 4'b1010;
#10;
// Test case 3
X = 4'b1110;
Y = 4'b1110;
#10;
// Add more test cases as needed
// End simulation
$finish;
end