פרדיגמות | תכנות מובנה |
---|---|
תאריך השקה | 1984 |
הושפעה על ידי | C, Fortran |
השפיעה על | SystemVerilog |
סיומת | v |
Verilog היא שפת תיאור חומרה (Hardware Description Language, בקיצור HDL), המשמשת לתכנון, אימות ויישום של מעגלים חשמליים ספרתיים ואנלוגיים ומעגלים משולבים בצורה המזכירה תכנות בשפת C. השפה שימושית מאוד בתכנון מעגלים ברמת מעברי אוגר (Register Transfer Level, בקיצור RTL).
ב-2009 אוחד תקן ורילוג (IEEE 1364-2005) עם תקן SystemVerilog.
Verilog הוצגה לראשונה בשנת 1984. הצורך בשפה לתיאור החומרה התפתח עם המעבר לתכנון מעגלים משולבים המכילים מאות אלפי טרנזיסטורים. תכנון בסדר גודל כזה נקרא VLSI (ראשי תיבות של Very Large Scale Integration). בשלב הזה אי אפשר היה עוד להסתפק בתכנון המסורתי הסכמטי (תב"ם), ואצל מתכנני המעגלים נוצר צורך בשפה שתאפשר תכנון מהיר של מעגלים, על ידי תיאור מעגלים מורכבים ברמה אבסטרקטית, במונחים של פונקציונליות וזרימת נתונים. שפות התכנות הקיימות בעת פיתוח השפה, כמו C ו־Pascal, לא איפשרו בנייה של מעגלים חשמליים בצורה נוחה, כיוון שהן אינן מותאמות לתיאור של חומרה.
קיימות שפות תיאור חומרה מתחרות לוורילוג, אשר הבולטת בהן היא VHDL.
שפת ורילוג מותאמת לתיאור חומרה ומאפשרת כתיבה ברמות שונות של אבסטרקציה: מהרמה החשמלית (switch level) שהיא הקרובה ביותר לחומרה, דרך השערים הלוגים (gate level), רמת מעברי אוגר (RTL) ועד לרמת האלגוריתם (behavioural) שהיא רמת האבסטרקציה הגבוהה ביותר המתארת את הפונקציונליות ודומה בצורת הקידוד לשפות כמו C.
אחד ההבדלים החשובים בין שפת חומרה לשפת תוכנה הוא, שבשפת חומרה השורות ("הפקודות") מתבצעות במקביל ולא בטור.
ורילוג היא שפה קלה ללימוד ולשימוש, ונתמכת על ידי כלים רבים המשמשים בתהליך התכנון של השבב – כלי הסימולציה וכלי הסינתזה.
always@(posedge clk)
Q<=~Q;
module Div20x (rst, clk, ce, count,tc);
/*מונה חילוק ב-20 עם כניסת בקרה
enable CE is a clock enable
a counter using the Verilog 95 language */
parameter size = 5;
parameter max_value = 20;
input rst;//These represent the module connections
input clk;
input ce;
output [size-1:0] count;
output tc;
reg [size-1:0] count;// Signals assigned within an always
// (or initial) block must be of type reg
wire tc; // Other signals are of type wire
/* The always statement below is a parallel
execution statement that executes any time
the signals rst or clk transition from low to high */
always @ (posedge rst or posedge clk)
if (rst) //This simulates a reset of the counter
count<=5'b0;
else if (ce)
//This simulates the enables both being true
if (count==max_value-1)
count<=5'b0;
else
count<=count+5'b1;
//the value of tc is continuously assigned
assign tc = (ce && (count == max_value-1));
endmodule
ההגדרות של קבועים ב-Verilog כוללות גם את רוחב המשתנים. התחביר כדלהלן: <רוחב הקבוע>'<אות הבסיס><הערך>
דוגמאות: