repo2/eclaireXL_ITX/hdmi/infopacketstate.v @ 1475
951 | markw | module infopacketstate (
|
|
clock , // clock
|
|||
reset , // Active high, syn reset
|
|||
start_of_frame,
|
|||
audio_regen_needed,
|
|||
packet_sent,
|
|||
audio_regen,
|
|||
audio_info,
|
|||
video_info,
|
|||
packet_needed
|
|||
);
|
|||
//-------------Input Ports-----------------------------
|
|||
input clock,reset,start_of_frame,audio_regen_needed,packet_sent;
|
|||
//-------------Output Ports----------------------------
|
|||
output audio_regen,audio_info,video_info,packet_needed;
|
|||
//-------------Input ports Data Type-------------------
|
|||
wire clock,reset,start_of_frame,audio_regen_needed,packet_sent;
|
|||
//-------------Output Ports Data Type------------------
|
|||
reg audio_regen,audio_info,video_info,packet_needed;
|
|||
//-------------Internal Constants--------------------------
|
|||
parameter SIZE = 5 ;
|
|||
parameter CHOOSE = 2'b00,AUDIO_REGEN = 2'b01,AUDIO_INFO = 2'b10,VIDEO_INFO = 2'b11;
|
|||
//-------------Internal Variables---------------------------
|
|||
reg [SIZE-1:0] state ;// Seq part of the FSM
|
|||
wire [SIZE-1:0] next_state ;// combo part of FSM
|
|||
//----------Code startes Here------------------------
|
|||
assign next_state = fsm_function(state,start_of_frame,audio_regen_needed,packet_sent);
|
|||
//----------Function for Combo Logic-----------------
|
|||
function [SIZE-1:0] fsm_function;
|
|||
input [SIZE-1:0] state ;
|
|||
input start_of_frame ;
|
|||
input audio_regen_needed ;
|
|||
input packet_sent ;
|
|||
fsm_function[4] = start_of_frame | state[4]; //video_info
|
|||
fsm_function[3] = start_of_frame | state[3]; //audio_info
|
|||
fsm_function[2] = audio_regen_needed | state[2]; //audio_regen
|
|||
fsm_function[1:0] = state[1:0];
|
|||
case(state[1:0])
|
|||
CHOOSE : if (state[2] == 1'b1) begin
|
|||
fsm_function[1:0] = AUDIO_REGEN;;
|
|||
end else if (state[3] == 1'b1) begin
|
|||
fsm_function[1:0] = AUDIO_INFO;
|
|||
end else if (state[4] == 1'b1) begin
|
|||
fsm_function[1:0] = VIDEO_INFO;
|
|||
end
|
|||
AUDIO_REGEN : if (packet_sent == 1'b1) begin
|
|||
fsm_function[1:0] = CHOOSE;
|
|||
fsm_function[2] = 0;
|
|||
end
|
|||
AUDIO_INFO : if (packet_sent == 1'b1) begin
|
|||
fsm_function[1:0] = CHOOSE;
|
|||
fsm_function[3] = 0;
|
|||
end
|
|||
VIDEO_INFO : if (packet_sent == 1'b1) begin
|
|||
fsm_function[1:0] = CHOOSE;
|
|||
fsm_function[4] = 0;
|
|||
end
|
|||
default : fsm_function = CHOOSE;
|
|||
endcase
|
|||
endfunction
|
|||
//----------Seq Logic-----------------------------
|
|||
always @ (posedge clock)
|
|||
begin : FSM_SEQ
|
|||
if (reset == 1'b1) begin
|
|||
state <= #1 CHOOSE;
|
|||
end else begin
|
|||
state <= #1 next_state;
|
|||
end
|
|||
end
|
|||
//----------Output Logic-----------------------------
|
|||
always @ (posedge clock)
|
|||
begin : OUTPUT_LOGIC
|
|||
if (reset == 1'b1) begin
|
|||
audio_regen <= #1 1'b0;
|
|||
video_info <= #1 1'b0;
|
|||
audio_info <= #1 1'b0;
|
|||
packet_needed <= #1 1'b0;
|
|||
end
|
|||
else begin
|
|||
case(state[1:0])
|
|||
CHOOSE : begin
|
|||
audio_regen <= #1 1'b0;
|
|||
video_info <= #1 1'b0;
|
|||
audio_info <= #1 1'b0;
|
|||
packet_needed <= #1 1'b0;
|
|||
end
|
|||
AUDIO_REGEN : begin
|
|||
audio_regen <= #1 1'b1;
|
|||
video_info <= #1 1'b0;
|
|||
audio_info <= #1 1'b0;
|
|||
packet_needed <= #1 1'b1;
|
|||
end
|
|||
AUDIO_INFO : begin
|
|||
audio_regen <= #1 1'b0;
|
|||
video_info <= #1 1'b0;
|
|||
audio_info <= #1 1'b1;
|
|||
packet_needed <= #1 1'b1;
|
|||
end
|
|||
VIDEO_INFO : begin
|
|||
audio_regen <= #1 1'b0;
|
|||
video_info <= #1 1'b1;
|
|||
audio_info <= #1 1'b0;
|
|||
packet_needed <= #1 1'b1;
|
|||
end
|
|||
default : begin
|
|||
audio_regen <= #1 1'b0;
|
|||
video_info <= #1 1'b0;
|
|||
audio_info <= #1 1'b0;
|
|||
packet_needed <= #1 1'b0;
|
|||
end
|
|||
endcase
|
|||
end
|
|||
end // End Of Block OUTPUT_LOGIC
|
|||
endmodule // End of Module arbiter
|