רכיבים מתכנתים (FPGA,EPLD)

רכיבים מתוכנתים (FPGA,EPLD)  אלי קרן

 

 

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

 

מהו רכיב מתוכנת ?

 

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

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

 

קיימים שני סוגים עיקריים של רכיבים מתוכנתים, האחד מבוסס על זיכרון זמני (SRAM) והשני על זיכרון קבוע (FLASH). רכיב מבוסס זיכרון זמני יאבד את תוכנו ברגע כיבוי המתח, לעומת רכיב מבוסס זיכרון קבוע השומר על תוכנו גם לאחר כיבוי המתח. לרוב רכיבים מבוססי זיכרון קבוע כוללים פחות רכיבים פנימיים לעומת רכיבי זיכרון זמני, אך לעיתים קיימת חפיפה ביניהם כאשר מדובר בכמות נמוכה. לדוגמא, רכיב קטן במושגי זיכרון זמני יכיל כ- 10,000 שערים לוגיים, הגדולים במשפחות אלו יכולים להגיע אף ל – 3,000,000 שערים (הם כמובן עולים הרבה כסף).

 

ביצועים

 

יישומים של רכיבים מבוססי SRAM מיועדים לשימושים שיכולים לסבול Latency גבוה (זמן ההשהיה של מערכת מרגע קבלת הקלט ועד לעדכון הפלט), כלומר עבודה ב- Pipe-Line. ע"י כך ניתן להגיע לקצבי עבודה של 200 עד 300 מגהרץ. במידה והשימוש ברכיב הוא לצורכי לוגיקה רגילה (שערים) אז תיווצר השהייה גדולה מרגע קבלת האות ועד להופעת התוצאה במוצא.

  לעומת זאת, רכיבים מבוססי FLASH הנם מהירים יותר עבור פעולות לוגיות רגילות ולכן נהוג להשתמש בהם לעבודה עם רכיבים אסינכרוניים    

  מהירים.

 

 

כיצד מתכנתים את הרכיב ?

 

על-מנת לתכנת רכיבים אלו יש צורך להשתמש במהדרים (compilers) ייעודיים, באחת משפות התכנות הבאות: VHDL,AHDL,VERILOG,ABEL,HDL. שפות תכנות אלו דומות למדיי באופיין אך שונות בתחביר שלהן. כמו כן, ניתן לבנות קוד גם באמצעות שרטוט של התכנון (כמו שרטוט מעגלים אלקט'), אך יש צורך להשתמש בספריות של סביבת הפיתוח.

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

 

 

דוגמא לקוד בשפת  AHDL

 

SUBDESIGN  EXAMPLE

(

IN1     : INPUT;           // סיגנל כניסה ראשון

IN2     : INPUT;           // סיגנל כניסה שני

 

OUT1   : OUTPUT;      // סיגנל יציאה

)

 

BEGIN  // התחל

OUT1 = IN1&  IN2;      //  פעולת "וגם" בין שתי הכניסות - התוצאה הולכת ליציאה 

END;     //  סוף

 

 

דוגמא לקוד בשפת VHDL

ENTITY simpsig IS
    PORT(
        enable  : IN BIT;
        d, clk  : IN BIT;
        q       : OUT BIT
        );
END simpsig;
 
ARCHITECTURE maxpld OF simpsig IS
BEGIN
    PROCESS(clk)
        BEGIN
            IF (enable = '0' ) then null;
            ELSIF (clk'event and clk = '1') then
            q <= d;
            END IF;
        END PROCESS;
END maxpld;

 

 

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

 

כלי פיתוח

בשוק ישנם מספר רב של כלי פיתוח וסינטזה לרכיבים אלו, ישנם מאוד מתוחכמים ויקרים עד כדי 15,000$ ויותר וכאלו שעולים 1,500$, עבור סטודנטים מרבית החברות הרציניות מציעות להשתמש בגרסה מוגבלת אך מספקת על-מנת להשתפשף בתחום.

 

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




מעוניין לדעת כיצד לשלוט על מנועים טוב יותר?

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

כל הזכויות שמורות לאסף פוניס, גיא יונה ואלי קולברג ©
אין להעתיק תכנים מאתר זה ללא רשות בכתב ממנהלי האתר

אתר זה נצפה באופן מיטבי ברזולוציית 1024X768