VHDL

VHDL (‏VHSIC (Very High Speed Integrated Circuits) Hardware Description Language) היא שפת מחשב לתיאור חומרה המשמשת לתיאור של מעגלים ספרתיים. תיאור מעגלים מתאפשר במספר רמות הפשטה, החל מרמת שערים לוגיים ועד למבנים מוכללים כגון מכונות מצבים, מבנים אריתמטיים, זכרונות שונים וכו'. מעגלים אלה מכוונים לרכיבים אלקטרונים משולבים: ASIC, FPGA ו-VLSI. הגרסה הרווחת של השפה היא VHDL-93. לאחרונה יצאה גרסה התומכת גם במעגלים אנלוגיים הנקראת VHDL-AMS.

היסטוריה

השפה פותחה ביוזמה של משרד ההגנה האמריקאי בשנות השמונים כשיטה לתיעוד של תכנוני מעגלים ספרתים מורכבים וגדולים. כיום הגוף המרכזי שממשיך לעדכן את התקן הוא IEEE כתקן IEEE-1076. בשנים שקדמו לפיתוח השפה נעשה שימוש בכלי תכנון גרפיים, בהם המהנדס בוחר רכיבים אלקטרוניים, ממקם אותם בשרטוט ומחבר ביניהם לקבלת מעגל רצוי. תהליך זה הוא תהליך הנעשה בצורה ידנית. בשלב מסוים נעשו שרטוטים אלו מורכבים ומסובכים ובעייתים מבחינת התאימות בין תכנונים שונים והתעורר הצורך בפיתוח כלי מחשב אוטומטיים אשר מסוגלים למדל את התכנונים או לתרגמם לרשימות (Netlist) של רכיבים והחיבוריות ביניהם. המעבר לשפה ממוחשבת סלל את הדרך לפיתוח כלי סימולציה וסינתזה אוטומטיים. כפועל יוצא, התאפשר פיתוח שיטתי של כמות רכיבים גדולה מאד (מיליוני, ואפילו עשרות מיליוני שערים), הממוקמים על גבי שבב יחיד ומזעור הרכיבים המכילים מיליוני שערים לוגיים על גבי פיסת סיליקון בגודל של מילימטרים בודדים.

תכונות

השפה ירשה בתחבירה הגדרות אובייקטים משפת ADA. ההבדל העיקרי בין שפת חומרה לשפת תוכנה הוא, שבשפת חומרה כל שורות הקוד מתבצעות באופן מקבילי ולא באופן סדרתי, כמקובל בשפות תוכנה. כלומר, באופן כללי בשפות חומרה אין משמעות למיקום הביטוי בקוד. כאשר מדובר בביצוע כוונה היא לסימולציה בלבד, ובתהליך הסינתזה לביטוים יש משמעות מערכתית/מבנית, הם מייצגים מבנים סיפרתיים לוגיים. התקן הנוכחי של השפה מציב אותה בכלל השפות מונחות העצמים. רוב המבנים של השפה נועדו למידול ובניית סביבות סימולציה (ולא לסינתזה של מעגלים). דוגמה לכך היא טיפוס זמן, ומאפשר הגדרת אילוצים שונים המערבים אילוצי זמן. קיימת תת-קבוצה של VHDL המאפשרת כתיבת מבנים לסינתזה. תת-קבוצה זאת נתמכת על ידי יצרני כלי-תכנון (EDA) רבים המשמשים את תחום המעגלים המשולבים. VHDL היא שפה "גדולה", המקנה למשתמש בה יכולות רבות ומאפשרת בקלות יחסית לכתוב ולתחזק תכן בגדלים שונים מהקטן ביותר (מספר שערים לוגיים) ועד גדול ביותר (מעבד לדוגמה), לשלוט בתכונות המערכת על ידי מנגנון מפותח של פרמטרים Generic.
השפה המתחרה כיום בשפת VHDL היא Verilog, הנפוצה מעט יותר לעומת VHDL בארצות הברית ובפרט בעמק הסיליקון.
במזרח אסיה ובאירופה VHDL נפוצה יותר.
בישראל משתמשים בשתי השפות באותה מידה].

תכנון

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

דוגמה לתכנון שער AND

הקוד לשער AND פשוט ב-VHDL ייראה כך :
-- (הערת VHDL)-- ייבוא של std_logic מתוך ספריית IEEElibrary IEEE;use IEEE.std_logic_1164.all;-- זוהי הישותentity ANDGATE is
 port ( 
 IN1 : in std_logic;
 IN2 : in std_logic;
 OUT1: out std_logic);end ANDGATE;architecture RTL of ANDGATE isbegin

 OUT1 <= IN1 and IN2;end RTL;

דוגמה לתכנון מרבב (MUX)

--מרבב ברמה של שערים לוגיים :
 X<=(A and S) or (B and (not S));--המרבב באמצעות חוצץ של מצב שלישי:X <= B when S = '1' else 'Z';X <= B when S = '0' else 'Z';-- הבורר יעביר את הכניסה A או B ליציאה X בהתאם לערך של S :X <= A when S = '1' else B;-- דרך נוספת על ידי שימוש ב with :with S select X <= A when '1', 
 B when others; 

-- כתהליך שיתעדכן עם כל שינוי באחד הכניסות בעזרת case:process(A,B,S)begin
 case S is
 when '1' => X <= A;
 when others => X <= B;
 end case;end process;-- כנ"ל ללא case:process(A,B,S)begin
 if S = '1' then
 X <= A;
 else
 X <= B;
 end if;end process;-- 4:1 MUX :process(A,B,C,D,S)begin
 case S is
 when "00" => X <= A;
 when "01" => X <= B;
 when "10" => X <= C;
 when others => X <= D; 
 end case;end process;