מה זה FPGA? הסבר פשוט + כמה משרות פתוחות בישראל
זמן קריאה: 7 דקות
FPGA הוא שבב שמכיל מערך גדול של יחידות לוגיקה וחיווט שניתן לתכנת מחדש, כך שאותו רכיב פיזי יכול להפוך למעבד, למקודד וידאו או למסנן אותות לפי מה שטוענים אליו. בלוח HiTakeJob פתוחות כרגע 9 משרות שמזכירות Verilog, ולצידן 26 משרות מסווגות בהנדסת חומרה.
מודל החשיבה: הכל קורה בו זמנית
המכשול הראשון של כל מי שמגיע מתוכנה הוא שהשורות אינן מתבצעות לפי הסדר. תיאור חומרה אינו רצף הוראות אלא תיאור של מעגלים שקיימים פיזית ופועלים כולם בכל מחזור שעון. לולאה בקוד אינה חוזרת בזמן, היא משכפלת חומרה במרחב: לולאה על שמונה איברים תייצר שמונה עותקים של אותו מעגל, ואם כתבתם לולאה על אלף איברים ייגמר לכם השבב.
ההבחנה המעשית שנגזרת מכאן היא בין לוגיקה שילובית לבין לוגיקה סינכרונית. לוגיקה שילובית מחשבת פלט מקלט ללא זיכרון, וזמן ההתייצבות שלה הוא מה שקובע באיזה תדר אפשר לרוץ. לוגיקה סינכרונית שומרת ערך באוגר בקצה השעון. תכנון נכון הוא בעיקר החלטה היכן לשבור נתיב ארוך לשלבים - צינור - כדי לקצר את המסלול הקריטי, במחיר של השהיה כוללת גדולה יותר. ההבנה הזו נדרשת בכל מקום בתחום, כולל בפרויקטים שבסוף מיועדים ל-ASIC.
מה יש בתוך FPGA
בניגוד למעבד, ב-FPGA אין רצף פקודות שמתבצע. יש מבנה פיזי שמוגדר מחדש. המבנה בנוי מכמה סוגי משאבים, וההבנה שלהם היא ההבדל בין קוד שנכנס לשבב לבין קוד שלא.
| משאב | מה הוא עושה | מתי נגמר ראשון |
|---|---|---|
| LUT | טבלת אמת קטנה שמממשת כל פונקציה בוליאנית על מספר כניסות | בלוגיקת בקרה מסועפת |
| Flip-Flop | אוגר ביט אחד, צמוד ל-LUT | בצינורות עמוקים |
| Block RAM | זיכרון פנימי מהיר בגושים קבועים | בבאפרים של וידאו או רשת |
| DSP slice | מכפיל וצובר בחומרה ייעודית | בעיבוד אותות ובלמידת מכונה |
| מטריצת ניתוב | מחברת בין הכל דרך מתגים מתוכנתים | בתכנון צפוף ומפוזר |
| בלוקים קשיחים | PLL, מקמ"שים מהירים, בקרי זיכרון | כמות קבועה, לא ניתנת להרחבה |
הנקודה שמפתיעה מתחילים: מכפלה של שני מספרים בגודל בינוני יכולה לצרוך DSP אחד ולרוץ מצוין, אבל חלוקה או פעולה בנקודה צפה עולות בסדרי גודל יותר. מי שכותב חומרה כמו שהוא כותב תוכנה מגלה את זה בדוח הניצולת הראשון.
איך קוד הופך לביטסטרים
הזרימה מתחילה ב-Verilog או VHDL ומסתיימת בקובץ בינארי שנטען לשבב. בין לבין יש ארבעה שלבים שכדאי להכיר בשמם, כי כל אחד מהם נכשל אחרת.
- סינתזה - תרגום הקוד לרשת של LUT-ים, אוגרים ובלוקים. כאן צצות אזהרות latch לא מכוון ואותות שנחתכו כי אף אחד לא קורא אותם.
- מיפוי ו-placement - החלטה איזה LUT פיזי מממש מה, ואיפה בשבב.
- ניתוב - מציאת מסלול במטריצת המתגים בין כל שני רכיבים. בתכנון צפוף זה השלב שנכשל.
- יצירת ביטסטרים - כתיבת קובץ התצורה שמגדיר כל מתג וכל תא זיכרון תצורה בשבב.
השלב שגוזל זמן אמיתי הוא ניתוב. בפרויקט גדול ריצה שלמה יכולה להימשך שעות, ולכן תרבות העבודה שונה מאוד מפיתוח תוכנה: אין לולאת קומפילציה מהירה, ולכן משקיעים הרבה יותר בסימולציה לפני שמריצים בכלל.
אילוצי תזמון - החלק שכולם שוכחים
הכלי אינו יודע באיזה תדר אתם רוצים לרוץ עד שאומרים לו. הצהרת השעון בקובץ האילוצים היא השורה החשובה ביותר בפרויקט, ובלעדיה הכלי ידווח על הצלחה מלאה בזמן שהחומרה תיכשל בשטח באופן אקראי.
מעבר לשעון עצמו נדרשים אילוצי כניסה ויציאה שמתארים מתי אותות חיצוניים יציבים ביחס לשעון, ואילוצים לחציית דומיינים. אות שעובר משעון אחד לשעון אחר לא מתואם הוא מקור קלאסי למצב מטא-יציב, ולכן מסנכרנים אותו דרך שני אוגרים, ולאפיקי נתונים משתמשים ב-FIFO אסינכרוני עם מצביעים בקוד גריי.
תופעה נוספת שמתחילים נופלים בה היא שינוי התנהגות בין ריצה לריצה: תכנון שלא סגר תזמון במלואו עלול לעבוד בביטסטרים אחד ולהיכשל בביטסטרים הבא, כי הניתוב יצא אחרת. דוח התזמון הוא המקום היחיד שבו ההבדל הזה נראה מראש.
FPGA מול ASIC - מתי כל אחד מנצח
שניהם מממשים לוגיקה דיגיטלית, אבל המודל הכלכלי שלהם הפוך.
| קריטריון | FPGA | ASIC |
|---|---|---|
| עלות פיתוח התחלתית | נמוכה - כלים ולוח פיתוח | גבוהה מאוד - מסכות וסבב ייצור |
| עלות ליחידה | גבוהה וקבועה | נמוכה מאוד בנפחים גדולים |
| זמן עד למוצר עובד | שבועות | חודשים ארוכים |
| תיקון באג אחרי ייצור | עדכון קובץ בשטח | סבב ייצור נוסף |
| ביצועים והספק | נחות משמעותית | מיטבי לאותה משימה |
| שינוי דרישות בהמשך | נתמך בקלות | כמעט בלתי אפשרי |
המסקנה המעשית: FPGA מנצח בנפחים קטנים, בתקנים שעוד משתנים, בציוד תעשייתי ורפואי, בתעופה ובביטחוני, ובכל מקום שבו היכולת לעדכן את הלוגיקה בשטח שווה יותר ממחיר היחידה. ASIC מנצח כשהנפח גדול מספיק כדי לפרוס את עלות הפיתוח, וכשצריך את ההספק והביצועים הטובים ביותר. הנקודה שבה המאזן מתהפך שונה מתעשייה לתעשייה, וההחלטה נעשית לפי תחזית נפח ולא לפי טעם הנדסי.
FPGA ככלי עזר לפיתוח ASIC
שימוש שני ונפרד הוא פרוטוטייפינג. לפני שמייצרים ASIC מרכיבים את אותו תכנון על לוח עם FPGA גדול או על מערך של כמה, ומריצים עליו תוכנה אמיתית. המהירות נמוכה מהשבב הסופי אך גבוהה בסדרי גודל מסימולציה, ולכן צוותי הקושחה והדרייברים מתחילים לעבוד חודשים לפני שיש סיליקון. הקשר הזה מוסבר בהרחבה במאמר על אימות VLSI.
ההתאמה אינה אוטומטית. תכנון ASIC משתמש בזיכרונות ובבלוקים שאין להם מקבילה ישירה ב-FPGA, ולכן צריך להחליף אותם, לעיתים לפצל את התכנון בין כמה שבבים ולטפל בחציית הגבול ביניהם. זו התמחות בפני עצמה.
יצרנים, כלים וסביבת עבודה
השוק נשלט על ידי שני יצרנים מרכזיים, AMD עם משפחת Xilinx ו-Intel עם משפחת Altera, ולצידם שחקנים קטנים יותר כמו Lattice ו-Microchip שחזקים ברכיבים חסכוניים. לכל יצרן סביבת פיתוח משלו, והמעבר בין הסביבות אינו טריוויאלי כי האילוצים, מודלי הזיכרון וה-IP שונים.
מעבר לכלי היצרן נדרשים סימולטור, כלי בקרת גרסאות, וסקריפטים להרצה אוטומטית של בנייה שלמה בלילה. ב-FPGA מודרני יש גם מעבד משולב על אותו שבב, ואז הפרויקט כולל גם צד תוכנה - מה שמסביר למה מפתחי FPGA רבים עובדים בסמיכות לצוותי Embedded, ולמה 17 המשרות שמזכירות C רלוונטיות גם למי שמגיע מכיוון החומרה.
יכולת שראוי להכיר בנפרד היא שחזור תצורה חלקי: טעינה מחדש של אזור מוגדר בשבב בזמן שהשאר ממשיך לעבוד. זה מאפשר להחליף מאיץ אחד באחר לפי העומס, או לתקן ענף לוגי אחד בלי להפיל את הקישוריות. המחיר הוא זרימת עבודה מורכבת יותר, חלוקה מראש של השבב לאזורים, וניהול קפדני של הממשקים בין אזור שמתחלף לבין אזור שנשאר.
תקלות נפוצות בפרויקט FPGA ראשון
- לולאה עם תלות סדרתית שנכתבה כאילו היא קוד תוכנה, וכתוצאה ממנה נתיב שילובי ארוך שלא עומד בתדר.
- latch לא מכוון שנוצר מ-if בלי else בבלוק שילובי, ומופיע רק כאזהרת סינתזה שקל לפספס.
- אות שחוצה דומיין שעון בלי מסנכרן, ומייצר תקלה שמופיעה פעם בשעה ונעלמת בדיבאג.
- איפוס אסינכרוני ששוחרר בלי סנכרון, ולכן חלקי התכנון יוצאים מאיפוס במחזורים שונים.
- קריאה מ-Block RAM בהנחה שהיא מיידית, כשבפועל יש מחזור השהיה לפחות.
- הסתמכות על ערך התחלתי של אוגר שלא אותחל, שעובד בסימולציה ונכשל בשבב.
המשותף לכולן הוא שהן לא נראות בקוד ונראות היטב בדוח או במנתח לוגי פנימי. לכן חלק גדול מהכשירות בתחום אינו כתיבת קוד אלא קריאת דוחות.
שאלות נפוצות
האם FPGA זה תכנות?
זו כתיבת תיאור חומרה, לא תוכנית. השורות אינן מתבצעות בזו אחר זו אלא מתארות מעגלים שכולם פועלים בו זמנית בכל מחזור שעון. זו נקודת המעבר הקשה ביותר למי שמגיע מרקע תוכנתי.
Verilog או VHDL, מה ללמוד?
שתיהן מקובלות והמעבר ביניהן אינו קשה אחרי שמבינים את המודל. בישראל Verilog ו-SystemVerilog נפוצים יותר בתעשיית השבבים, ו-VHDL נפוץ בביטחוני ובתעופה. מי שמתחיל ילמד את מה שהמעסיק הפוטנציאלי שלו משתמש בו.
כמה עולה להתחיל להתנסות?
לוחות פיתוח לסטודנטים נמכרים במחירים נמוכים יחסית וכלי הפיתוח בגרסאות הבסיסיות חינמיים. המחיר המדויק הוא הערכת שוק שמשתנה לפי דגם ויבואן, אך המכשול האמיתי הוא זמן למידה ולא חומרה.
מה ההבדל בין FPGA למיקרו-בקר?
מיקרו-בקר מריץ פקודות ברצף, ולכן שתי משימות חולקות את אותו מעבד. ב-FPGA אפשר לממש שני מעגלים נפרדים שרצים ממש במקביל. לכן FPGA מנצח כשצריך זמן תגובה קשיח או מקביליות אמיתית, ומפסיד כשמדובר בלוגיקה שקל לתאר בתוכנה.
האם FPGA משמש בלמידת מכונה?
כן, בעיקר בהסקה ולא באימון, ובעיקר כשיש דרישת זמן תגובה נמוך או הספק מוגבל. ה-DSP slices וה-Block RAM מאפשרים לבנות צינור חישוב ייעודי, אך התחרות מול מאיצים ייעודיים קשה.
איך מתקדמים מ-FPGA ל-ASIC?
המעבר נפוץ, כי הבסיס זהה: אותה שפה, אותו אופן חשיבה על תזמון ואותם כלי סימולציה. מה שנוסף הוא זרימת הסינתזה לספריית תאים, התכנון הפיזי ושיקולי ייצור. את המשרות הרלוונטיות אפשר לסנן דרך 12 המשרות שמזכירות Verilog בלוח. טווחי שכר שמצוטטים ברשת הם הערכת שוק בלבד.
למה הבנייה לוקחת שעות?
כי הניתוב הוא בעיית אופטימיזציה קשה על מיליוני מתגים, והכלי מנסה לעמוד בו זמנית בכל אילוצי התזמון. בפרויקטים גדולים מריצים בנייה לילית ומסתפקים ביום בסימולציה ובבנייה חלקית של מודול בודד.