////////////////////////////////////////////////////////////////////////////////
///
/// 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
// file for your solution. Your entire solution should be in
// 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
module add4(d,a,b);
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
module add8(d,a,b);
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