חברת BitLee קורס : VHDL יישומי לתעשיה
VHDL- Very high speed integrated circuits Hardware Description Language.
מהי שפת VHDL שפת תיאור חומרה – הרעיון הכללי רכיבים מתוכנתים שיטות תכנון
רכיבים מתוכנתים CPLD FPGA Field Programmable Gate Array Complex Programmable Logic Device
Complex Programmable Logic Device (CPLD) PAL-like block PAL-like block PAL-like block PAL-like block I/O block Interconnection wires
D Q D Q PAL-like block
FPGA Basic Structure Logic block I/O block Interconnection switches
Flex 10K
משאבים פנימיים של רכיבי FLEX10K ממשפחת FPGA
תכנון גרפי
חסרונות של תכנון גרפי העדר גמישות קושי בביצוע שינוים אפשרויות הדמיה מוגבלות סביבת עבודה לא נוחה בעיות התאמה בין תוכנות שונות
שיטת תכנון אלטרנטיבית – באמצעות שפה גמישות מרבית ביצוע שינוים בקלות סימולציה מתקדמת עבודה עם טקסט בד"כ נוחה יותר מאשר עם שרטוטים אוניברסאליות
תכנון באמצעות שפה
אפשרויות חדשות העומדות לרשות המתכנן באמצעות שפה תיאור התנהגות לעומת תיאור מבנה בניית מעגל ע"י תוכנות סינתזה "אוטומטיות" הסתכלות "מלמעלה"
תהליך התכנון בעזרת VHDL תכנון לוגי תיאור של התכנון באמצעות השפה ביצוע בדיקות סימולציה ביצוע תהליך סינתזה
סימולציה
סינתזה
clk en count clk rst 3 count State machine en מימוש מכונת מצבים בצורה גראפית: דיאגראמת גלים
דיאגראמת בועות zero Count=000 three Count=011 two Count=010 five Count=101 one Count=001 en=0 en=1
en x Q 2(t) Q 1(t) Q 0 (t) X X X X X X X X en x Q 2(t) Q 1(t) Q 0 (t) X X X X X X X X 1 1
en x Q 2(t) Q 1(t) Q 0 (t) X X X X X X X X
מימוש המעגל: D2D2 Q2Q2 count D1D1 Q1Q1 D0D0 Q0Q0 en
מימוש מכונת מצבים בעזרת VHDL: ENTITY state_machine IS PORT( clk, reset, en: INSTD_LOGIC; count: OUTSTD_LOGIC_VECTOR (2 DOWNTO 0)); END ; ARCHITECTURE a OF state_machine IS TYPE STATE_TYPE IS (zero, one, five, two, three); SIGNAL state: STATE_TYPE; BEGIN PROCESS (clk, reset) BEGIN IF reset = '1' THEN state <= zero; ELSIF clk'EVENT AND clk = '1' THEN CASE state IS WHEN zero => IF en = '0' THEN state <= three; ELSE state <= zero; END IF;
WHEN one => IF en = '0' THEN state <= three; ELSE state <= zero; END IF; WHEN five => IF en = '0' THEN state <= one; ELSE state <= five; END IF; WHEN two => IF en = '0' THEN state <= three; ELSE state <= five; END IF; WHEN OTHERS => IF en = '0' THEN state <= three; ELSE state <= two; END IF; END CASE; END IF; END PROCESS; WITH state SELECT count <="000"WHENzero, "001"WHENone, "101"WHENfive, "010" WHEN two, "011"WHENthree; END a;