Table of Contents
הקדמה ל-VHDL Power-up
מערך השערים (FPGAs) ועיגולים משולבים ספציפיים של יישומים (ASICs) שעוצבו עם VHDL (VHSIC Hardware Description Language) חייבים להתמודד עם רגע של כוח-על עם דיוק.כאשר ייצוב מסילות מתח, כל פעולה מעוותת, הרשמה נכונה וזיכרון יכול להתחיל במצב הגיוני בלתי צפוי.
מאמר זה חוקר אסטרטגיות מוכחות עבור אופטימיזציה של לוגיקה דיגיטלית ב Power-up, ממשמעת אותות לאפסה לתכונות ספציפיות-ערך ראשוניות ספציפיות-ערך ראשוניות-ערך.We will מכסה את הסיבות הבסיסיות מדוע ראשוניזציה חשובה, להציג את הונומיה של דפוסי הקידוד VHDL מעשיים, ונדון שיטות הטובות ביותר עבור סימולציה וחומרה אמיתית. על ידי הפנייתכנו טכניקות אלה, אתה תפיק עיצובים כי באופן אמין במעבדה, על הרצפה, ועל המגרש.
מדוע מדיניות ניהול חשמל
הבעיה של מדינות לא ידועות
כאשר הכוח מוחל לראשונה שבב דיגיטלי, צמתים פנימיים ואלמנטים אחסון לא מיד להתיישב לתוך לוגיקה מוגדרת אפס או אחד. CMOS טכנולוגיה יש תקופה - לעתים קרובות מיקרו-שניות - אשר במהלך אשר מתחים עלייה מאפס לטווח התפעולי. במהלך הרמפה זו, טבלאות קצה יכול להיכנס למצבים metastable או פשוט לשמור על הערך שהיה להם ברגע אספקת ההגיון חוצה אפילו לאחר הלחץ הליבה הוא עשוי להכיל זיכרון אקראי (RP) באופן מפורש (RAM) או פשוט יכול להכיל זיכרון RAM (RAM) או פשוט יכול להכיל באופן ברור (RAM) או פשוט לשמור על הערך שהיה יכול לכלול זיכרון RAM (RAM).
ללא היערכות מכוונת, סימולציה עלולה להניח שלא כהלכה את כל הרשומות מתחילות באפס, אבל המכשיר הפיזי לא יביא לחיקויים שעובדים באופן מושלם בסימולציה אבל נכשלים בספסל.
המונחים: inadequate
- (ב) ,0) רמות הפלט הלא מוגדרות (FLT:1) - ⁇ החוצה עשוי לנהוג גבוה, נמוך או צף בתחילה, שעלול להזיק למעגלי זרם.
- (FLT:0)Bus contentionFLT:1 - נהגים מרובים מנסים להחזיק אוטובוס משותף לערכים סותרים יכולים לגרום לזרם יתר ולחימום יתר.
- (ב) מכונות מנעול-מסלול 1 (FLT) - מכונות ממשלתיות פינטיט יכולות להיכנס למצבים בלתי חוקיים או מלכודות, מהם הן לא התאוששו.
- (FLT:0) נקודות זכות שקיפות 1 (FLT:1) - רישומים בלתי מאוישים בליבת קריפטוגרפית או בקרים מאובטחים עשויים להדליף מידע על ערוצים.
- (ב) ,0) ,Verification כשל FLT:1 - חומרה בבדיקת הלולאה הופכת לבלתי-קבועת, מה שהופך אותה לבלתי-אפשרית לשחזר באגים.
החלת כוח אמין מתייחסת לכל הסיכונים הללו על ידי הבטחת שכל אלמנט סינכרוני מתחיל את חייו עם ערך מוגדר מראש.ביישומים קריטיים רבים של בטיחות (קטר, אוואטנים, רפואי), ערבויות כאלה אינן אופציונליות אך חובה על פי הסטנדרטים כמו ISO 26262 או DO-254.
טכניקות בסיסיות עבור VHDL
VHDL מציע מנגנונים מרובים להתמודד עם מדינות סטארט-אפ.הבחירה תלויה בטכנולוגיית היעד (ASIC לעומת FPGA), כלי סינתזה, ומורכבות עיצוב.
איפוס ראשון (Asynchronous & Synchronous)
השיטה המובנה ביותר היא אות איפוס מפורשת כאשר האפס נקבע - או באופן סינכרוני (ראה:0) או synchronly (FLT:1) - כל הקשקשים נאלצים לערך הרצוי. Asynchronous איפוס העדיפו עבור כוח-up כי הם לא דורשים שעון יציב להיות נוכח; את איפוס ניתן להחזיק פעיל במהלך כל המתח רפוי מתחיל משחרור נקי.
התרגול הטוב ביותר קובע כי שחרור איפוס להיות מסונכרן לשעון המערכת כדי להימנע מקוצר ראייה ברגע של דחייה.זה חשוב במיוחד כאשר איפוס מונע על ידי משטח חיצוני או שבב לאפסת כוח (POR) עם קצה איטי.
-- Example: Asynchronous reset, synchronous release
signal reset_sync_r : std_logic_vector(1 downto 0);
process(clk)
begin
if rising_edge(clk) then
reset_sync_r <= reset_sync_r(0) & reset_n;
end if;
end process;
-- Use reset_sync_r(1) as the synchronised reset inside the design
ערכים ראשונים בהצהרת אותות
VHDL מאפשר אותות (ומשתנים) להיות מוקצה ערך ראשוני בהכרזה, למשל, FLT:3 סימולציה ערך זה משמש מיד.רוב כלי הסינתזה המודרניים - כולל AMD Vivado, Intel Quartus, ו Synopsys Synplify - מכבד את הערכים הראשוניים האלה עבור טבלאות ורשומות.
עם זאת, עיצובים ASIC עשויים להתעלם מערכי אות ברירת מחדל כי ההתנהגות הפיזית של ספין-אפ ב Power-on נקבעת על ידי הפריסה הטרנסיסטטור, לא על ידי תיאור RTL. לכן, טכניקה זו היא בעיקר שימושית למטרות FPGA.תמיד לבדוק את המסמכים של כלי הסינתזה שלך; חלק מהם מתייחסים לערכים הראשוניים כרמזים סימולציה בלבד.
Power-on איפוס (POR) מעגליות
מעגלים חיצוניים POR מייצרים דופק צלול, מונוטוני נשאר לטעון עד מתח האספקה מגיע סף בטוח ואת שעון המערכת יציב. מעגלים אלה זמינים כ ייעודי ICs (למשל, MAX809, TPS3808) או ניתן לבנות מרשתות RC דיסקרטיות עם גורם Schmitt. עבור FPGAs, POR הוא לעתים קרובות מוטבע בתוך המכשיר: תצורה של FPGA מחזיק באופן אוטומטי רק תחת לחץ על ידי המשתמש.
בעת תכנון מותאם אישית על לוח מעגלים מודפס, יש לזכור את ההנחיות הבאות:
- רוחב הדופק של איפוס צריך להיות לפחות כמה אלפי שניות כדי לכסות את ה-Rup של רכבת החשמל ואת oscillator להתחיל.
- להימנע קבועי זמן ארוכים של RC שיוצרים קצוות איטיים glitch-susceptible; השתמש ב- POR IC עם פלט פתוח-דראין לחיבור חוטי קל.
- אם העיצוב משתמש במספר תחומי שעון, ודא שכל התחומים מתקיימים באפס עד שכל PLL או MMCM נעולים.
4.הגנות ערכים בתוך תהליכים
בתהליך השעונים ניתן להקצות ערך ברירת מחדל על ידי הצבת אותות לפני בלוק ה-FLT:4, או באמצעות שימוש ב-FLT:5 משימות ברירת מחדל, דפוס זה משמש לעתים קרובות כדי להפחית את השימוש LUT על ידי ביטול לוגיקה מפורשת של איפוס, אבל זה עושה את FLT:0notFLT:1 מבטיח הסמכה כוח-up ראשוני בלבד, אשר נעשה שימוש רק בשעון הראשון: LT2, הוא סיכון ראשוני, הוא רק כדי לתקן את זה, או מחדש, הוא יעיל יותר טוב יותר, הוא יעיל.
אסטרטגיות מקדימות מתקדמות
Global Set/Reset (GSR) ב-FPGAs
משפחות FPGA מודרניות מ- AMD (Xilinx) ו- Intel (Altera) מספקות אות גלובלי ייעודי כי מזרז את כל ה-flop לערך ברירת המחדל שלו בו-זמנית.ב-Sillinx המינוח זה GSR (Global Set/Reset) נטו; ב- Intel מכשירים זה נקרא ברירת מחדל כל סימולציה של FLT:0GlobalFLT:1 , אותות אלה נקבעים באופן אוטומטי במהלך תצורה ואינם זמינים למשתמש, כדי למנוע את התכונה הלוגיקה, אם אתה לא יכול לרשום את הלוגיקה, אם אתה לא יכול למנוע את הלוגיקה ראשונית, אם אתה לא יכול לרשום את ה- GSRIQ.
מיפוי RAM ו- RAM Distributed
אלמנטים זיכרון מציבים אתגר מיוחד משום שהם יכולים להכיל ג'יגה-ביאטים של נתונים לא ידועים.עבור חסימת RAM (BRAM), VHDL מאפשר תכונה 6 תכונת תכונת 6 או גנרית שמציינת קובץ זיכרון ראשוניזציה.
type mem_t is array (0 to 255) of std_logic_vector(7 downto 0);
signal my_mem : mem_t := (others => (others => '0'));
סינטקס זה עובד עבור זיכרונות קטנים שניתן ליישם כ- RAM מבוזר (LUT מבוסס) ב- FPGAs. עבור חסימות גדולות יותר, השתמש בתכונות ספציפיות של הספק או ב-FLT:8 מס כדי להצביע על כך ש-FLT:9 או FLT 10 קובץ.תמיד לאשר כי כלי הסינתזה מתייחס לערך הראשוני כמצב הכוח-up; כמה כלים משתמשים רק עבור סימולציה מפורשת ונדרש סימולציה מפורשת לאחר תיקון.
המונחים: different time domains
מערכות עם מספר רב של תחומי שעון דורשות מעבר דומיין זהה (RDC) ב- Power-up.טעות נפוצה היא לשחרר את כל האפסים בו זמנית כאשר אחד PLL עדיין לא נעול. השתמש בסנכרון מחדש ייעודי למשטח שעון, ורק de-assert את איפוס עבור דומיין לאחר השעון המתאים הוא יציב.המבנה הבא מראה גשר פשוט:
-- Reset synchroniser for each clock domain
signal rst_sync : std_logic_vector(2 downto 0);
begin
process(clk_domain, ext_reset_n)
begin
if ext_reset_n = '0' then
rst_sync <= (others => '0');
elsif rising_edge(clk_domain) then
rst_sync <= rst_sync(1 downto 0) & '1';
end if;
end process;
reset_domain_n <= rst_sync(2);
דפוס זה מסיר את הסטיות משחרור האפסות ומבטיח שהתחום אינו מתחיל להתקוצץ עד שהשעון פעיל.
הפרקטיקה הטובה ביותר עבור Robust Power-upization
ההנחיות הבאות מסנימות ניסיון בתעשייה ועוזרות לך להימנע ממכשולים שבזבוז פסולת מפענח זמן.
- (FLT:0) תמיד להשתמש בתיקון מפורש לכל pe-flopeur.FLT ( 1:1) גם אם אתה מקצה ערך ראשוני, להוסיף ענף איפוס.זה הופך את חומרת הסימולציה להתאמה ונותן לך דרך לנזקור מחדש במהלך המבצע.
- (ב) ⁇ :0 synchronise איפוס de-assertion.arch.ph.1: הצהרת איפוס מסונכרונית מקובלת (הוא עובד גם ללא שעון), אך יש לסנכרן את השחרור כדי להימנע מצרות.
- (FLT:0) סימולציה לאחר יישום סימולציה.IRLT ( 1 2) להפעיל תרחיש סימולציה של כוח-up כוח שבו איפוס הוא לא פעיל במהלך nanothers הראשונים כדי לראות איך המכשיר מתנהג. כלים רבים חדלו כל אותות ל- "X" עד איפוס מפורש מתרחש - זוהי התנהגות נכונה למודל.
- (ב) ,0) , ⁇ ⁇ (ה) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0) תרחישים של מחזור כוח ומחזור כוח .אנדרט 1:1 במהירות חום מהיר ואחריו כוח-כוח חוזר יכול להשאיר כמה רישומים טעון חלקית.העיצוב שלך צריך לסבול רכיבה על כוח חוזר מבלי צורך לאפסת ידנית.
- (FLT:0) הנחות היסוד של עריכת הדין (Document הראשוניתization) במפרט העיצוב, מצב ברור אילו מרכיבים מטופשים על ידי GSR, אשר על ידי מעגל פרי, ואשר על ידי לוגיקה של משתמשים.
דוגמה: מודול ניהול חשמל שלם
להלן ישות VHDL מסנכת המדגימה את כל הטכניקות המרכזיות: הצהרה ראשונית ערכית, איפוס סינכרוני עם שחרור מסונכרן, ודלפק כוח-על שמחזיק את העיצוב באפסוס עבור מספר רב של מחזורי שעון לאחר כוח.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity power_up_init is
generic (
INIT_COUNT : natural := 1000 -- Number of clock cycles to hold reset
);
port (
clk : in std_logic;
ext_rst_n : in std_logic; -- External reset (active low)
data_in : in std_logic_vector(7 downto 0);
data_out : out std_logic_vector(7 downto 0)
);
end entity;
architecture rtl of power_up_init is
-- Signal with default initial value (honoured by FPGA synthesis)
signal counter : unsigned(15 downto 0) := (others => '0');
signal reg : std_logic_vector(7 downto 0) := (others => '0');
signal rst_n_sync : std_logic_vector(2 downto 0) := (others => '0');
signal internal_rst_n : std_logic;
begin
-- Reset synchroniser
process(clk, ext_rst_n)
begin
if ext_rst_n = '0' then
rst_n_sync <= (others => '0');
elsif rising_edge(clk) then
rst_n_sync <= rst_n_sync(1 downto 0) & '1';
end if;
end process;
internal_rst_n <= rst_n_sync(2);
-- Power‑up counter: hold internal reset for INIT_COUNT cycles
process(clk)
begin
if rising_edge(clk) then
if internal_rst_n = '0' then
counter <= (others => '0');
else
if counter < INIT_COUNT then
counter <= counter + 1;
end if;
end if;
end if;
end process;
-- Register with asynchronous reset
process(clk, internal_rst_n)
begin
if internal_rst_n = '0' then
reg <= (others => '0');
elsif rising_edge(clk) then
if counter >= INIT_COUNT then
reg <= data_in; -- Normal operation after power‑up delay
end if;
end if;
end process;
data_out <= reg;
end architecture;
מודול זה מחזיק את הפלט לרשום אפס עבור מחזורי השעון הראשונים של 16:16 לאחר איפוס סינכרוני שוחרר.זה משלב ערך ברירת מחדל לא עולה בקנה מידה GSR (FLT:17) עם ענף מפורש של איפוס, להבטיח כי הן סימולציה וחומרה להתחיל באופן מכריע.
המונחים: Power-up-התנהגות
אימות קשיח של מודרניזציה של כוח דורש יותר מאשר רק הפעלת מבחן רגיל. השתמש בטכניקות הבאות:
- החזרו כל ההתחלות מהאותות של Testbench.FLT [1] כוח 1:1 כל התפוקה לרשום "U" או "X" בזמן אפס כדי לחקות את הכוח הלא ידוע על המדינה, ואז להתבונן כי הם הופכים להיות מוגדרים לאחר רצף האפס.
- (ב) ,0) , לרוץ בחזרה סימולציות ברמת השער.FLT ( 1:1) אלה כוללים עיכובים תזמון ויכולים לחשוף גלידות כי סימולציה RTL מסתתרת.
- (FLT:0) כלי אימות רשמיים של אימות רשמי (FLT:1) כדי להוכיח כי לכל הכתבים יש מצב של איפוס נגיש.
- (ב) ,0) בדיקות של מחזור כוח חומרת כוח-מחזור 1 (FLT:1) עם אותות מפתח אוקטילוסקופים התומכים בסיגנלים.
התייחסות חיצונית וקריאה נוספת
המשאבים הבאים מספקים רקע טכני עמוק יותר והדרכה ספציפית של הספק:
- (FLT:0)Xilinx UG949 - ויאנדו עיצוב שיטותולוגיה: איפוס ו- FirstizationFLT:1 .
- (FLT:0)Intel Quartus Prime Pro Edition Handbook: איפוס ו- FirstizationFelo: 1 (ההמלצות של אינטל לסינכרון מחדש של קידוד מחדש והחלפת כוח ב- Stratix ו-C Cyclone.
- (FLT:0)IEEE Std 1076.6-2004 - VHDL רמת העברת הרישום של VHDL (RTL) SynthesisFLT:1 , תקן מגדיר כיצד ערכים ראשוניים ולאפסות יש לפרש על ידי כלי סינתזה.
- (ב) ,0)Doulos VHDL Designers Guide: Powerup-Fiup ראשוניזציה של Power-upFLT:1 , מדריך מעשי עם דוגמאות קוד הן עבור סימולציה והן סינתזה.
- (FLT:0) Embedded.com - איפוס עיצוב עבור FPGibFLT:1 מאמר קלאסי המכסה אסטרטגיות איפוס, נחיתות, ומבחן.
מסקנה
ההתחלתיזציה של Power-up אינה מחשבה מאוחרת בעיצוב VHDL - היא דרישה בסיסית לחומרה דיגיטלית אמינה.מרישום פשוט מערכות מרובות-שעה מורכבות, כל רכיב אחסון חייב להתחיל ממדינה ידועה. על ידי שילוב אותות איפוס מפורשים, הצהרות ערכיות ראשוניות מסנזה, אישורי GSR, אימות יסודי, אתה יכול לבנות מערכות כיחול נכון כל זמן, ללא קשר לשיעורי חשמל או תחליפים.
הטכניקות שהוצגו כאן - איפוס סינכרוני עם שחרור מסונכרן, משימות ברירת מחדל, מעגלי POR וזיכרון - ליצור ערכת כלים מקיפה. החל אותם באופן עקבי, לאמת הן בסימולציה והן בחומרה אמיתית, ואתה תסלק אחד המקורות הנפוצים ביותר של כישלונות לסירוגין באלקטרוניקה דיגיטלית.