Verilog

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש

Verilog היא שפת תיאור חומרה (Hardware Description Language, בקיצור HDL), המשמשת לתכנון, אימות ויישום של מעגלים חשמליים ספרתיים ואנלוגיים ומעגלים משולבים בצורה המזכירה תכנות בשפת C. השפה שימושית מאד בתכנון מעגלים ברמת מעברי אוגר (Register Transfer Level, בקיצור RTL).

Synth.gif

היסטוריה

Verilog הוצגה לראשונה בשנת 1984. הצורך בשפה לתיאור החומרה התפתח עם המעבר לתכנון מעגלים משולבים המכילים מאות אלפי טרנזיסטורים. תכנון בסדר גודל כזה נקרא: VLSI (ראשי תיבות: Very Large Scale Integration). בשלב הזה אי אפשר היה עוד להסתפק בתכנון המסורתי הסכמטי (תב"מ), ואצל מתכנני המעגלים נוצר צורך בשפה שתאפשר תכנון מהיר של מעגלים, על ידי תיאור מעגלים מורכבים ברמה אבסטרקטית, במונחים של פונקציונליות וזרימת נתונים. שפות התכנות הקיימות בעת פיתוח השפה, כמו C ו־Pascal, לא איפשרו בנייה של מעגלים חשמליים בצורה נוחה, כיון שהן אינן מותאמות לתיאור של חומרה.

קיימות שפות תיאור חומרה מתחרות לורילוג, אשר הבולטת בהן היא VHDL.

מבנה השפה

שפת ורילוג מותאמת לתיאור חומרה ומאפשרת כתיבה ברמות שונות של אבסטרקציה: מהרמה החשמלית (switch level) שהיא הקרובה ביותר לחומרה, דרך השערים הלוגים (gate level), רמת מעברי אוגר (RTL) ועד לרמת האלגוריתם (behavioural) שהיא רמת האבסטרקציה הגבוהה ביותר המתארת את הפונקציונליות ודומה בצורת הקידוד לשפות כמו C.

אחד ההבדלים החשובים בין שפת חומרה לשפת תוכנה הוא, שבשפת חומרה השורות ("הפקודות") מתבצעות במקביל ולא בטור.

ורילוג היא שפה קלה ללימוד ולשימוש, ונתמכת על ידי כלים רבים המשמשים בתהליך התכנון של השבב- כלי הסימולציה וכלי הסינתזה.

דוגמאות

  • דוגמה לקוד ומעגל ספרתי של אוגר פשוט:
Register transfer level - example toggler.svg
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 length = 20;
    input rst;  // These inputs/outputs 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) 
        begin                             
            if (rst)             // This simulates a reset of the counter                   
                count <= 5'b0;
            else if (ce) // This simulates the enables both being true
                if (count == length-1)
                    count <= 5'b0;
                else
                    count <= count + 5'b1;  // 5'b1 is 5 bits wide and 
                                         // equal to the value 1.
        end

    // the value of tc is continuously assigned the value of the expression
    assign tc = (ce && (count == length-1));

endmodule

תחביר השפה ופקודות

קבועים

ההגדרות של קבועים ב Verilog כוללות גם את רוחב המשתנים. התחביר כדלהלן: <רוחב הקבוע>'<אות הבסיס><הערך>

דוגמאות:

  • 12'h123 - Hexadecimal 123 (using 12 bits)
  • 20'd44 - Decimal 44 (using 20 bits - 0 extension is automatic)
  • 4'b1010 - Binary 1010 (using 4 bits)
  • 6'o77 - Octal 77 (using 6 bits)

ראו גם

קישורים חיצוניים