Grundstruktur des Moore Automaten angelegt.
This commit is contained in:
87
labor_4/Aufgabe_6-4/src/sr_fsm.v
Normal file
87
labor_4/Aufgabe_6-4/src/sr_fsm.v
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
module sr_fsm (
|
||||||
|
input CLK,
|
||||||
|
input reset,
|
||||||
|
input run,
|
||||||
|
input Sync,
|
||||||
|
input CYCLE_CTR,
|
||||||
|
input MISO,
|
||||||
|
output MOSI,
|
||||||
|
output [7:0] SSn,
|
||||||
|
output ENA
|
||||||
|
);
|
||||||
|
|
||||||
|
//Definition der States
|
||||||
|
parameter STATE_WAIT = 3'h0;
|
||||||
|
parameter STATE_INIT = 3'h1;
|
||||||
|
parameter STATE_SHIFT = 3'h2;
|
||||||
|
parameter STATE_LATCH = 3'h3;
|
||||||
|
parameter STATE_CLEAR = 3'h4;
|
||||||
|
|
||||||
|
reg [2:0] STATE;
|
||||||
|
reg [2:0] NEXT_STATE;
|
||||||
|
|
||||||
|
|
||||||
|
//Bei jedem Takt wird der State auf den nächsten State gesetzt, wenn ein Reset anliegt wird der State 'Wait' vorgegeben.
|
||||||
|
always @(posedge CLK) begin
|
||||||
|
if(reset) begin
|
||||||
|
STATE = STATE_WAIT;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
STATE = NEXT_STATE;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//Moore Automat
|
||||||
|
always @(STATE) begin
|
||||||
|
case (STATE)
|
||||||
|
STATE_WAIT:
|
||||||
|
if (run == 1'b1) begin
|
||||||
|
NEXT_STATE = STATE_INIT;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NEXT_STATE = STATE_WAIT;
|
||||||
|
end
|
||||||
|
|
||||||
|
STATE_INIT:
|
||||||
|
if (Sync == 1'b1) begin
|
||||||
|
NEXT_STATE = STATE_SHIFT;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NEXT_STATE = STATE_INIT;
|
||||||
|
end
|
||||||
|
|
||||||
|
STATE_SHIFT:
|
||||||
|
CYCLE_CTR = CYCLE_CTR - 1; //CYCLE_CTR dekrementieren
|
||||||
|
//Schieberegister schieben??
|
||||||
|
|
||||||
|
if (Sync == 1'b1) begin
|
||||||
|
NEXT_STATE = STATE_LATCH;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NEXT_STATE = STATE_SHIFT;
|
||||||
|
end
|
||||||
|
|
||||||
|
STATE_LATCH:
|
||||||
|
if (Sync == 1'b1 && CYCLE_CTR != 6'h0) begin
|
||||||
|
NEXT_STATE = STATE_SHIFT;
|
||||||
|
end
|
||||||
|
else if (Sync == 1'b1 && CYCLE_CTR == 6'h0) begin
|
||||||
|
NEXT_STATE = STATE_CLEAR;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NEXT_STATE = STATE_LATCH;
|
||||||
|
end
|
||||||
|
|
||||||
|
STATE_CLEAR:
|
||||||
|
if (Sync == 1'b1) begin
|
||||||
|
NEXT_STATE = STATE_WAIT;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NEXT_STATE = STATE_CLEAR;
|
||||||
|
end
|
||||||
|
|
||||||
|
default: NEXT_STATE = STATE;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
Reference in New Issue
Block a user