קודם כול, בדיקת מציאות
לא צריך להתקין שום דבר כדי ללמוד Verilog. כל עורך אינטראקטיבי במסמכים האלה מריץ Verilog אמיתי דרך Icarus Verilog בסביבה מבודדת, כולל מציג ה-waveform. אם באתם ללמוד את השפה, דלגו על הדף הזה וחזרו אליו כשתרצו לעבוד מקומית על פרויקט ארוך יותר.
עדיין רוצים התקנה מקומית? המשיכו לקרוא.
מה "התקנת Verilog" אומרת בפועל
Verilog היא שפה, לא תוכנה. כדי להריץ אותה צריך:
- סימולטור: הכלי שמקמפל את קובצי ה-
.vשלכם ומריץ אותם. לרוב הלומדים זה Icarus Verilog, שנותן את הקומפיילרiverilogואת סביבת הריצהvvp. - מציג waveforms: בדרך כלל GTKWave, שקורא את קובצי ה-
.vcdשה-testbench שלכם מייצר. - עורך טקסט: VS Code עם הרחבת Verilog היא הבחירה הנפוצה, אבל כל עורך יעבוד.
סביבות הכלים של היצרנים (Xilinx Vivado, Intel Quartus, Synopsys VCS, Cadence Xcelium) קיימות לתכנות FPGA ולעבודת ASIC. הן גדולות, לעיתים קרובות דורשות רישיון, ומוגזמות ללמידה. הישארו עם Icarus.
התקנה ב-macOS
הדרך המהירה ביותר היא Homebrew:
brew install icarus-verilog gtkwave
זה מתקין גם את הקומפיילר וגם את מציג ה-waveforms. בדקו:
iverilog -V
gtkwave --version
אמורים להופיע מספרי גרסה משניהם. iverilog מוסיף את עצמו ל-PATH אוטומטית. GTKWave מתקין app bundle תחת /Applications וגם פקודת gtkwave שאפשר להפעיל מהטרמינל.
אם Homebrew לא מותקן, עקבו קודם אחרי ההוראות ב-brew.sh (זו פקודת curl אחת), ואז חזרו לכאן.
התקנה ב-Linux
בהפצות מבוססות Debian (Ubuntu, Mint, Pop!_OS):
sudo apt update
sudo apt install iverilog gtkwave
במערכות בסגנון Fedora / RHEL:
sudo dnf install iverilog gtkwave
ב-Arch:
sudo pacman -S iverilog gtkwave
ואז בדקו באותה דרך:
iverilog -V
gtkwave --version
הגרסה הארוזה מפגרת לפעמים בגרסה אחת אחרי המקור. לרוב הלמידה זה בסדר. אם צריך גרסה חדשה יותר, בנו מקוד המקור: במאגר ה-GitHub של הפרויקט יש הוראות, וזה במרחק ./configure && make && sudo make install.
התקנה ב-Windows
הדרך הקלה ביותר היא המתקין המוכן שקהילת iverilog מתחזקת ב-bleyer.org (חפשו "iverilog Windows"). הוא כולל את Icarus Verilog, את GTKWave ואת סביבת ה-GCC ש-Icarus צריך בפנים.
- הורידו את המתקין העדכני ביותר (בדרך כלל
iverilog-vXX-setup.exe). - הריצו אותו. קבלו את ברירות המחדל, אלא אם יש לכם סיבה שלא.
- כשהמתקין שואל, השאירו את "Add to PATH" מסומן.
- פתחו חלון PowerShell או Command Prompt חדש ובדקו:
iverilog -V
gtkwave --version
אם שכחתם להוסיף ל-PATH, הבינארי נמצא במקום כמו C:\iverilog\bin\iverilog.exe. או שמוסיפים את C:\iverilog\bin ל-PATH של המשתמש דרך System Properties, או שמריצים שוב את המתקין ומסמנים את התיבה.
WSL2 היא גם אפשרות טובה ב-Windows: התקינו Ubuntu מה-Microsoft Store ועקבו אחרי ההוראות של Linux בתוכו. תקבלו תהליך עבודה מוכר יותר בסגנון Unix.
קומפילציה והרצה של הקובץ הראשון
אחרי ההתקנה, תהליך העבודה נראה כך. שמרו קובץ בשם hello.v:
module hello;
initial begin
$display("hello from verilog");
$finish;
end
endmodule
קמפלו אותו לבינארי של סימולציה:
iverilog -o hello hello.v
iverilog הוא הקומפיילר. -o hello נותן שם לפלט. hello.v הוא קובץ המקור שלכם.
הריצו את הסימולציה:
vvp hello
אמורים לראות:
hello from verilog
זו כל הלולאה המקומית. מכאן אפשר לפצל את התכנון לכמה קבצים (iverilog -o sim *.v), להשתמש בדגל -g2012 כדי להפעיל יכולות של SystemVerilog-2012, או להעביר את הפלט לסקריפטים משלכם.
יצירת waveform וצפייה בו
הוסיפו $dumpfile ו-$dumpvars ל-testbench, הריצו אותו, ופתחו את קובץ ה-VCD שנוצר ב-GTKWave:
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, test);
// ...
end
אחרי ש-vvp sim מסתיים, יהיה לכם dump.vcd ליד קובץ המקור. פתחו אותו:
gtkwave dump.vcd
GTKWave טוען את הקובץ ומציג את עץ האותות בחלונית משלו. גררו את האותות שמעניינים אתכם לאזור הגלים. אנחנו מכסים את זה בפירוט ב-Dumpfile ו-VCD.
שגיאות נפוצות
iverilog: command not found: הבינארי לא נמצא ב-PATH. ב-Windows זה בדרך כלל אומר שהמתקין לא הורץ עם עדכון PATH. ב-macOS/Linux זה בדרך כלל אומר ש-Homebrew/apt לא סיימו, או שאתם ב-shell שלא טען מחדש את ה-PATH שלו (סגרו ופתחו מחדש את הטרמינל).
syntax error בשורה שנראית נכונה: בדקו שאתם לא משתמשים ביכולת של SystemVerilog במצב Verilog רגיל. העבירו -g2012 ל-iverilog כדי להפעיל את SystemVerilog-2012:
iverilog -g2012 -o sim main.v
Unknown module בזמן קומפילציה: או שקובץ המקור של המודול לא הועבר ל-iverilog, או ששם המודול ביצירת המופע לא תואם בדיוק את הצהרת ה-module. Verilog רגישה לאותיות גדולות וקטנות.
waveform ריק ב-GTKWave: ה-testbench לא קרא ל-$dumpfile ול-$dumpvars, או שהסימולציה הגיעה ל-$finish לפני שאותות כלשהם השתנו. הוסיפו לפחות $dumpvars(0, top) אחד ותנו לסימולציה לרוץ מספיק זמן כדי שיהיו מעברים.
מה הלאה
בין אם התקנתם מקומית ובין אם נשארתם עם הדפדפן, המסמך הבא מסביר איך כותבים את המודול השלם הראשון שלכם מאפס: הצהרת מודול, פורטים, קטע קטן של לוגיקה צירופית, ו-testbench סביבו.
שאלות נפוצות
איך מתקינים Verilog?
אין תוכנה אחת בשם 'Verilog': זו שפה, ומה שמתקינים הוא קומפיילר/סימולטור. ללמידה, הבחירה הסטנדרטית היא Icarus Verilog (הפקודות iverilog ו-vvp), יחד עם GTKWave לצפייה ב-waveforms. ב-macOS השתמשו ב-brew install icarus-verilog gtkwave; ב-Debian/Ubuntu השתמשו ב-apt install iverilog gtkwave; ב-Windows הורידו את המתקין המוכן מהאתר של Bleyer.
צריך להתקין משהו כדי ללמוד Verilog?
לא. העורך בדף הזה מריץ את הקוד שלכם תחת iverilog ו-vvp בענן ומציג את ה-waveform של ה-VCD ישירות בדף. אפשר להשלים כל מסמך במדריכים האלה בלי להתקין שום דבר. התקנה מקומית שימושית כשרוצים לשמור קבצים, לנהל פרויקט בבקרת גרסאות, או לעבוד על תכנון גדול מדי לעורך שבדפדפן.
מה ההבדל בין iverilog ל-vvp?
iverilog הוא הקומפיילר: הוא הופך את קובצי המקור .v שלכם לקובץ בינארי של סימולציה. vvp הוא סביבת הריצה שמבצעת את הבינארי הזה. רצף הפקודות הטיפוסי הוא iverilog -o sim main.v test.v ואחריו vvp sim. רוב סקריפטי העבודה עוטפים את שניהם.
האם Icarus Verilog חינמי?
כן. Icarus Verilog הוא קוד פתוח תחת GPL/LGPL. אין שרת רישוי, אין תקופת ניסיון, והוא מתאים גם ללמידה וגם לשימוש מסחרי. החלופות המסחריות (ModelSim, VCS, Xcelium) בתשלום; לכל מה שמכוסה במסמכים האלה, Icarus מספיק.
איך בודקים את הגרסה של iverilog?
פתחו טרמינל והריצו iverilog -V. אמור להופיע מספר גרסה כמו Icarus Verilog version 12.0. אם מקבלים 'command not found', הבינארי לא נמצא ב-PATH: הריצו שוב את המתקין או הוסיפו את תיקיית ה-bin לתצורת ה-shell.