/// LSU EE 3755 -- Computer Organization -- Spring 2002
//
// Verilog code example: gt
// Output, x, 1 if a > b; a and b are unsigned integers.
// Module is in explicit structural form. Because the ">" operator
// is available there is no need to use an explicit structural
// description, "assign x = a > b" would do.
module gt(x,a,b);
input [1:0] a, b;
output x;
wire na1, nb1;
not n1(na1,a[1]);
not n2(nb1,b[1]);
wire lt1, gt1;
and a1(gt1,a[1],nb1);
and a2(lt1,na1,b[1]);
wire decided1;
or o1(decided1,lt1,gt1);
wire na0, nb0;
not n3(na0,a[0]);
not n4(nb0,b[0]);
wire gt0, lt0;
and a3(gt0,a[0],nb0);
and a4(lt0,na0,b[0]);
wire decided1_and_gt1, not_decided1, not_decided1_and_gt0;
and a5(decided1_and_gt1,decided1,gt1);
not n5(not_decided1,decided1);
and a6(not_decided1_and_gt0,not_decided1,gt0);
or o2(x,decided1_and_gt1,not_decided1_and_gt0);
endmodule
/// Testbench Output
/
// vsim> run -all
// # 0 > 0 == 0
// # 0 > 1 == 0
// # 0 > 2 == 0
// # 0 > 3 == 0
// # 1 > 0 == 1
// # 1 > 1 == 0
// # 1 > 2 == 0
// # 1 > 3 == 0
// # 2 > 0 == 1
// # 2 > 1 == 1
// # 2 > 2 == 0
// # 2 > 3 == 0
// # 3 > 0 == 1
// # 3 > 1 == 1
// # 3 > 2 == 1
// # 3 > 3 == 0
/// Testbench
module testgt();
wire x;
reg [1:0] a, b;
gt my_gt(x,a,b);
integer i;
initial begin
for(i=0; i<16; i=i+1) begin
{a,b}=i[3:0];
#1;
$display(" %d > %d == %d",a,b,x);
end
end
endmodule