מכונות VHDL

VHDL (VHSIC Hardware Description Language) הוא אחד השפות הנפוצות ביותר עבור עיצוב מערכות דיגיטליות, במיוחד כאשר יישום לוגיקה של המדינה מכונות - מכונות ממשלתיות סופיות (FSMs) - הן עמוד השדרה של יחידות בקרה רבות בפרוטוקולים תקשורת, מעבדים משובצים, בקרי זיכרון, צינורות עיבוד אותות דיגיטליים מורכבים יכול להוביל לגישורים, מתים או התנהגות בלתי צפויה, אשר מסייעות על ידי עיצובים מתקדמים של תבניות עיצוב.

הבנת שתי האדריכלות העיקריות: מור לעומת מאלי

הבחירה בין מור לבין אדריכלות מאלי משפיעה באופן יסודי על האופן שבו הפלטים נוצרים.במכונת מור, הפלטים תלויים רק במצב הנוכחי, בעוד שבפלטי מכונה של מאלי תלויים הן במצב הנוכחי והן בקלטות.

מכונות מדינת מור

מכונות מור פשוטות יותר להיגיון משום שהפלטים משתנים רק במעברים של המדינה, מסונכרנים לקצה השעון.זה הופך אותם ללא סלקציה מטבעם על קווי הפלט כל עוד המצב יציב.הם אידיאליים לשלוט לוגיקה שבה יציבות התפוקה היא קריטית, כגון בקרי תנועה או גישה זיכרון סינטיבית.

מכונות מדינה

מכונות מדייות יכולות לייצר פלטות מיד בתגובה לשינויים קלט, אפילו בתוך אותו מחזור השעון.זה יכול להוביל דיאגרמות ממשלתיות קומפקטיות יותר - לפעמים חצי ממספר המדינות בהשוואה ל- מור שווה ערך.עם זאת, הנתיב המשולב מקלטים לפלטים יש לבדוק בקפידה עבור glitches, עיכובים propagation, ותנאים פוטנציאליים. mealy הם נפוצים באמצעות עיצובים גבוהים שבו קיבולת כגון קידוד ביעילות , חומרים כגון קידודים, או צנרת ביעילות , חומרים.

כלל טוב של אצבע: להתחיל עם ארכיטקטורה מור עבור לוגיקה בקרת בטיחות; לשקול mealy רק כאשר המהירות או היתרון באזור הוא חיוני, ואומת את תוכנית התזמון.

עיצוב סינכרוני לעומת Asynchronous Design: Why Synchronous Wins

רוב מכונות מצב VHDL אמין הן סינכרוניות - כל המעברים של המדינה מתרחשים על קצה שעון גלובלי אחד.סינכרון עיצוב סימולטור ניתוח תזמון, סגירה תזמון סטטית, ושימוש חוזר בכלים. מכונות מצב סינכרוני (ללא שעון משותף) הם קשה לשמצה ליישם כראוי VHDL; הם דורשים ניתוח מצב גזע זהיר, חיסול, ולעתים קרובות פריסה ללא ניסיון של שעון פילטר נמוך, כגון ממשק שעון מבוזר, או ממשקי לחץ על ידי שעון מבוזר, או ממשק נמוך.

process(clk, rst_n)
begin
 if rst_n = '0' then
 state <= IDLE;
 elsif rising_edge(clk) then
 state <= next_state;
 end if;
end process;

עבור עיצובים של רב-השעה, תמיד מסנכרנים קלטות סינכרוניות לפני להאכיל אותם לתוך המכונה המדינה (ראה סעיף ההסתברות להלן).

סגנונות המדינה: Binary, One-Hot, Gray

הדרך בה אתה להקצות קודים בינאריים למדינות משפיעות על האזור, מהירות, כוח ואמינות. VHDL עצמו רק אכפת מההתמדה; כלי הסינתזה מחליט את ה ⁇ אלא אם אתה מכריח אותו.עם זאת, אתה יכול להנחות את הכלי באמצעות תכונות סינתזה או על ידי הגדרת ידנית של וקטור המדינה.

המונחים: Binary Encoding

Binary ⁇ משתמשת במספר הפטפטפטים (מספר 2 של מדינות) היא יעילה בתחום עבור מכונות המדינה עם מדינות רבות (למשל 64+) ה-Reback הוא כי מחיקת ההיגיון של המדינה הבאה יכולה להיות איטית יותר, ומעברים בין מדינות עשויים לכלול מספר צפיות, הגדלת כוח עקב הדבקה.

