שפה לתיאור מעגלים
רוב השפות שפגשתם, כמו Python, JavaScript ו-Go, מתארות רצף של הוראות שמעבד מריץ. Verilog מתארת מעגל. כותבים אילו wire-ים קיימים, אילו רגיסטרים קיימים ואיך אותות זורמים ביניהם. אחר כך סימולטור יכול להריץ את התנהגות המעגל, וכלי סינתזה יכול לקמפל את אותו טקסט לשערים ול-flip-flop של שבב אמיתי.
זו ההגדרה בשורה אחת. להפנים את ההשלכות לוקח יותר זמן.
הקטע הזה נראה כמו תוכנית קטנטנה: module, בלוק initial, משימת מערכת $display. הריצו אותו ותראו hello from verilog. אבל מתחת למכסה המנוע, הסימולטור לא מריץ פונקציה: הוא מדמה זמן שעובר ומקדם את המעגל צעד אחר צעד. בגלל זה תראו $finish בכל מקום: מישהו צריך להגיד לסימולטור לעצור.
מה המשמעות האמיתית של "תיאור חומרה"
שורה ב-C רצה כשמונה התוכנית מגיע אליה. שורה ב-Verilog מתארת חלק ממעגל שקיים תמיד. למשל:
assign y = a & b;
זה לא "חשב את y פעם אחת". זה "קיים wire בשם y, ובכל רגע נתון הוא שווה ל-a AND b". שנו את a או את b, ו-y מתעדכן מיד. כמה פקודות assign במודול אינן רצף: הן תיאורים מקבילים של חלקים נפרדים במעגל.
זו התכונה המגדירה של Verilog ומקור כל באג של מתחילים. רוב מה שכותבים מתאר דברים שקורים במקביל, והמבנים המעטים שנראים כמו פקודות מסודרות (בתוך בלוקי initial ו-always) נראים כך רק כי הסימולטור מעמיד פנים.
מה בונים עם Verilog
Verilog משמשת בכל שכבה של העולם הספרתי:
- לוגיקה צירופית. מחברים, מרבבים, מפענחים, פרוסות של ALU: כל דבר שבו הפלט תלוי רק בכניסות הנוכחיות.
- לוגיקה סדרתית. מונים, shift register, מכונות מצבים סופיות, כל דבר שמתוזמן על ידי
posedge clk. - ליבות מעבד. ממעבדים של תרגילי בית בקורסים באוניברסיטה ועד ליבות RISC-V בקוד פתוח שמגיעות לסיליקון אמיתי, ה-RTL הוא בדרך כלל Verilog או SystemVerilog.
- תכנוני FPGA. לוגיקה שנטענת ל-FPGA של Xilinx או Intel (תקשורת, עיבוד תמונה, בקרה משובצת) נכתבת ברובה המכריע ב-Verilog.
- ASIC. השבבים הייעודיים בטלפון, בראוטר ובמכונית: תכנון ה-front-end הוא HDL, ו-Verilog היא אחת משתי האפשרויות השולטות.
לא צריך שום חומרה כזו כדי ללמוד. כל מה שבדפי התיעוד האלה רץ בסימולטור בדפדפן.
סימולציה מול סינתזה
יש שתי דרכים "להריץ" Verilog, והן לא אותו דבר:
- סימולציה מריצה את התנהגות המעגל בתוכנה. הסימולטור (Icarus Verilog, Verilator, ModelSim, כלים מסחריים) קורא את המודולים שלכם יחד עם testbench, כלומר קוד שמזין את הכניסות, ומפיק פלט: לוגים טקסטואליים, צורות גל, דוחות הצלחה וכישלון.
- סינתזה לוקחת תת-קבוצה של Verilog ומקמפלת אותה ל-netlist של שערים אמיתיים. כלי של היצרן (Vivado, Quartus, כלים מסוג design-compiler בחברות גדולות) מטפל במיפוי. Verilog שעוברת סינתזה צריכה לציית לכללים נוספים: בלוקי
initialוקריאות ל-$displayלא קיימים בסיליקון.
העורך בדפדפן שבדפים האלה מבצע סימולציה. זה כל מה שצריך עד שמוציאים שבב אמיתי או מתכנתים FPGA.
Verilog מול SystemVerilog
אם תחפשו, תיתקלו בשני השמות. SystemVerilog היא הרחבה: היא שומרת על כל מבנה של Verilog ומוסיפה יכולות שמכוונות בעיקר לאימות (מחלקות, בדיקות אקראיות עם אילוצים, assertion-ים, interface-ים, ומערכת טיפוסים עשירה בהרבה). כל מה שתלמדו כאן הוא SystemVerilog תקינה. בפועל שני השמות מתערבבים: רוב הכלים מקבלים את שתיהן ורוב הקבצים מסתיימים ב-.v בכל מקרה. בדפי התיעוד האלה נגיד "Verilog" לאורך כל הדרך.
Verilog מול VHDL
שתיהן שפות תיאור חומרה. שתיהן תקני IEEE. שתיהן קיימות מאז שנות ה-80. ההבדלים:
- תחביר. Verilog נגזרת מ-C: סוגריים מסולסלים, מילות מפתח תמציתיות, כללי טיפוסים גמישים יותר. VHDL נגזרת מ-Ada: מפורטת יותר ומחמירה הרבה יותר בטיפוסים.
- גאוגרפיה. Verilog שולטת בתכנון המסחרי בארצות הברית. VHDL עדיין נפוצה באירופה, בתעשיות ביטחוניות ובבסיסי קוד ותיקים.
- יכולת. הן שקולות פחות או יותר במה שהן יכולות לבטא. בחרו לפי מה שהצוות שלכם משתמש בו.
אם אתם לומדים HDL בפעם הראשונה, ל-Verilog עקומת למידה עדינה יותר: תחביר קטן יותר, יותר סלחנות, ומאגר הדוגמאות ברשת גדול יותר.
איך דפי התיעוד האלה מריצים Verilog
העורך שלמטה משתמש ב-Icarus Verilog (iverilog) מאחורי הקלעים. הוא מקמפל את קוד המקור שלכם לסימולטור ומריץ אותו בתוך sandbox. לא צריך רישיון של Vivado, התקנה של Quartus או לוח FPGA. כותבים מודול ו-testbench קטן, מריצים, ורואים את הפלט ואת צורת הגל.
זה מונה שלם של 4 ביט יחד עם testbench. המודול counter הוא התכנון שנבדק (DUT), והמודול test מזיז את השעון, משחרר את ה-reset ומדפיס את הערך בכל מחזור. הריצו אותו ותראו את count מתקדם מ-0 עד 15 וחוזר להתחלה. פתחו את לשונית ה-Waveform ותראו את אותו הדבר כמעברי מתח.
מה הלאה
יש לכם מספיק הקשר כדי להתחיל לכתוב מודולים. הדף הבא, חומרה מול תוכנה, מקדיש עוד קצת זמן לשינוי במודל החשיבה, כי זו המעידה הגדולה ביותר של מתכנתי Verilog חדשים. אחרי זה: התקנת סימולטור מקומי (לא חובה, הדפדפן מספיק), כתיבת המודול הראשון מאפס, ושאר השפה.
קחו את הזמן. התחביר קטן, ומודל החשיבה הוא העבודה האמיתית.
שאלות נפוצות
מה זה Verilog במילים פשוטות?
Verilog היא שפת תיאור חומרה (HDL) שמשמשת לתיאור מעגלים ספרתיים כטקסט. במקום לכתוב הוראות שמעבד מריץ, מתארים wire-ים, רגיסטרים, שערים לוגיים ואיך אותות זורמים ביניהם. סימולטור מריץ את התיאור כדי שתוכלו לוודא את ההתנהגות, וכלי סינתזה יכול להפוך את אותו תיאור לפריסה של שבב אמיתי.
למה משתמשים ב-Verilog?
Verilog משמשת לתכנון ולאימות של חומרה ספרתית: מעבדים, מעבדים גרפיים, מתגי רשת, בקרי זיכרון, בלוקים לעיבוד אותות, תכנוני FPGA, כל דבר שבנוי משערים ומ-flip-flop. היא רצה גם בסימולציה בלבד, להוראת לוגיקה ספרתית ולבניית אבות טיפוס של תכנונים לפני שמייצרים סיליקון.
האם Verilog היא שפת תכנות?
לא במובן הרגיל. קוד Verilog מתאר מבנה והתנהגות של חומרה (אותות, שערים ואחסון מתוזמן בשעון) ולא רצף של הוראות מעבד. הרבה מהשורות שכותבים מתרחשות במקביל על השבב, לא אחת אחרי השנייה. השינוי הזה בחשיבה הוא המכשול הגדול ביותר במעבר מתוכנה ל-Verilog.
מה ההבדל בין Verilog ל-SystemVerilog?
SystemVerilog היא הרחבה של Verilog. היא שומרת על כל התחביר של Verilog ומוסיפה יכולות שמיועדות בעיקר לאימות: מחלקות, גירויים אקראיים עם אילוצים, assertion-ים, interface-ים וטיפוסי נתונים עשירים יותר. כלים שמקבלים SystemVerilog מקבלים גם Verilog רגילה. ברוב העבודה ברמת מבוא שתיהן נראות זהות.
מה ההבדל בין Verilog ל-VHDL?
Verilog ו-VHDL הן שתיהן שפות תיאור חומרה שפותרות את אותה בעיה. התחביר של Verilog נגזר מ-C והוא תמציתי יותר, והתחביר של VHDL נגזר מ-Ada והוא מפורט יותר ומחמיר יותר בטיפוסים. השימוש בתעשייה משתנה לפי אזור וצוות: שתיהן חיות, ושתיהן מתוקננות (IEEE 1364/1800 ל-Verilog/SystemVerilog, IEEE 1076 ל-VHDL).
האם קשה ללמוד Verilog?
התחביר קטן, קטן יותר משל C++. החלק הקשה הוא להיגמל מהרגלים של תוכנה. ב-Verilog רוב הפקודות מתארות דברים שקורים באותו זמן, לא ברצף, והשמה blocking במקום non-blocking יכולה לקבוע אם המעגל בכלל עובד. צפו שהשבוע הראשון ירגיש מבלבל לפני שהכול מתחבר.