module decoder(out, en, a) ;
   
   output  [7:0] out ;
   input   [2:0] a ;
   input   en ;

   reg     [7:0] out ;

   always @(a or en) begin
      out = 8'd0 ;
      case(a) 
	   3'd0 : out = 8'd1 ;
	   3'd1 : out = 8'd2 ;
	   3'd2 : out = 8'd4 ;
	   3'd3 : out = 8'd8 ;
	   3'd4 : out = 8'd16 ;
	   3'd5 : out = 8'd32 ;
	   3'd6 : out = 8'd64 ;
	   3'd7 : out = 8'd128 ;
	   default:  $display("The unthinkable has happened.\n") ;
      endcase
      if (!en) out = 8'd0 ;
   end
endmodule


module decoder_tb ;

   reg   [2:0] a ;
   reg   en ;
   reg   [3:0] i ;
   wire  [7:0] out ;

// Instantiate the 3-8 decoder

   decoder   uut(out, en, a);

// Exhaustively test it

   initial begin
      $monitor($time, " en is %b, a is %b, out is %b\n",en, a, out) ;
      #10
      begin
      en = 0 ;
	    for (i=0; i < 8; i=i+1) #10   a = i ;
      end
   
   
      #10
      begin
      en = 1 ;
	    for (i=0; i < 8; i=i+1) 
	    begin #10   a = i ;
	    end 
      end
      
      
    end  
    
endmodule

