//
// TCODETABLE.V
//
// tcode table is used to decode the tcode.
// The tcode determines the header length, data payload.
// This module is instantiated by 'decoder.v'
//
// THE TCODE TABLE
//
// tcode Header_length Data payload
// 0, 6, 5, 8 4 0
// 1, 7, 9, Ah, Bh 4 1
// 2, 4, 3 0
//
module tcodetable
(
decode_complete,
decode_error,
header_length,
data_payload,
reset_n,
decode,
data_decode,data_dec_out
);
output decode_complete,decode_error,data_payload;
output[2:0] header_length;
input decode,reset_n;
input[3:0] data_decode;
output [3:0]data_dec_out;
reg decode_complete,decode_error,data_payload;
reg[2:0] header_length;
wire decode,reset_n;
assign data_dec_out = data_decode;
always @(posedge decode or negedge reset_n)
begin
if(!reset_n)
begin
header_length <= 3'b000;
data_payload <= 1'b0;
decode_complete <= 1'b0;
decode_error <= 1'b0;
end
else
begin
case(data_decode)
4'h0,4'h6,4'h5,4'h8:
begin
header_length <= 3'b100;
data_payload <= 1'b0;
decode_error <= 1'b0;
decode_complete <= 1'b1;
end
4'h1,4'h7,4'h9,4'hA,4'hB:
begin
header_length <= 3'b100;
data_payload <= 1'b1;
decode_error <= 1'b0;
decode_complete <= 1'b1;
end
4'h2,4'h4:
begin
header_length <= 3'b011;
data_payload <= 1'b0;
decode_error <= 1'b0;
decode_complete <= 1'b1;
end
default:
begin
header_length <= 3'b000;
data_payload <= 1'b0;
decode_error <= 1'b1;
decode_complete <= 1'b1;
end
endcase
end
end
endmodule