One Hot Encoding

אחד-חם משתמש בלוגיקה אחת של ספין-אפ למדינה, כך שרק אחד מהפך הוא גבוה בכל עת.זה הופך את ההיגיון הבא-המדינה דה-קוד מהיר מאוד (פשוט או של מעברים נכנסים) ומפחית פוטנציאל glitch. 1-חם הוא ברירת המחדל המומלצת על ידי רוב הספקים של FPGA עבור מכונות ממשלתיות עם עד כ- 16 מדינות.

אפור Encoding

אפור ⁇ מבטיח שרק מעט שינויים בין מדינות סמוךות.זה שימושי כאשר מעברי המדינה חייבים למזער את הכוח או כאשר חוצים את תחומי השעון עם אוטובוס רב-ביט (למרות שדורש סינכרוניים נוספים). אפור הוא מורכב יותר ממפה לדיאגרמת מצב טבעית, כך שזה פחות נפוץ עבור שליטה בהגיון.

בפועל, להתחיל עם חד פעמי עבור FSM קטנים יותר (בדרך כלל מתחת 20 מדינות) ו בינארי עבור אלה גדולים יותר.Let your synthesis כלי ברירת המחדל לטפל בשאר - אבל לאמת באמצעות סימולציה ודיווחי תזמון.

שימוש בסוגים נוספים עבור Readability ובטיחות

הגנה על מדינות עם סוג מוקרן היא שיטה טובה ביותר לשיפור יכולת הקראת הקוד ושמירה על יכולת השימוש בקבועים מספריים (למשל, FLT:2), לכתוב:

type state_type is (IDLE, WAIT, READ, WRITE, DONE);
signal state, next_state : state_type;

סוגים מעודכנים מאפשרים כלי הסינתזה להקצות באופן אוטומטי את ⁇ , והפידר ידגל כל ערכי מדינה בלתי חוקיים אם נעשה שימוש בהצהרת מקרה המכסה את כל המדינות.זה גם מאפשר סימולציה קלה לפענוח כי הצופים גלפור להציג את שם המדינה במקום קוד בינארי.תמיד לכלול סעיף FLT:4 במקרה כדי לתפוס שגיאות או סינתזה של תנאי טיפול לא טיפול.

אסטרטגיות איפוס: Reliable Firstization

כל FSM חייב להיות מנגנון איפוס מוגדר היטב.ללא איפוס, המדינה לרשום סמכויות במצב לא ידוע, שעלול לגרום מנעול או פלטים מעוררי השראה. שני סגנונות איפוס נפוצים הם סינכרוניים וסנכרוניים.

איפוס סינכרוני

איפוס סינכרוני (הכניסה לאפסה באופן עצמאי מהשעון) מכריח את המכונה למצב בטוח ידוע באופן מיידי.זה חיוני עבור מערכות קריטיות בטיחות שבו שחזור כוח או שגיאה חייב לקרות ללא המתנה לחוד השעון.תבנית VHDL טיפוסית משתמשת באפסוס ברשימה הרגישות:

process(clk, rst_n)
begin
 if rst_n = '0' then
 state <= IDLE;
 elsif rising_edge(clk) then
 state <= next_state;
 end if;
end process;

עם זאת, להיות מודע לכך שביטול איפוס מסונכרן חייב להיות מסונכרן כדי להימנע מצרות (נושא תזמון "התחלה מחדש") מעצבים רבים להוסיף סינכרונכרן עבור אות איפוס.

איפוס סינכרוני

איפוס סינכרוני רק משפיע על קצה השעון.זה מבטל את בעיית התזמון ההתאוששות ומפשט ניתוח תזמון סטטי.היד: אם השעון מפסיק או איטי, המכונה עשויה לאפסת במהירות. השתמש באפסות סינכרונית עבור עיצובים שבהם שעון גלי עשוי לעצור את המערכת - אבל תמיד להבטיח שהשעון פועל במהלך איפוס.

עבור אמינות מקסימלית, לשלב הן: להשתמש ב איפוס סינכרוני כדי לכפות באופן מיידי מדינה בטוחה, ולאחר מכן מעבר לפעילות סינכרונית מלאה.

Input SynSyncization and Metastability

כאשר מכונה מדינה מקבלת קלטות סינכרוניות (למשל, מלחיצת כפתור או מתחום שעון אחר), אות הקלט חייב להיות מסונכרן לשעון של FSM כדי להימנע מעייפות - מצב שבו התפוקה של ספין-אפ-פלולופ מרחפת בין רמות לוגיקה.הפתרון הסטנדרטי הוא מסנכרונכרן 2 או שלוש-flop:

