VHDL

שמאל|ממוזער|250px|עורך VHDL
**VHDL** (**V**HSIC (Very High Speed Integrated Circuits) **H**ardware **D**escription **L**anguage) היא שפה לתיאור חומרה המשמשת לתיאור של מעגלים ספרתיים. תיאור מעגלים מתאפשר במספר רמות הפשטה, החל מרמת שערים לוגיים ועד למבנים מוכללים כגון מכונות מצבים, מבנים אריתמטיים, זכרונות שונים וכולי. מעגלים אלה מכוונים לרכיבים אלקטרונים משולבים: 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 ייראה כך :
[ימין|ממוזער|150px|[שער לוגי|שער AND]]

```vhdl
-- (הערת VHDL)

-- ייבוא של std_logic מתוך ספריית IEEE
library 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 is

begin

 OUT1 <= IN1 and IN2;

end RTL;
```


### דוגמה לתכנון [[מרבב]] (MUX)
[ימין|ממוזער|170px|[מרבב]]

```vhdl
--מרבב ברמה של שערים לוגיים :
 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;
```


## ראו גם
* Verilog 
* VLSI
* FPGA

## לקריאה נוספת
* זסלבסקי עמוס, לימוד שפת VHDL לסימולציה וסינתזה, הוצאת שורש, 2007 
* כהן שאול, תיכון חומרה בעזרת - VHDL, האוניברסיטה הפתוחה, 2006, דף הספר באתר האוניברסיטה
* רפאלוביץ דוד, תיכון חומרה ניסויים ופרויקטונים ב - VHDL, האוניברסיטה הפתוחה, 2004, דף הספר באתר האוניברסיטה
* אייל חברבר, שפת תיאור חומרה VHDL, הוצאת שורש, דף הספר באתר ההוצאה

## קישורים חיצוניים

* 
* הקורס בטכניון 
* אתר של אוניברסיטת המבורג 
*דוגמה נוספת מימוש מונה ב־VHDL

## הערות שוליים

קטגוריה:שפות תכנות
קטגוריה:תכן לוגי
קטגוריה:מיקרואלקטרוניקה
קטגוריה:מעגלים ספרתיים
קטגוריה:מעגלים משולבים