נוכל להגדיר באמצעות סוג משתנה חדש (לא באמת, אוקי, חשמליסטים לא יודעים לתכנת)
typedef enum {name1, name2, name3} set_name;
בעצם אנו נותנים מספר לכל שם שכזה ונוכל להשתמש בשמות האלו כדי שיהיה לנו קל יותר לממש דברים נחמדים.
דוגמה
typedef enum {red, green, blue} color;
color c;
אנו נשתמש ב- בשביל מצבים בחומרה כדוגמת:
typedef enum {idleState, state1, state2} state;
אוטומטים(של חשמל) ב-
נזכר כי יש לנו שני סוגים של מכונת מצבים:
- מילי - הפלט יכול להשתנות בהתאם למצב הנוכחי ולכניסה.
- מוור - הפלט יכול להשתנות אך ורק בהתאם למצב הנוכחי.
אנו נעדיף מכונת מוור שכן היא הרבה יותר יציבה.
ב- אנו נממש מכונת מצבים באמצעות בלוקים סינכוניים לשמירת המצב ובלוקים א-סינכרוניים למצבים והפלט.
אוטומט בסיסי -
נבנה זאת למכונת :
module my_FSM_module (
input logic input1.
...
output logic outputN
);
// Declering the FSM states
typedef enum { idleState, startState } state;
// Declering signals for the next & current state;
state currentState;
state nextState;
// FSM synchronous procedural block
always_ff @(posedge clock, posedge restart) begin
if (restart == 1'b1) begin
currentState <= idleState;
end
else begin
currentState <= nextState;
end
end
always_comb begin
nextState = currentState;
output1 = 1'b0;
// ...
outputN = 1'b0;
case (currentState)
idleState: begin
nextState = ...;
output1 = ...;
// ...
outputN = ...;
end
startState: begin
nextState = ...;
output1 = ...;
// ...
outputN = ...;
end
endcase
end
endmodule