signal async_in : std_logic;
signal sync_meta : std_logic;
signal sync_out : std_logic;
process(clk)
begin
 if rising_edge(clk) then
 sync_meta <= async_in;
 sync_out <= sync_meta;
 end if;
end process;

אל תשתמשו בסימן הסינכרון הגולמי ישירות בלוגיקה של FSM של המדינה הבאה; תמיד להשתמש בגרסה מסונכרנת.עבור אוטובוסים רבים חוצים את דומיינים שעון, לשקול שימוש בפרוטוקול FIFO או לחיצת יד.

« « מנגנונים מכניים

עבור FSMs המונע על ידי דגני או מתגים, עיתונות אחת יכולה ליצור מספר רב של קצוות עקב מגע קפיצה.מכונת המדינה עשויה לפרש אלה כמו מספר הדופקים קצרים, גרימת פעולה לא סדירה. Debouncing יכול להיעשות בתחום הדיגיטלי באמצעות ציר זמן כי מחכה לסימן קלט הרץ (למשל, 10-20 ms) גישה פשוטה היא מדגם בדגימה הרבה יותר נמוך (pice) עבור CK CGA).

סגנונות: שני תוצאות לעומת שלושה תוצאות FSMs

ישנם שני סגנונות מודרך VHDL מלוכדים נרחבים עבור FSMs: סגנון שני התהליכים ואת הסגנון של שלושת התהליכים. שניהם הם סינתזנטיים ואמינה; הבחירה היא בעיקר עניין של קריאה והעדפה אישית.

2 תוצאות FSM

סגנון שני התהליכים משתמש בתהליך אחד של רישום המדינה ולאפסה, ותהליך אחד משלב עבור המדינה הבאה וטכנולוגיית הפלט.התהליך המשולב רגיש למדינה ולקלטות בלבד – אין שעון.סגנון זה מפריד בבירור בין לוגיקה משולבת, מה שהופך אותו קל לאמת את התזמון:

-- Sequential process (state update)
seq: process(clk, rst_n)
begin
 if rst_n = '0' then
 state <= IDLE;
 elsif rising_edge(clk) then
 state <= next_state;
 end if;
end process;

-- Combinatorial process (next state & outputs)
comb: process(state, input1, input2)
begin
 next_state <= state; -- default to staying
 output1 <= '0';
 case state is
 when IDLE =>
 if input1 = '1' then
 next_state <= WORK;
 end if;
 when WORK =>
 output1 <= '1';
 if input2 = '1' then
 next_state <= DONE;
 end if;
 when DONE =>
 next_state <= IDLE;
 when others =>
 next_state <= IDLE;
 end case;
end process;

שימו לב כיצד הפלטים ניתנים לערכי ברירת מחדל לפני המקרה; הדבר מונע מלגלות ומבטיח שכל תפוקה מוקצה בכל מדינה (גם אם הערך הוא אותו הדבר) משימות ברירת מחדל חסרות הן מקור משותף של כיבים לא רצויים בתהליכים משולבים.

שלושה תוצאות FSM

סגנון של שלושה תהליכים מפריד בין רישום המדינה, ההיגיון הבא של המדינה, וטכנולוגיית הפלט לשלוש תהליכים נפרדים, זה יכול לשפר את ארגון הקוד עבור מכונות מורכבות עם תפוקה רבים.יש מהנדסים המעדיפים אותו כי לכל תהליך יש אחריות אחת:

-- State register
seq_state: process(clk, rst_n)
...
-- Next state combinatorial
seq_next: process(state, inputs)
...
-- Output combinatorial (or registered)
comb_output: process(state, inputs)
...

שני הסגנונות אמינים באותה מידה כאשר קודמו כראוי. להימנע מסגנון התהליכים הבודד (שם הכל בתוך תהליך אחד מעודן) כי הוא משלב משימות טריטוריאליות ורשומות, מה שהופך סימולציה וסינתזה לא מתאים יותר לזהות.

Default State and "Safe State" Recovery

גם עם איפוס וקידוד נכון, ניתן למכונה המדינה להיכנס למדינה בלתי חוקית בשל שערורייה חד-משמעית (SEU) ביישומים בחלל, או בשל באג בעיצוב.

case state is
 when IDLE => ...
 when WORK => ...
 when others => next_state <= IDLE;
end case;

