Theory:
A binary to Gray code converter is a tool or circuit that transforms a binary number into its equivalent Gray code representation, where only one bit changes between consecutive numbers.
Block diagram:
Truth table:
Boolean expression:
gray_out2=binary_in2;
gray_out1=(binary_in1)^(binary_in2);
gray_out0=(binary_in1)^(binary_in0);
Verilog code:
module binary_gray1(binary_in2,binary_in1,binary_in0,
gray_out2,gray_out1,gray_out0);
input binary_in2,binary_in1,binary_in0;
output gray_out2,gray_out1,gray_out0;
assign gray_out2=binary_in2;
assign gray_out1=(binary_in1)^(binary_in2);
assign gray_out0=(binary_in1)^(binary_in0);
endmodule
Test bench:
module binary_gray1_tb;
reg binary_in2;
reg binary_in1;
reg binary_in0;
wire gray_out2;
wire gray_out1;
wire gray_out0;
binary_gray1 uut (
.binary_in2(binary_in2),
.binary_in1(binary_in1),
.binary_in0(binary_in0),
.gray_out2(gray_out2),
.gray_out1(gray_out1),
.gray_out0(gray_out0)
);
initial begin
binary_in2 = 0;
binary_in1 = 0;
binary_in0 = 0;
#100;
binary_in2 = 0;
binary_in1 = 0;
binary_in0 = 1;
#100;
binary_in2 = 0;
binary_in1 = 1;
binary_in0 = 0;
#100;
binary_in2 = 0;
binary_in1 = 1;
binary_in0 = 1;
#100;
binary_in2 = 1;
binary_in1 = 0;
binary_in0 = 0;
#100;
binary_in2 = 1;
binary_in1 = 0;
binary_in0 = 1;
#100;
binary_in2 = 1;
binary_in1 = 1;
binary_in0 = 0;
#100;
binary_in2 = 1;
binary_in1 = 1;
binary_in0 = 1;
#100;
end
endmodule
Output:
Pin assignment:
input binary_in2->pin 86
input binary_in1->pin 90
input binary_in0->pin 94
output gray_out2->pin 20
output gray_out1->pin 26
output gray_out0->pin 28
RTL schematic:
Device utilization:
Timing analysis: