This commit is contained in:
@@ -14,10 +14,79 @@ module playback_controller(
|
||||
output SPEED speed
|
||||
);
|
||||
|
||||
typedef enum logic [2:0] {
|
||||
PAUSE, PLAY, FF2, FF4, FF8
|
||||
} state_t;
|
||||
|
||||
state_t current, next;
|
||||
|
||||
wire play_pulse,ff_pulse;
|
||||
|
||||
// NOTE: These might need to be hooked to an even lower clock? Not sure
|
||||
debouncer playDebouncer (clk,reset,play,play_pulse);
|
||||
debouncer ffDebouncer (clk,reset,ff,ff_pulse);
|
||||
|
||||
//next state logic
|
||||
always_comb
|
||||
begin
|
||||
unique case (current)
|
||||
PAUSE:
|
||||
begin
|
||||
if (play_pulse) next = PLAY;
|
||||
else if (ff_pulse) next = FF2;
|
||||
else next = PAUSE;
|
||||
end
|
||||
PLAY:
|
||||
begin
|
||||
if (play_pulse) next = PAUSE;
|
||||
else if (ff_pulse) next = FF2;
|
||||
else next = PLAY;
|
||||
end
|
||||
FF2:
|
||||
begin
|
||||
if (play_pulse) next = PAUSE;
|
||||
else if (ff_pulse) next = FF4;
|
||||
else next = FF2;
|
||||
end
|
||||
FF4:
|
||||
begin
|
||||
if (play_pulse) next = PAUSE;
|
||||
else if (ff_pulse) next = FF8;
|
||||
else next = FF4;
|
||||
end
|
||||
FF8:
|
||||
begin
|
||||
if (play_pulse) next = PAUSE;
|
||||
else if (ff_pulse) next = FF8;
|
||||
else next = FF8;
|
||||
end
|
||||
default:
|
||||
next = PAUSE;
|
||||
endcase
|
||||
end
|
||||
|
||||
//output logic
|
||||
always_comb
|
||||
begin
|
||||
unique case (current)
|
||||
PAUSE: speed = 0;
|
||||
PLAY: speed = 1;
|
||||
FF2: speed = 2;
|
||||
FF4: speed = 4;
|
||||
FF8: speed = 8;
|
||||
default:speed = 0;
|
||||
endcase
|
||||
end
|
||||
|
||||
//sequential logic
|
||||
always_ff @(posedge clk)
|
||||
begin
|
||||
if (reset)
|
||||
current <= PAUSE;
|
||||
else
|
||||
current <= next;
|
||||
end
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user