עבור סינתזה VHDL, כלים לטפל ⁇ :11 â ¢ ⁇ עבור כל ערכים בינאריים בלתי מסויימים.עם זאת, כלי הסינתזה עשוי ליצור קוד יקר עבור כל דפוס קטן אפשרי. חלופה היא להשתמש "גלאי מדינה בלתי חוקי": נגד או בדיקת שוויון כי איפוס המכונה אם דפוס בלתי צפוי נתפס עבור תקלות, לשקול שימוש קודים כפול או קודים (de-Ron-upable) על ידי רישום משולש (Rulable) או .

אסטרטגיות ואימות

סימולציה תורו חיונית לתכנון FSM אמין. צור ערכת מבחן שמרגיל כל מעבר מדינה, כולל איפוס, idle וכל שילובי קלט. השתמש בהצהרות כדי לוודא שהמכונה לעולם לא נכנסת למצב בלתי ניתן להשגה, וכי הפלטים נפגשים בתזמון הצפוי.לדוגמה, תוכל לבדוק כי לאחר איפוס המכונה הוא מזהה בתוך מחזור אחד:

wait until rising_edge(clk);
assert state = IDLE report "Reset failed" severity failure;

בדיקות מכוונות כיסוי יכולות לעזור להבטיח שכל זוגות בעלי החתכים של המדינה נבדקים.כלים רבים תומכים במדדי כיסוי FSM שמראה אילו מדינות ומעברים הופעלו.FLT:0Doulos' VHDL Testbench טכניקות ריצוף FLT:1 מספקים נקודת התחלה טובה לבניית סביבות אימות מקיפים.

מלכודות נפוצות וכיצד להימנע מהם

  • (FLT:0) רשימת הרגישות המלאה: 1) בתהליכים משולבים, שוכח אות ברשימה הרגישות יכול לגרום סימולציה-סינתזה לא תואמת. VOdo וכלים אחרים עשויים להזהיר על רשימות לא שלמות.
  • (ב) אם אות אינו מוקצה בכל ענף של מקרה או אם הודעה, כלי הסינתזה עשוי להפריש את הכבש במקום מספרxer.
  • (ב) [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0) מורכב ביותר לוגיקה של המדינה הבאה: FIRLT:1 אם הנתיב המשולב הופך עמוק מדי, סגירת התזמון סובלת.Break the machine into Small Hierarchical FSMs או צינורות את הפלטים.
  • (ב) אזהרות סינתזה: ⁇ FLT:1 אזהרות על latches מופרעים, הצהרות לא שלמות, או מדינות לא בשימוש הן דגלים אדומים, תמיד לטפל בהם לפני טייפ או פריסה.

יישומים אמיתיים ותבניות מתקדמות

עיצוב מכונה המדינה אמין אינו רק אקדמי - הוא משמש בכל דבר מבקרי USB (אשר דורש מעקב מדויק המדינה עבור כל חבילה) פרוטוקולי תקשורת חלליות.לדוגמה, בקר JTAG TAP הוא מוקר קלאסי FSM המוגדר על ידי תקן IEEE 1149.1. מעצבים רבים ליישם אותו באמצעות סגנון של שני תהליכים עם אחד חם עבור מהירות.דפוס מתקדם אחר הוא "ל-נתונים" אשר מספק גישה מודולרית כדי לשלוט על ידי יחידת בקרה זו.

עבור עיצובים הדורשים תפוקה גבוהה מאוד, לשקול שימוש ב- "FSM עם פלטים מרופפים": לרשום את אותות הפלט כך שהם משנים מחזור שעון אחד לאחר המעבר המדינה.זה מוסיף שקיפות אבל מבטל גלידות משולבות על קווי אוטובוס.

מסקנה

עיצוב מכונות ממשלתיות אמינות ו- VHDL הוא מיומנות שכל מעצב דיגיטלי חייב לשלוט.על ידי הבנת החילופים המסחריים בין מור לבין ארכיטקטורות מאלי, בחירת מצב מתאים, באמצעות סוגים מלוטשים, וליישם אסטרטגיות איפוס וסינכרון חזקות, אתה יכול ליצור לוגיקה שליטה כי הוא גם שמירה על לוגיקה חזקה וחזקה.תמיד סימולציה, כולל התאוששות מדינתית בטוחה, ומתנגד לפיתוי כדי לקצץ פינות על גבי דפוסים או תכנות מחדש, הוכחו על ידי שימוש ב-ידי התקנים אלה היומנים.