Table of Contents
בדיקה אחרונה ב-VHDL
מודולים Serialiser /deserialiser (SerDes Ethernet) הם אבני בניין בסיסיות במערכות תקשורת נתונים מהירות גבוהה מודרני.הם להמיר זרמי נתונים מקבילים בפורמט סידורי עבור שידור על זוג שונה יחיד או סיבים אופטיים, ולאחר מכן לשחזר את הנתונים המקבילים ב-Freditation.Delements PC חזק ומהיר גבוהה SerDes ב-VHDL דורש הבנה עמוקה של עקרונות עיצוב דיגיטליות, ארכיטקטורת שעונים, אשר מספק אותות אוטומטיים כגון:
אדריכלות: Fundamentals
סרדיס שלם ניתן לחלק לארבע מערכות מפתח: הסידורי, המפנה, שחזור נתונים של השעון (CDR), והיערכות / היערכות מעגלים. בעוד המעביר צד מקביל נתונים, הצד המקלט חייב לשחזר את השעון הקטן מהזרם הסדרי הנכנס וליישר את גבולות הנתונים.
Serializer (Parallel-to-Serial Converter)
(ה) מקבילה (ב) היא מילה מקבילה רחבה של מקבילה ומפיקה את ה bits אחד בכל פעם בקצב קו.השעון המקביל (ראה:0:0) הוא בדרך כלל (FLT:2NigFLT 3 פעמים איטי יותר מאשר השעון הסדרתי (FLT:1).
Deserializer (Serial-to-Parall Converter)
ה- deserializer מבצע את הפעולה הפוכה: הוא מקבל זרם קטן סדרתי ומשחזר את המילה המקבילה.ה ביטים הנכנסים עוברים לרישום על כל קצה שעון סדרתי.כאשר המילה המלאה נאספת, הוא מוצג על האוטובוס הפלט המקביל עם דגל תקף.הפלייזר חייב גם להתמודד עם מעט היערכות; אם זרם הנתונים אינו מכיל דפוס מכומר ידוע, הוא מוצג באמצעות דמויות או קופסאות ראש.
שחזור נתונים (CDR)
CDR מפיץ את השעון הסדרי מהזרם הנתונים הנכנס.זה קריטי כי המקלט והמדרדר אינם נעולים במערכות רבות.ב-SAPD המהיר, CDR הוא בדרך כלל מפולאה של שלב (PLL) או לולאה בשלב העיכוב (DLL) אשר מאמת את אונרטור מקומי כדי להתאים את המעברים הבאים.
מילים על אודות ו-Franing
לאחר CDR, יש להתאים את ביטים הנכנסים לגבולות מילה.פרוטוקולים רבים להטביע דפוס ייחודי (למשל, K28.5 ב 8b/10b) כי deserializer משתמש כדי לאתר גבולות. לוגיקה VHDL כולל מכונה מדינה שמחפשת את התבנית ולאחר מכן משמרת את זרם ה bit עד דפוס הוא תואם.
אתגרים בעיצוב מהיר
סרדס במהירות גבוהה פועל בשיעורי ריבוי-גיגהביט, לעתים קרובות מעל 10 Gbps לכל נתיב. במהירויות אלה, אתגרים עיצוביים פיזיים ודיגיטליים הופכים בולטים.
תזמון Closure ו- Metastability
הסידורי והפלייזר חייבים להעביר נתונים בין תחומי השעון (מקביל וסידורי) מטאוסטנטיות יכולה להתרחש אם זמני ההתקנה / ההחזקה מופרים. VHDL מעצבים חייבים להוסיף סינכרוניס ולחסן בזהירות את כלי הסינתזה כדי לעמוד בתזמון.שימוש כפול או משולש סינתזה סינכרוניס עבור אותות בקרה הוא תרגול סטנדרטי.
Jitter
Jitter בשעון השחזור יכול לגרום שגיאות מעטות.בסידורי, שעוני בין התחומים המקבילים והסידוריים מוביל להזמנות לא נכונות מעטות.כדי להילחם בעיצובים המהירים ביותר של SerDes לעתים קרובות להשתמש בסימן דיפרנציאלי, pre-emphasis, ושווה.מנקודת מבט VHDL, מעצבים חייבים למזער לוגיקה טריטוריאלית בנתונים; ניתוק (מכיוון לפלסמה) הוא באיזון משותף.
כוח
מעבר לתדרים של ג'יגהביט שואב עוצמה דינמית משמעותית.אסטרטגיות צמצום כוח כולל שעון, הורדת מתח האספקה (אם אישורי טכנולוגיית היעד), ושימוש בסידורים עם רוחב מקבילות נמוך יותר (למשל, שינוי 8 סיביות לעומת 32 סיביות) כדי להפחית את תדירות השעון הסדרתי. ב VHDL, קוהר בזהירות מונע לא הכרחי כדי להתגמלות של אוטובוסים רחבים.
שיטות יישום VHDL עבור High-Speed SerDes
כדי להשיג ניתוח אמין בשיעורי ריבוי-גביט, קוד VHDL חייב להיות מסנכרן לתוך משאבי חומרה ייעודיים.הסעיפים הבאים מציגים טכניקות ודוגמאות מעשיות.
סרדס הארה Macros
רוב הפרמטרים המודרניים FPGAs כוללים סרDes Transceivers (למשל, Xilinx GTY, Intel E-tile) בלוקים אלה מכילים PLLs, CDR, deserializers, ו-VHDL מעגלים עבור מכשירים אלה בעיקר ספקי מיידיות של ספק פרימיטיביים ומחברת אותם להגיון הליבה שלך.
הטמעה מהירה (Moderate Speeds)
עבור שיעורים עד כמה מאות מגההרץ, סרדס רך לחלוטין ב VHDL יכול להיות בר קיימא. המפתח הוא להשתמש ברשומות משמרות ודלפקים המיושמים עם צמתים ייעודיים ולהימנע מרשתות ארוכות של שילוב. להלן הוא דוגמה מורחבת של סידור הכולל אות עומס המאפשר ו לחיצות.
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity Serializer_8to1 is Port ( clk_ser : in STD_LOGIC; -- serial clock clk_par : in STD_LOGIC; -- parallel clock (1/8 rate) rst : in STD_LOGIC; data_in : in STD_LOGIC_VECTOR(7 downto 0); load : in STD_LOGIC; serial_out : out STD_LOGIC; busy : out STD_LOGIC ); end Serializer_8to1; architecture Behavioral of Serializer_8to1 is signal shift_reg : STD_LOGIC_VECTOR(7 downto 0); signal bit_cnt : integer range 0 to 7; begin process(clk_ser, rst) begin if rst = '1' then shift_reg <= (others => '0'); bit_cnt <= 0; busy <= '0'; elsif rising_edge(clk_ser) then if load = '1' then shift_reg <= data_in; bit_cnt <= 7; busy <= '1'; elsif bit_cnt > 0 then shift_reg <= shift_reg(6 downto 0) & '0'; bit_cnt <= bit_cnt - 1; else busy <= '0'; end if; end if; end process; serial_out <= shift_reg(7); end Behavioral;
הסידורי הזה משתמש בשעון הסדרי לכל הפעולות.הסימן:5 (הסימן) חייב להיות מסונכרן ל-FLT:6; בפועל, נדרש מעגל מעבר לשעון מהתחום המקביל.
דיסייזר עם Word Alignment
ה- deserializer חייב להוציא את המילה המקבילה ולזהות גבולות, הדוגמה הבאה כוללת מכונה פשוטה של מדינת היערכות שמחפשת דפוס ידוע (למשל, FLT 7).
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity Deserializer_8b10b is Port ( clk_ser : in STD_LOGIC; rst : in STD_LOGIC; serial_in : in STD_LOGIC; data_out : out STD_LOGIC_VECTOR(9 downto 0); aligned : out STD_LOGIC ); end Deserializer_8b10b; architecture Behavioral of Deserializer_8b10b is signal shift_reg : STD_LOGIC_VECTOR(9 downto 0); signal bit_cnt : integer range 0 to 10; signal lock : STD_LOGIC := '0'; begin process(clk_ser, rst) begin if rst = '1' then shift_reg <= (others => '0'); bit_cnt <= 0; lock <= '0'; aligned <= '0'; elsif rising_edge(clk_ser) then shift_reg <= shift_reg(8 downto 0) & serial_in; if bit_cnt < 10 then bit_cnt <= bit_cnt + 1; end if; -- check for alignment pattern at any bit position if lock = '0' then if bit_cnt = 10 then if shift_reg = "1111000010" then -- comma pattern lock <= '1'; aligned <= '1'; end if; end if; else -- After locked, output parallel word every 10 clocks if bit_cnt = 10 then data_out <= shift_reg; bit_cnt <= 0; end if; end if; end if; end process; end Behavioral;
במערכת אמיתית, לוגיקה היישור חייבת גם להתמודד עם מעטות ודמויות מרובות של קומברד לחבילה.שעון CDR הוא הניח התאושש; אם לא, נדרש בלוק PLL.
המונחים: space
עיצובים מהירים מאוד SerDes עוברים באופן בלתי נמנע מהשעון המקביל איטי יותר לשעון הסדרי המהיר.הגישה הבטוחה ביותר היא להשתמש ב-FIFO (ראשון, ראשון-out) כדי להדוף את התחומים. ב-VHDL, ניתן ליישם את ה-FIFO כ- RAM בעל מסך כפול עם קורא וכותב נקודות מסונכרנות על פני שעונים מינימליים, כלומר, כלומר, שימוש בסימנים מבוססי זיהוי (מודע) כגון:
סימבול ו-Verification
סימול סרדס במהירות גבוהה דורש תכנון זהיר של Testbench צריך לייצר תבניות נתונים, inject Jitter (להעריך את שולי CDR ותזמון), ולוודא כי משחקי נתונים המועברים קיבלו נתונים לאחר זיוף.
- (FLT:0) Data Generation:BuildFLT:1) השתמש ב- PRBS (רצף של פיסות קטנות של חתומות) כדי לחקות תנועה ריאלית.דפוסים של PRBS חושפים מקורות שגיאה כמו התערבות בין-symbol ו- jitter.
- (ב) .0.Clock Modelling: FLT:1 מודל השעון הסידורי עם רעש שלב מציאותי.רוב סימולטורים דיגיטליים יכולים להיות דומים Jitter על ידי שימוש במשתנה ב-VHDL Testbenches (למשל, FLT:9 עם וריאציות אקראיות קטנות).
- (FLT:0) אימות מבוסס אימות (FLT:1: הכנס ו-HDL טענות לבדוק הפרות פרוטוקול, כגון קודים אופי לא חוקי ב 8b/10b ⁇ או misalignment לאחר מספר מוגדר של מחזורי שעון.
- (FLT:0Coverage-oriented test:FLT:1 Run סימולציות ארוכות כדי להבטיח כי מכונת ההיערכות המדינה יכולה לנעול את תבנית ה- comma תחת שלבים ראשוניים שונים. כיסוי פונקציונלי ניתן להקליט באמצעות מערכת Verilog אם זמין, או באמצעות ניגודי VHDL מותאמים אישית.
ספקים כמו Xilinx ו- Intel מספקים ספריות סימולציה עבור פרימיטיביים של סרדס שלהם.שימוש בספריות אלה מאיץ אימות כי הם מודל ההתנהגות האנלוגית של PLL ושוויון.תמיד כוללים מודלים אלה בבדיקת הסימולציה שלך.
נושאים מתקדמים: Pre-emphasis, Equiization, ו- PCB
בעוד קוד VHDL אינו יכול לשנות את התנהגות השכבה הפיזית, בקר סרדס יכול להתאים הגדרות שוויוניות אם ה- transceiver תומך בהם. FPGA מודרני יש משדרים לפני-מphasis ו- המקלט שווה לשוויון. ב-VHDL, אלה מוגדרים על ידי כתיבת רשומות כדי לשלוט באמצעות אוטובוס פנימי (למשל, AXI-Lite).
פריסת PCB היא קריטית באותה המידה.יש לשלוט בעקביות (בדרך כלל 100 ⁇ ⁇ ⁇ ⁇ ⁇ ), וחלוק השעון צריך למזער את החלק בין השעון ההתייחסות לבין קלט השעון המסור של הרנסצ'ר.מגבלות פיזיות אלה הן מחוץ ל-VHDL, אבל המעצב הדיגיטלי חייב לספק הנחיות ברורות למהנדס ה- PCB, כגון המפרטים הנדרשים לסובלנות ולאובדן.
מחקר מקרה: יישום של ג'יגהביט Ethernet SerDes ב VHDL
ג'יגהביט Ethernet (1000BASE-X) משתמש בתכנית 8b/10b ⁇ ושיעור קו של 1.25 Gbps.The SerDes חייב לקבוע מילה מקבילה 8 סיביות בתוספת קצת שליטה (עבור הבחנה של K / D) לתוך זרם סדרתי 10bit.המקבל מבצע שחזור שעון מן הנתונים המבולחים ומיישר את הגבולות באמצעות מקבילה 10 (binF:10) לאחר יישום:2:
- קודקוד 8b/10b (ניתן ליישם כשולחן מבט) הממיר מידע 8 סיביות וסימן שליטה לקבוצות קוד 10bit.
- סדרתיייזר שלוקח את קבוצת הקוד של 10bit ומפיק אותה באופן סדרתי ב-1.25 Gbps.
- deserializer שמשנה ב bits וחיפושים עבור דפוס ה- comma.
- בלוק CDR (בדרך כלל מיידי ממוכר פרימיטיבי) שיוצר שעון של 125 מ"הרץ (עבור הצד המקביל) מהזרם של 1.25 Gbps הנכנס.
- AFIFO להעביר נתונים מתחום השעון המוחזר למרחב השעון של המערכת.
אדריכלות זו ניתן לתאר לחלוטין ב-VHDL, למעט ה- CDR האנלוגי ונהג קו / קבלה. פרויקטים קוד פתוח רבים מספקים יישום כזה למטרות חינוכיות, אך לייצור, טרנזבולים קשים מומלץ מאוד.
מסקנה
יישום מהיר סרדיס ב VHDL הוא משימה מאתגרת אך מתגמלת כי גשרים לוגיקה דיגיטלית ועיצוב אנלוגי גבוה קידוד.קוד VHDL יש לכתוב עם מגבלות סינתזה, סגירת תזמון, והחלפת דומיינים בראש.עבור שיעורים מעל 1 Gbps, תוך מינוף מאקרוים טרנסצ'רצ'ר חיוני; עבור שיעורים נמוכים יותר, סרדיטים רכים יכולים להיות בנוי באמצעות שינויים יעילים ואפקטיביים חזקים של CDR.
(ב) ◄ [13]
- (FLT:0)Xilinx 7 Series Transceivers User Guide (UG476)03IRLT:1 - מידע מפורט על פרימיטיביים קשים של סרדס.
- (ב) [13] ויקיפדיה: Serializer/DeserializerFLT:1 - סקירה של המושגים והיישומים של סרדיס.
- (FLT:0)Intel Stratix 10 Transceiver User GuideFLT) 1:1 - גישה של ספק אחר לממשקים סדרתיים מהירים.
- (ב) ,0) FPGARelated SerDes TutorialveFLT:1 , מבוא מעשי ל- SerDes עיצוב עם דוגמאות VHDL.