|
Verilog(ヴェリログ)は、デジタル回路の設計用のハードウェア記述言語であり、Verilogの開発環境には、論理シミュレータを含む場合がある。言語とシミュレータを区別する場合、言語の方を「Verilog HDL」と呼ぶ場合もある。 言語の開発にあたっては、ソフトウェア開発者にも受け入れられるようにソフトウェアのプログラム言語のC言語やPascalの要素を取り入れたものとなっている。 ソフトウェアのプログラミング言語との相違点として、文(ステートメント)の実行を必ずしも逐次に行わず、並列実行する場合がある。これは、並列動作する電子回路を記述する言語だからである。また、Verilogモデルは実際のハードウェアの構成に近いモジュールの階層を構成できる。モジュールではまず、入力/出力端子、必要に応じて双方向端子を宣言する。次に、配線を示すwire、記憶素子を示すregとサブモジュールのリストなどを定義する。さらに、続いてその動作を規定する文(ステートメント)や文(ステートメント)をグループにしたブロック群を定義する。ブロックはbeginキーワードで始まり、endキーワードで終わる範囲で定義し、その中は順番に実行する。しかし、各ブロックは並列に実行できる。 Verilog言語には、論理合成を適用して実際の回路に変換可能な記述とそうではない部分がある。設計中のモジュールが全て合成可能な文(ステートメント)だけで記述している場合、適切なソフトウェアを用いて半導体チップの回路、さらにレイアウトデータまで変換することができる。 「Verilog-HDL」という表記が用いられることがあるが、正しくは「Verilog」と「HDL」との間にハイフンが入らない「Verilog HDL」である。
歴史始まりVerilogは、ゲートウェイ・デザイン・オートメーション社が、ハードウェア・モデリング言語とそのためのシミュレータとして1984年頃開発した。その後、同社は1990年にケイデンス・デザイン・システムズが買収した。ケイデンスは、現在も大元のゲートウェイVerilogおよびVerilog-XL論理シミュレータの版権を持っている。 標準化同種のハードウェア記述言語であるVHDLの台頭に対し、ケイデンスはVerilogの規格を公開し標準化する道をとった。すなわちケイデンスはOVI(Open Verilog International)という組織へ版権の一部を移譲した。その後VerilogをIEEEに提出しIEEE 1364-1995として規格化し、Verilog-1995と呼ぶ。なおOVIはその後Accelleraという組織になっている。 標準化にともないVerilogシミュレータは、ケイデンス以外の各社やフリーのものも各種登場するようになった。 Verilog 2001オリジナルのVerilog標準に対する不満を解消するために、Verilog-95に対する拡張をIEEEに提出した。この拡張はVerilog 2001といいIEEE 1364-2001になった。VHDLにあったgenerate文に対応し、大規模設計が容易になった。 Superlog/System VerilogやがてOpenVeraやVerisityのE言語のようなハイ・レベルの検証言語が登場する。このことはその種の機能を盛り込んだVerilog、すなわちコデザイン・オートメーション社によるSuperlogの開発を促すこととなった。コデザイン・オートメーション社は、シノプシスによってその後買収された。SuperlogとVeraの基本部分はAccelleraに寄贈され、次のIEEE標準としてSystemVerilogとVerilogとに分かれた。 言語の最新のバージョンは、アナログおよびアナログ/デジタルのミックス・シグナル・モデルへの対応もなされておりVerilog-amsという。 文法(抜粋)キーワードmodule(入出力端子リスト) .. endmodule
begin .. end
initial
always @(イベント式)
if (条件式) else ..
for(変数定義;条件式;変移)
while(条件式)
input、output
reg、wire
=
<=
assign
function
//、/* .. */
task
and、or、xor(exor)、nand、nor(exnor)、xnor、not
オペレータ(演算子)+、-、*、/
%
~、&、|、^、~^(^~)
&&、||、!
!=、==、!==、===
{}
?:
モジュールの構成Verilogの最小単位はモジュールである。以下に、カウンタ回路の例で説明する。 モジュールはキーワードmoduleで始まる。その後のDiv20xが名前を示し、続く括弧内は端子リストである。6個の端子があり、それぞれの端子の入出力方向はモジュール中のポート宣言(inputとoutput)で指定される。最後のendmoduleでモジュールの終了である。モジュール内には、パラメータ宣言、ポート宣言、レジスタ宣言、イベント宣言、ネット宣言、ステートメントなどを記述する。
//
// 表題 イネーブル付20段カウンター
//
module Div20x (rst,clk,cet,cep,count,tc);
// パラメータ宣言
parameter length = 20; // カウント段数
parameter count_zero = 5'b00000; // 5bit幅,2進数の0を表す
parameter count_one = 5'b00001; // 5bit幅,2進数の1を表す
parameter size = 5; // bit幅,基数の指定を省略すると32bit,10進数になる。
// ポート宣言(外部から本モジュールへの接続を定義する)
input rst; // リセット(正論理)
input clk; // クロック
input cet; // カウンターとTC出力のイネーブル
input cep; // カウンターのみのイネーブル
output [size-1:0] count; // 束線を示す。この場合5bit幅
output tc;
// レジスタ宣言
reg [size-1:0] count; // alwaysまたはinitialブロックでドライブする信号は
// reg型でなければならない
// ネット宣言
wire tc; // 他の信号はwire型。ポート宣言したwire型信号の
// ネット宣言は省略可能であり、省略することも多い。
// always文。rstやclock信号の変化に同期し並列に実行される
always @ (posedge rst or posedge clk) begin
if (rst) begin // 非同期リセット
count <= count_zero;
end else if (cet || cep) begin // イネーブル
if (count == length-1) begin
count <= count_zero;
end else begin
count <= count + count_one;
end
end
end
// assign文。tcの値は実行中、継続的に値が与えられる
assign tc = (cet && (count == length-1));
endmodule
ポート宣言やレジスタ宣言での[a:b]のような形式は、束線(多くはバス)を示す。例えば[3:0]であれば配線が4本あることになる。 プロセス(always とintialブロックのこと)内部からドライブされる信号はreg型である必要があり、他はwire型である。キーワードregが必ずしもハードウェアであるレジスタを意味するものではない(論理合成の結果、FFが割り当てられるとは限らない)。 次にその中のalways節を説明する。always節は、括弧内の信号が指定された条件の変化があったときに実行される。posedgeは信号が0から1に変化した場合を指定する。or は括弧内の信号のどれか1つでも変化した場合を指定する。 always節中の"<="オペレータは通常の手続き型言語と異なりハードウェア記述言語の特徴の一つであり、「ノン・ブロッキング代入」というものである。シミュレーション実行時に並列に評価される。下記の例の場合、cが変化すると、aとbへの代入が同時に行われる(aとbの値が交換される)。これは実際のフリップフロップの動作に近いものである。
reg a, b;
wire c;
always @(c)
begin
a <= b;
b <= a;
end
もう一つの代入文である"="はブロッキング代入といい、手続き型言語のように逐次実行される。下記の例の場合、bかeが変化すると、aに代入された後、bに対する代入が行われる。
reg a, b, c, d;
wire e;
always @(b or e)
begin
a = b & e;
b = a | b;
#5 c = b;
d = #6 c ^ e;
end
なお、#は時間経過を示す。この場合、単位時間5経過の後、cにbが代入される。またc^eは一時変数に記録され、単位時間6経過後にdに代入される。時間は秒など実時間の指定も出来る。 主要ソフトウェア商用シミュレータ
フリー・シミュレータ
シェアウェアー・シミュレータ/ツール商用論理合成
関連項目 |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net