VHDL

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
עורך 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 מתוך ספריית 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)[עריכת קוד מקור | עריכה]

 
--מרבב ברמה של שערים לוגיים :
 X<=(A and S) or (B and (not S));
 
--המרבב באמצעות חוצץ של מצב שלישי:
X <= A 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;

ראו גם[עריכת קוד מקור | עריכה]

לקריאה נוספת[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

ויקישיתוף מדיה וקבצים בנושא VHDL בוויקישיתוף