```////////////////////////////////////////////////////////////////////////////////
///
/// Template for LSU EE 3755 Spring 2002 Homework 1
///

/// Instructions:
//
// Copy this to a file named hw01.v to directory ~/hw in your
// class account. (~ is your home directory.)  Use this
// this file.
//
// Do not rename the modules in this file and be sure to use the
// directory and filename given above.

// Assignment:"http://www.ee.lsu.edu/ee3755/2002/hw01.pdf

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
/// Problem 0
///

module hello();

initial begin
\$display("Hello, world!");
end

endmodule

////////////////////////////////////////////////////////////////////////////////
/// Problem 1
///

// Complete the 2-to-4 decoder.  See assignment for ports.

// Explicit Structural: Use gates only on assign or operators.

// Test using test_decoder.

module decode_2_to_4();

// Don't forget to add ports.

endmodule

////////////////////////////////////////////////////////////////////////////////
/// Problem 2
///

// Convert a two-digit hex number in ASCII (12, af, 03) on "s" to binary
// on "i"

// Implicit Structural: assign and operators okay.

// Test using test_atoi.

module atoi_implicit(i,s);
input [15:0] s;
output [7:0] i;

// Solution goes here.  Can be done in two lines, but more are okay.

endmodule

////////////////////////////////////////////////////////////////////////////////
/// Problem 3
///

// Convert a two-digit hex number in ASCII (12, af, 03) on "s" to binary
// on "i"

// Explicit Structural: Use gates and modules only no assign or operators.

// Can instantiate the following modules: and4, sub4, and8, sub8, see module
// definitions below.

// Test using test_atoi.

module atoi_explicit(i,s);
input [15:0] s;
output [7:0] i;

// Solution goes here.  Can be done in two lines, but more are okay.

endmodule

//
// Modules for use in Problem 3
//
// DO NOT modify these modules.

module sub4(d,a,b);
input [3:0] a, b;
output [3:0] d;

assign       d = a - b;

endmodule

input [3:0] a, b;
output [3:0] d;

assign       d = a + b;

endmodule

module sub8(d,a,b);
input [7:0] a, b;
output [7:0] d;

assign       d = a - b;

endmodule

input [7:0] a, b;
output [7:0] d;

assign       d = a + b;

endmodule

////////////////////////////////////////////////////////////////////////////////
/// Testbenches
///

module test_decoder();

parameter stop_on_error = 1;

reg [1:0] a;
wire      x0, x1, x2, x3;
reg [3:0] x;

decode_2_to_4 your_decoder(x0,x1,x2,x3,a);

integer   i, err;

initial begin

err = 0;

for(i=0; i<4; i=i+1) begin

a = i[1:0];
#1;
x = 1 << a;
if( {x3,x2,x1,x0} !== x )
begin
\$display("FAIL: Demux wrong output for input %d",a);
err = err + 1;
if( stop_on_error ) \$stop;
end
end

if( !err ) \$write("PASS: ");
\$write("Tests completed, ");
if( err )
\$display("encountered %d errors.",err);
else
\$display("no errors found.\n");

\$display("Thank you for using the decode testbench.");

end

endmodule

module test_atoi();

wire [7:0] ie, ii;
reg [15:0] s;

parameter  stop_on_error = 1;
parameter  ascii_0 = 48;
parameter  ascii_a = 97;

atoi_explicit our_atoi_explicit(ie,s);
atoi_implicit our_atoi_implict(ii,s);

integer    i, err_i, err_e;

integer    d0, d1;

initial begin

err_i = 0;  err_e = 0;

for(i=0; i<256; i=i+1)
begin

d0 = i & 15;
d1 = i >> 4;
s[7:0]  = d0 < 10 ? d0 + ascii_0 : d0 + ascii_a - 10;
s[15:8] = d1 < 10 ? d1 + ascii_0 : d1 + ascii_a - 10;
#1;
if( ie !== i ) begin
\$display("FAIL: Explicit, wrong output, 0x%h (correct) != 0x%h",
i,ie);
err_e = err_e + 1;
if( stop_on_error ) \$stop;
end
if( ii !== i ) begin
\$display("FAIL: Implicit, wrong output, 0x%h (correct) != 0x%h",
i,ii);
err_i = err_i + 1;
if( stop_on_error ) \$stop;
end

end
if( !err_i ) \$write("PASS: ");
\$write("Implicit tests completed, ");
if( err_i )
\$display("encountered %d errors.",err_i);
else
\$display("no errors found.\n");

if( !err_e ) \$write("PASS: ");
\$write("Explicit tests completed, ");
if( err_e )
\$display("encountered %d errors.",err_e);
else
\$display("no errors found.\n");

end

endmodule
```