Table of Contents
מבוא
תכנון מסננים דיגיטליים עם מהירויות מינימליות הוא דרישה בסיסית לעיבוד זרמי נתונים במהירות גבוהה במערכות בזמן אמת.מ עיבוד אותות רדיו מוגדר תוכנה למנועי מסחר בקידוד גבוה, העיכוב בין קלט ופלט משפיע ישירות על ביצועי המערכת ותיקון. VHDL (VHS Hardware Language) נשאר כלי דומיננטי ליישום מסננים אלה על FPGAs ו- ASIC, המציעים שימוש מהיר בטכניקות ניהוליות.
מימון של מסננים דיגיטליים נמוכים-לא עקביים
שקיפות במסנן דיגיטלי היא הזמן שלוקח דגימה קלט יחיד כדי לייצר דגימה תפוקה מתאימה, נמדד במחזורי שעונים או זמן מוחלט. עבור יישומים מהירים, כל מחזור משנה. מסנן אשר מוסיף אפילו כמה מאות ננו-שניים של עיכוב יכול לקלקל שליטה סגורה-פרלופ או לגרום לאובדן החבילה בטלקומוניקציה. Achieving נמוך דורש הבנה עמוקה של אדריכלות, שעון, מעבר, ואסטרטגיות צינור.
המדד העיקרי הוא (FLT:0) באמצעות חישוב latencyveFLT:1, המוגדר לעתים קרובות כמספר מחזורי השעון מהקלט התואם הראשון לתפוקה התקפים הראשונה.עבור נתונים זורמים, מהנדסים גם לשקול FLT:2group עיכובFLT 3:2group עיכובים FLT 3:, שהוא העיכוב הממוצע של רכיבי התדירות של המסנן.
יישומים הדורשים שקיפות נמוכה כוללים:
- (ה)המסחר הגבוה (HFT)FIRLT:1) - שקיפות ברמת המיקרו-שנית קובעת רווחיות.
- (ב) ,0) ,RRAdar ו-Electronicial WarfareFLT:1 - גילוי יעד בזמן אמת דורש עיכוב עיבוד מינימלי.
- (FLT:0) רדיו מוגדר-סופלט (SDR)IRLT:1) - סינון ערוצים חייב לעמוד עם רחב ADCs.
- (FLT:0Medical הדמיהFLT:1) - אולטרסאונד ו MRI beamforming צריך מסננים דיגיטליים בעלי נטיות נמוכה עבור משוב חי.
הבנת מקרים אלה של שימוש מסייע למעצבים להצדיק הקצאת משאבים ואפשרויות אדריכלות.
VHDL עבור עיצוב מסנן: חיזוקים ומגבלות
VHDL מספקת מסגרת קפדנית לתיאור התנהגות חומרה במקביל.הטיפוס החזק שלה, הגנרים, ו- אות הקצאת הסימנטים להפוך אותו אידיאלי עבור יישום סינון כי חייב להיות סינתזנטי ותיקון התזמון.בניגוד לשפות ברמה גבוהה כמו C, VHDL חושף את רמת ההעברה הבסיסית (RTL), המאפשר למעצבים להתאים את הליטנטיות ברמת השער.
יתרונות מרכזיים של שימוש ב- VHDL עבור מסננים בעלי יכולת נמוכה כוללים:
- (ב) מקבילות (ב) ,0) מקבילות מקבילות (VHDL) (VHDL) מבצעות במקביל, משקפות את האופי המקביל של FPGA לוגיקה.
- (ב) ,0) שליטה ישירה על פני רצפה של פלס'ר 1 (המעצב מחליט היכן מוכנסים רישומים.
- (ב) ,0) ,GenericityFLT:1 - באמצעות גנרים למרחב יעיל, סדר סינון ועומק צינור מאפשר עיצובים הניתנים לחזרה.
- (ב) ⁇ fidelity FLT1) , VHDL מדמה עיכובים ברמת השער (SDF back-annotation) לחיזוי לב מדויק.
עם זאת, VHDL יש גם מגבלות: זה פועל עבור עיצובים בקנה מידה גדול, צינורות ידני יכול להיות הסתברות שגיאה-prone. FPGA ספקים מודרניים לספק סינתזה ברמה גבוהה (HLS) אשר לייצר VHDL מקוד C / C++, אבל עבור דרישות אולטרה-נמוכות, קודמו VHDL נשאר מעולה כי זה מבטל כלי מפוזר על פני.
אדריכלות מסנן: FIR מול IIR Latency Trade-offs
הבחירה בין פינקלט אימפולס תגובה (FIR) ותגובה בלתי הולמת (IIR) מסננים השפעה חזקה על שקיפות אפשרית.שנים יש מאפיינים ייחודיים שיש להתאים לדרישות המהירות והשלב של היישום.
פילטרים ל-Latency הצפוי
מסנני FIR הם יציבים מטבעם ויש להם שלב ליניארי (כאשר coefficients הם סימטריים) הכדאיות שלהם נקבעת בעיקר על ידי מספר הטיפים ואת עומק הצינור בתוך שרשרת הכפל (MAC) עבור N-tap Direct-form FIR, הליטנסיכות היא לפחות מחזורי N אם MAC סדרתיים מלאה בשימוש, אבל מקבילות יכולות להפחית את זה או אחד מהיר עבור פילטרים לא נתונים קודמים.
עיצובים נמוכים-latency FIR משתמשים לעתים קרובות במערך ההרחבה:0systolic מערך 1Felo ( 1FLT) או אדריכלות מקבילה מלאה שבו לכל גולש יש מכפיל מסור ומדרגות, ותוצאות מסומנות דרך עץ מדרגות מרופף.הדרך הביקורתית היא עץ הסולם, אשר ניתן לפרק שלבים כדי לשמור על תדרי שעון גבוהים.
IIRS: קומפקטי אך לא עקבי-סנסציה
(המסננים של IIR משיגים את אותה תגובה תדירות עם פחות ברזים מאשר FIR, אשר מפחית את השימוש במשאב.עם זאת, הלולאות משוב שלהם ליצור נתיבים קריטיים ארוכים יותר ועצלות לא-קונסטנטית.ב מבנים חוזרים (למשל, טופס ישיר II), הפלט תלוי בפלט הקודם, ולכן LT בתוך הלולאה הוא קשה להוסיף פילטרים בדרך כלל; אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, שימוש ב-F-Fate) הוא בדרך כלל, הוא אינו יכול להיות מנקה, הוא צורך ב-Fate (מספקט).
בעיצובים מהירים רבים, מסנני FIR הם ברירת המחדל כי הכדאיות הצפויה שלהם מתיישרת עם פרוטוקולים זורמים כמו AXI4-Stream, שבו לחיצת הידיים חייבת להתרחש בתוך מספר קבוע של מחזורים.
אסטרטגיות עיצוב מפתח עבור לנטיות נמוכה ב VHDL
יישום מסננים בעלי עוצמה נמוכה ב-VHDL דורש גישה שיטתית לצנרת, מקבילות ומיפוי משאבים.אסטרטגיות הבאות מוכחות במערכות ייצור.
המונחים: Breaking the Critical Path
פישוט היא הדרך היעילה ביותר להפחית את הסבלנות על ידי קיצור הדרך הצירוףית בין רישומים.ב מסנן ללא צינורות, הנתיב הקריטי פועל מרישום קלט באמצעות מכפילים, תוספות, ואולי משוב, הגבלת מהירות השעון המקסימלית. על ידי הוספת רישומים צינורות בשלבים מתאימים, תקופת השעון יכולה להיות מופחתת תוך שמירה על ידי כל שלב מוסיף שעון אחד של טמפרטורות, אבל זמן טיפת זמן (שעון) היא זמן קצר יותר (שעון) באופן דרמטי (שעון) כי הוא זמן קצר יותר).
לדוגמה, לא-פל 16-tap FIR יכול להיות נתיב קריטי של 50 ns, הגבלת תדירות השעון עד 20 MHz. עם שני שלבים צינור, התקופה מופחתת ל 20 ns, ואת הליטנטיות המערכת הכוללת (כולל I/O רישומים) עשוי להיות 4 מחזורים × 20 ns = 80s, לעומת 50 ns nonpiin-ind, לעומת המספר המקסימלי של צינורות הוא למעשה, 000 1 PG) הוא למעשה, לעומת ממוצע של מחזורים של מחזורים של מחזורים של מחזורים, לעומת ממוצע של 10.
שקיפות ותגובה
במקום עיבוד אחד למעגל השעון, מסנן מקבילים מעבד דגימות במקביל כדי להשיג גבוה יותר באמצעות העלאת תדירות השעון.עבור זרימת נתונים במהירות גבוהה, כאשר שיעור הדגימה עולה על שיעור שעון הבד של FPGA (למשל, 1 GHz ADC האכלה של 250 מ"ר FPGA), המסנן חייב להיות מגובה על ידי LT2FLT3, או LT2:
אופטימיזציה: DSP Blocks and Distributed Logic
FPGAs המודרני מכיל פרוסות DSP ייעודיות (למשל, Xilinx DSP48E2, Intel DSP בלוקים) המשלבות מכפיל, dder, ו accumulator בתא יחיד. בלוקים אלה הם הדרך המהירה ביותר ליישם פעולות MAC כי יש להם צינורות פנימיים להגדיר לשאת שרשראות. בעת כתיבת VHD, מיידית DSP בלוקים ישירות באמצעות הצהרות רכיב (למשל, כדי להפחית את הסימון) עבור קידודים נוספים על ידי 0.2.
לאחסון יעיל, השתמש ב- RAM בלוק (BRAM) כ-ROM, אך להיות מודע לכך ש- BRAM קורא עצלות הוא בדרך כלל 2 מחזורים.כדי למזער את זה, לאחסן אפקטיביות ב- LUT זיכרון (SRL32 או פשוט רישומים) אם סדר המסנן הוא קטן.הפיף הסחר בין שימוש לעקביות חייב להיות מוערך לתכנון.
שלב-בי-שלב יישום: מסנן נמוך-לא-לא-לייט 8-Tap FIR ב-VHDL
דוגמה זו ממחישה מקבילה מלאה, מסנן FIR עם 8 סימטרי coefficients.העיצוב משתמש עץ מדרגות צינורות כדי לשמור על הדרך הקריטית קצר.
-- 8-tap symmetric FIR, fully parallel
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity fir_low_latency is
generic (
DATA_WIDTH : integer := 16;
COEF_WIDTH : integer := 16
);
port (
clk : in std_logic;
reset : in std_logic;
data_in : in std_logic_vector(DATA_WIDTH-1 downto 0);
valid_in: in std_logic;
data_out: out std_logic_vector(DATA_WIDTH+COEF_WIDTH-1 downto 0);
valid_out: out std_logic
);
end fir_low_latency;
architecture rtl of fir_low_latency is
-- coefficient ROM (single cycle read)
constant COEFFS : integer_array(0 to 7) := ( ... );
-- internal registers
signal tap_regs : array(0 to 7) of signed(DATA_WIDTH-1 downto 0);
signal prod : array(0 to 7) of signed(DATA_WIDTH+COEF_WIDTH-1 downto 0);
signal sum_stage1, sum_stage2, sum_stage3 : signed(DATA_WIDTH+COEF_WIDTH-1 downto 0);
begin
-- input shift register
process(clk)
begin
if rising_edge(clk) then
if valid_in = '1' then
tap_regs(0) <= signed(data_in);
for i in 1 to 7 loop
tap_regs(i) <= tap_regs(i-1);
end loop;
end if;
end if;
end process;
-- pipeline stage: multiply (one cycle)
process(clk)
begin
if rising_edge(clk) then
for i in 0 to 7 loop
prod(i) <= tap_regs(i) * COEFFS(i);
end loop;
end if;
end process;
-- pipeline stage: adder tree (3 cycles for 8 inputs)
process(clk)
begin
if rising_edge(clk) then
-- stage 1: pair sums
sum_stage1 <= prod(0) + prod(1) + prod(2) + prod(3);
sum_stage2 <= prod(4) + prod(5) + prod(6) + prod(7);
-- stage 2: final sum
sum_stage3 <= sum_stage1 + sum_stage2;
end if;
end process;
-- output register
process(clk)
begin
if rising_edge(clk) then
data_out <= std_logic_vector(sum_stage3);
valid_out <= valid_in; -- delayed by 5 cycles total
end if;
end process;
end rtl;
עיצוב זה מציג סך של 5 שלבים צינור (שינוי צום, להכפיל, שני שלבים עץ מדרגות סולם, ופלט), וכתוצאה מכך עצלות של 5 מחזורי שעון.עץ הסולם משתמש ברישום צינורות מרובים כדי למנוע נתיבים ארוכים. על ידי התאמת עומק עץ הסולם עבור ספירת ברז גדול יותר, העיקרון נשאר: לשבור את הסכום לתוך שלבים עץ מאוזנת.
שימו לב כי האות אימות out חייב להיות מעוכב על ידי אותו מספר מחזורים כמו הנתיב הנתונים.זה קריטי בממשקי הזרמה כדי לשמור על היישור. ב VHDL, מתג שינוי פשוט על האותות התקפים משיג זאת.
גינוי ובדיקה של מסננים של Low-Latency
סימבול הוא חיוני כדי לאשר את התגובה תדר המסנן ואת הסבלנות שלו. השתמש בבדיקת רצף קלט ידוע (סרולזה, צעד, סינוסאיד) ו מודד את הפרש הזמן בין הצהרות קלט ופלט. ב VHDL, אתה יכול להשתמש הצהרות "אסה עם "זמן הסימולציה" (זמן בידוד) כדי לאמת כי עצלות אינה עולה על גבול מוגדר, בנוסף לתזמון חוזר.
(ב) לזרימי נתונים מהירים (הופנה מהדף ⁇ ) ו-FLT:2backpressureFLT 3: (אם משתמשים ב- AXI4-Stream) בעקביות של ההיגיון התואם/הקורי עצמו מוסיף לעקביות המערכת הכוללת; שמרו על זה מינימלי על ידי הימנעות משילוב משוב טריטוריאלי בדרכים של .
טכניקות מתקדמות ל-Cycle Latency
דיסטריוט אריתמטי (DA)
Distributed ⁇ להחליף מכפילים עם שולחנות תצפית precomputed (LUTs) ומשמרות, אשר יכול להפחית את מספר שלבי צינורות עבור דפוסים יעילים מסוימים.עם זאת, DA הוא המתאים ביותר עבור מסננים FIR קבוע-coefficient שבו מספר הטיפים הוא מתון.הההההההה שלה שווה למספר סיביות לדגימה (אם באמצעות bitserial) או ניתן להפחית את השימוש ב-pmple עבור טיפול אולטרה-p.
אריות סיסטוריות
מערך סיסטוי הוא קבוע, מבנים צינורות שבו הנתונים זורם בדפוס קצבי בין רכיבי עיבוד.עבור מסנן FIR, מערך סינתי יכול להשיג דרך של פלט אחד מחזור שעון עם שקיפות שווה למספר הטיפים (מעל שלבים צינוריים) כל רכיב עיבוד הוא מכפל עם רשומות מקומיות.
צינור עץ אדר
עבור מסננים רחבים מאוד (למשל, 128 טאפאס), עץ הסולם ניתן לצנרת בצורה לא בינארית (למשל, שימוש בתוספות נושא) כדי להפחית את הכדאיות.FLT:0Carry-save תוספת DSPve:1 מחסחסחסחסס שלושה מספרים לשני (מוצר חלקי ונושא) ללא הפצה מלאה, ולאחר מכן התוצאה הסופית היא מנוצלת על ידי DSPD2D.
ההליכים הטובים ביותר והמלכודות הנפוצות
- (ב) עיין תמיד בסימן החיובי של ה- 1FLT (במקביל לנתונים כדי לשמור על היערכות.טעות נפוצה היא לשכוח לדחות את אותות הידקה, וכתוצאה מכך חוסר התאמה ושחיתות של נתונים.
- (FLT:0) לאפסו מחדש סינכרוני 1 (FIRLT) כדי להימנע ממדינות ראשוניות אקראיות שיכולות לגרום לעקביות נוספת במהלך ההפעלה.
- (ב) לוגיקה משולבת (FLT:0) של לוגיקה משולבת המאפשרת אותות ראטמבייט 1 (Falple משלבת את הלוגיקה) אשר יכול ליצור glitches. Register מאפשר באמצעות בקרת ספין-אפ.
- (ב) [13] ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0) כאשר משתמשים ב- RAM עבור coefficientsFIRLT:1), צינורות את הכתובת ואת פלטי הנתונים כדי להימנע הוספת שקיפות נוספת. לחלופין, השתמש ב- RAM מבוזר עבור קבוצות קודר קטנות.
- (ב) [17] ,0) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0)Retime העיצוב לאחר סינתזה של 1LT) באמצעות תכונות תגמול כלי, אך לאמת כי תגמול לא גדל המספר הכולל של מחזורים על ידי הוספת רישומים מיותרים.
מסקנה
תכנון מסננים דיגיטליים ב-VHDL עבור זרמי נתונים מהירים דורש תערובת של ידע אדריכלי, צינורות זהירים והשימוש יעיל של משאבי FPGA. על ידי בחירת הסוג המסנן הנכון (בדרך כלל FIR), יישום שיטות תזמון אגרסיביות וחיתוך אותות, ומינוף בלוקים ייעודיים של DSP, מהנדסים יכולים להשיג sub-100ns latencies אפילו עבור תגובות מורכבות.
לקריאה נוספת על יישום מסנן VHDL ואופטימיזציה של FPGA, ראה משאבים כגון FLT:0 FPGA4Fun הדרכות הדרכה מובנים 1 והערות יישום ספקים.