Verilog

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

Verilog
パラダイム構造化
初登場1984年 (1984
安定リリース
IEEE 1364-2005 / 2005年11月9日; 16年前 (2005-11-09
規律の入力静的弱い
ファイル名拡張子.v、.vh
方言
Verilog-AMS
に影響を受けた
パスカルエイダCFortran
影響を受ける
SystemVerilog

IEEE 1364として標準化されたVerilogは、電子システムのモデル化に使用されるハードウェア記述言語(HDL)ですこれは、抽象化レジスタ転送レベルでのデジタル回路の設計と検証で最も一般的に使用されますまた、アナログ回路ミックスドシグナル回路の検証、および遺伝子回路の設計にも使用されます。[1] 2009年に、Verilog標準(IEEE 1364-2005)がSystemVerilogに統合されました。標準、IEEE標準1800-2009を作成します。それ以来、Verilogは正式にSystemVerilog言語の一部になっています。現在のバージョンはIEEE標準1800-2017です。[2]

概要

Verilogなどのハードウェア記述言語は、伝播時間と信号強度(感度)を記述する方法が含まれているため、ソフトウェア プログラミング言語に似ています。代入演算子には2つのタイプがあります。ブロッキング割り当て(=)、および非ブロッキング(<=)割り当て。非ブロッキング割り当てにより、設計者は一時ストレージ変数を宣言して使用することなく、ステートマシンの更新を記述できます。これらの概念はVerilogの言語セマンティクスの一部であるため、設計者は大規模な回路の説明を比較的コンパクトで簡潔な形式ですばやく記述できます。Verilogの導入時(1984年)、Verilogは、電子回路の文書化とシミュレーションにグラフィカルな回路図キャプチャソフトウェアと特別に作成されたソフトウェアプログラムをすでに使用していた回路設計者にとって、大幅な生産性の向上を示しました。

Verilogの設計者は、エンジニアリングソフトウェア開発ですでに広く使用されているCプログラミング言語に類似した構文の言語を望んでいましたCと同様に、Verilogは大文字と小文字を区別し、基本的なプリプロセッサを備えています(ただし、ANSI C / C ++よりも洗練されていません)。その制御フローキーワード(if / else、for、while、caseなど)は同等であり、演算子の優先順位 構文上の違いには、変数宣言に必要なビット幅、手続き型ブロックの境界設定(Verilogは中括弧{}の代わりにbegin / endを使用)、およびその他の多くの小さな違いが含まれます。Verilogでは、変数に明確なサイズを指定する必要があります。Cでは、これらのサイズは変数の「型」から推測されます(たとえば、整数型は8ビットの場合があります)。

Verilogデザインは、モジュールの階層で構成されています。モジュールは設計階層をカプセル化し、宣言された入力、出力、および双方向ポートのセットを介して他のモジュールと通信します。内部的には、モジュールには、net /変数宣言(wire、reg、integerなど)、同時および順次ステートメントブロック、および他のモジュールのインスタンス(サブ階層)の任意の組み合わせを含めることができます。シーケンシャルステートメントは、開始/終了ブロック内に配置され、ブロック内で順番に実行されます。ただし、ブロック自体は同時に実行されるため、Verilogはデータフロー言語になります。

Verilogの「ワイヤ」の概念は、信号値(4状態:「1、0、フローティング、未定義」)と信号強度(強い、弱いなど)の両方で構成されます。このシステムにより、複数のソースが共通のネットを駆動する共有信号線の抽象的なモデリングが可能になります。ワイヤに複数のドライバがある場合、ワイヤの(読み取り可能な)値は、ソースドライバとその強度の関数によって解決されます。

Verilog言語のステートメントのサブセットは合成可能です。RTL(レジスタ転送レベル)として知られる合成可能なコーディングスタイルに準拠するVerilogモジュールは、合成ソフトウェアによって物理的に実現できます。合成ソフトウェアは、(抽象的な)Verilogソースをネットリストにアルゴリズム的に変換します。ネットリストは、特定のFPGAまたはVLSIテクノロジで使用可能な基本ロジックプリミティブ(AND、OR、NOT、フリップフロップなど)のみで構成される論理的に同等の記述です。ネットリストをさらに操作すると、最終的に回路製造の青写真(ASIC用のフォトマスクセットや、 ASIC用のビットストリームファイルなど)が作成されます。FPGA)。

歴史

開始

Verilogは、1983年後半から1984年初頭にかけて、Prabhu GoelPhil Moorby 、Chi-Lai Huang、およびDouglasWarmkeによって作成されました。彼の博士号の仕事。[4]このプロセスの権利所有者は、当時独占的でしたが、「Automated Integrated Design Systems」(後に1985年にGateway Design Automationに名前が変更されました)でした。Gateway Design Automationは、1990年にCadence Design Systemsによって購入されました。Cadenceは現在、GatewayのVerilogおよびVerilog-XL(Verilogロジックシミュレータの事実上の標準となるHDLシミュレータ)に対する完全な所有権を持っています。)次の10年間。もともと、Verilogはシミュレーションを記述して許可することだけを目的としていました。言語のサブセットを物理的に実現可能な構造(ゲートなど)に自動合成することは、言語が広く使用されるようになった後に開発されました。

Verilogは、「検証」と「論理」という言葉のかばん語です。[5]

Verilog-95

当時のVHDLの成功が進むにつれ、ケイデンスはこの言語をオープンな標準化に利用できるようにすることを決定しました。ケイデンスは、Open Verilog International(OVI)(現在はAccelleraとして知られている)組織の下でVerilogをパブリックドメインに移しました。Verilogは後にIEEEに提出され、一般にVerilog-95と呼ばれるIEEE標準1364-1995になりました。

同じ時間枠で、ケイデンスは、アナログシミュレーターSpectreの背後に標準サポートを置くためにVerilog-Aの作成を開始しました。Verilog-Aはスタンドアロン言語を意図したものではなく、Verilog-95を含むVerilog -AMSのサブセットです。

Verilog 2001

Verilog-95の拡張機能は、ユーザーが元のVerilog標準で見つけた欠陥をカバーするためにIEEEに返送されました。これらの拡張機能は、Verilog-2001として知られるIEEE標準1364-2001になりました。

Verilog-2001は、Verilog-95からの重要なアップグレードです。まず、(2の補数)符号付きネットと変数の明示的なサポートを追加します。以前は、コード作成者は厄介なビットレベルの操作を使用して符号付き演算を実行する必要がありました(たとえば、単純な8ビット加算のキャリーアウトビットでは、正しい値を決定するためにブール代数の明示的な記述が必要でした)。Verilog-2001での同じ関数は、組み込み演算子+、-、/、*、>>>の1つでより簡潔に記述できます。generate-endgenerateコンストラクト(VHDLのgenerate-endgenerateと同様)により、Verilog-2001は通常の決定演算子(case-if-else)を介してインスタンスとステートメントのインスタンス化を制御できます。生成-終了生成を使用して、Verilog-2001は、個々のインスタンスの接続を制御しながら、インスタンスの配列をインスタンス化できます。ファイルI / Oは、いくつかの新しいシステムタスクによって改善されました。そして最後に、コードの可読性を向上させるために、いくつかの構文の追加が導入されました(たとえば、常に@ *、名前付きパラメーターのオーバーライド、Cスタイルの関数/タスク/モジュールヘッダー宣言)。

Verilog-2001は、商用EDAソフトウェアパッケージの大部分でサポートされているバージョンのVerilogです。

Verilog 2005

SystemVerilogと混同しないようにVerilog 2005IEEE標準1364-2005)は、マイナーな修正、仕様の明確化、およびいくつかの新しい言語機能(uwireキーワードなど)で構成されています。

Verilog標準の別の部分であるVerilog-AMSは、アナログおよびミックスドシグナルモデリングを従来のVerilogと統合しようとします。

SystemVerilog

OpenVeraなどハードウェア検証言語とVerisityのe言語の出現により、Co-Design Automation Inc(Synopsysが買収)によるSuperlogの開発が促進されました。SuperlogとVeraの基盤はAccelleraに寄付され、Accelleraは後にIEEE標準P1800-2005:SystemVerilogになりました。

SystemVerilogはVerilog-2005のスーパーセットであり、設計検証と設計モデリングを支援する多くの新機能を備えています。2009年の時点で、SystemVerilogおよびVerilog言語標準はSystemVerilog 2009(IEEE標準1800-2009)に統合されました。現在のバージョンはIEEE標準1800-2017です。[6]

2つのフリップフロップの簡単な例を次に示します。

モジュール トップレベルクロックリセット); 
  入力 クロック; 
  入力 リセット;

  reg  flop1 ; 
  reg  flop2 ;

  常に @  ポーズ リセット または ポーズ クロック
    if  リセット
      begin 
        flop1  <=  0 ; 
        flop2  <=  1 ; 
      終了
    else
      開始
        flop1  <=  flop2 ; 
        flop2  <=  flop1 ; 
      エンド
モジュールの終了

Verilogの<=演算子は、通常の手続き型言語ではなく、ハードウェア記述言語であることのもう1つの側面です。これは「ノンブロッキング」割り当てとして知られています。そのアクションは、alwaysブロックが実行されるまで登録されません。これは、割り当ての順序は無関係であり、同じ結果を生成することを意味します。flop1とflop2は、クロックごとに値を交換します。

もう1つの代入演算子=は、ブロッキング代入と呼ばれます。割り当てが使用される場合=、ロジックの目的で、ターゲット変数はすぐに更新されます。上記の例では、ステートメント=で代わりにブロッキング演算子が使用されていた場合<=、flop1とflop2は交換されませんでした。代わりに、従来のプログラミングと同様に、コンパイラはflop1をflop2に等しく設定することを理解します(その後、冗長ロジックを無視してflop2をflop1に等しく設定します)。

カウンタ回路の例は次のとおりです。

モジュール Div20x  rst  clk  cet  cep  count  tc ); 
//タイトル'20分周カウンターと有効化 ' 
//有効化CEPはクロック有効化のみ
//有効化CETはクロック有効化および
// TC出力を有効化// 
Verilog言語を使用したカウンター

パラメータ サイズ =  5 ; 
パラメータ の長さ =  20 ;

 最初に入力;  //これらの入力/出力は
入力 clkを表します;  //モジュールへの接続。
入力 セット; 
入力 cep ;

出力 [サイズ-1 0 ]カウント; _ 出力tc ; 
 

reg  [サイズ-1 0 ]カウント; _ //常に//(または初期)ブロック内で//割り当てられた信号//タイプregである必要があります  
                      
                      
                      

ワイヤー tc ;  //他の信号はワイヤータイプです

//以下のalwaysステートメントは並列
実行ステートメントです
//シグナルが
// rstまたはclkがlowからhighに遷移するたびに//実行されます

常に @  posedgeclk またはposedgerst  if rst //これにより、cntrカウントがリセットされます< = { size { 1'b0 } } ; else if cet && cep //両方を有効にしますtrue begin if count == length --1 count < = { size { 1'b0 } } ; そうでなければカウント<=カウント  
    
      
  
      
    
         
          
      
           +  1'b1 ; _ 終わり
    


// tcの値は継続的に割り当てられます//式の値
assigntc = cet && count == length --1 ));       

エンドモジュール

遅延の例:

... 
reg  a  b  c  d ; 
ワイヤー e ; 
...
常に @(b または e 
  begin 
    a  =  b   e ; 
    b  =  a  |  b ; 
    5  c  =  b ; 
    d  =  6  c  ^  e ; 
  終わり

上記のalways句は、他のタイプの使用方法を示しています。つまり、リスト内のエンティティ(bまたはe)のいずれかが変更されるたびに実行されます。これらのいずれかが変更されると、aにはすぐに新しい値が割り当てられ、ブロック割り当てにより、bには後で新しい値が割り当てられます( aの新しい値を考慮に入れます)。5時間単位の遅延の後、cにはbの値が割り当てられ、c ^ eの値は非表示のストアに隠されます。次に、さらに6時間単位が経過すると、dには隠された値が割り当てられます。

プロセス内(初期または常にブロック)から駆動されるシグナルは、タイプregである必要がありますプロセスの外部から駆動される信号は、ワイヤータイプである必要がありますキーワードregは、必ずしもハードウェアレジスタを意味するわけではありません。

定数の定義

Verilogでの定数の定義は、幅パラメーターの追加をサポートしています。基本的な構文は次のとおりです。

<ビット幅> '<ベースレター> <数値>

例:

  • 12'h123 – 16進数123(12ビットを使用)
  • 20'd44 – 10進数44(20ビットを使用– 0拡張は自動)
  • 4'b1010 –バイナリ1010(4ビットを使用)
  • 6'o77 – 8進数77(6ビットを使用)

合成可能な構成

Verilogは、HDL(ハードウェア記述言語)と広く見なされています。Verilogには、実際のハードウェアにアナログがないステートメントがいくつかあります(例:$ display)。その結果、言語の多くはハードウェアを記述するために使用することができません。これは、一般的にVerilog言語の定義そのものを適切に再特性化する必要があることを意味しているように思われます。ただし、ここで紹介する例は、実際のゲートに直接マッピングされている言語の古典的な(そして限定された)サブセットです。

// Muxの例—同じことを行う3つの方法。

//最初の例では、連続代入
ワイヤ アウトを使用しています; 
割り当て = sel _  a b ;     

// 2番目の例では、//プロシージャを使用し
て同じことを実行します。

reg  out ; 
常に @ a または b または sel 
  begin 
    case sel 
      1'b0 out = b ;  1'b1 out = a ; _ エンドケースエンド  
         
    
  


//最後に—手続き型構造
で// if / elseを使用できます。reg  out ; 
常に @(a または b または sel 
  if  sel 
    out  =  a ; 
  else 
    out  =  b ;

次の興味深い構造は、透明なラッチです。ゲート信号が「パススルー」に設定されている場合、入力を出力に渡し、入力をキャプチャして、ゲート信号が「ホールド」に遷移したときに保存します。ゲートが「ホールド」に設定されている間、出力は入力信号に関係なく安定したままになります。以下の例では、ゲートの「パススルー」レベルは、if句の値がtrueの場合、つまりgate = 1の場合になります。これは、「gateがtrueの場合、dinは継続的にlatch_outに供給されます」と読み取られます。if句がfalseになると、latch_outの最後の値が残り、dinの値とは無関係になります。

//透過ラッチの例

reg ラッチアウト; 
常に @(gate または din 
  if gate 
    latch_out  =  din ;  //パススルー状態
    //ここではelseは必要ないことに注意してください。変数
    // latch_outは、ゲートが
    //ハイの間、dinの値に従います。ゲートがローになると、latch_outは一定のままになります。

フリップフロップは次の重要なテンプレートです。Verilogでは、Dフリップフロップが最も単純であり、次のようにモデル化できます。

reg  q ; 
常に @(posedge  clk 
  q  <=  d ;

この例で注目すべき重要な点は、非ブロッキング割り当ての使用です。基本的な経験則は、always句内に posedgeまたはnegedgeステートメントがある場合に<=を使用することです。

Dフリップフロップの変形は、非同期リセットを備えたものです。ステートメント内の最初のif句はリセット状態になるという規則があります。

reg  q ; 
常に @ posedgeclk またはposedgereset  if reset q < = 0 ; そうでなければq <= d ;  
  
      
  
      

次のバリアントは、非同期リセットと非同期セット条件の両方を含みます。ここでも規則が適用されます。つまり、リセット期間の後にセット期間が続きます。

reg  q ; 
常に @ posedgeclk またはposedgereset またはposedgeset if reset q < = 0 ; _ else if set q <= 1 ; そうでなければq <= d ;     
  
      
  
  
      
  
      

注:このモデルを使用してセット/リセットフリップフロップをモデル化すると、シミュレーションエラーが発生する可能性があります。次の一連のイベントのテストについて考えてみます。1)リセットがハイになります2)clkがハイになります3)セットがハイになります4)clkが再びハイになります5)リセットがローになり、次に6)セットがローになります。セットアップ違反がないと想定し、違反を保留します。

この例では、always @ステートメントは、リセットの立ち上がりエッジが発生したときに最初に実行され、qが値0になります。次にalwaysブロックが実行されるのは、clkの立ち上がりエッジであり、qは再び値0に保たれます。 0. setがハイになると、alwaysブロックが実行されます。これは、リセットがハイであるため、qが0のままになります。この状態は、実際のフリップフロップによっては正しい場合と正しくない場合があります。ただし、これはこのモデルの主な問題ではありません。リセットがローになっても、そのセットはまだハイであることに注意してください。実際のフリップフロップでは、これにより出力が1になります。ただし、このモデルでは、alwaysブロックは、レベルではなく、セットとリセットの立ち上がりエッジによってトリガーされるため、発生しません。フリップフロップのセット/リセットには、別のアプローチが必要になる場合があります。

最後の基本的なバリアントは、入力にマルチプレクサを供給するDフロップを実装するものです。マルチプレクサには、フロップ自体からのd入力とフィードバックがあります。これにより、ゲート負荷機能が可能になります。

// EXPLICITフィードバックパスを
常に使用する基本構造 @(posedge  clk 
  if gate 
    q  <=  d ; 
  そうでなければ
    q  <=  q ;  //明示的なフィードバックパス

//より一般的な構造は、フィードバックが存在
することを前提としています//これは、
ハードウェアコンパイラが//フィードバックを解釈する方法であるため、安全な前提です。この構造
は//ラッチのように見えます。違いは、
// '' '@(posedge clk)' ''と非ブロッキング '' '<=' '' 
//
常に @(posedge  clk 
  if gate 
    q  <=  d ;  //「else」マルチプレクサは「暗黙的」です

この説明には「初期」ブロックが記載されていないことに注意してください。この構造では、FPGAとASICの合成ツールが分かれています。FPGAツールでは、「リセット」信号を使用する代わりに、reg値が確立される初期ブロックを使用できます。ASIC合成ツールはそのようなステートメントをサポートしていません。その理由は、FPGAの初期状態がFPGAのメモリテーブルにダウンロードされるものであるためです。ASICは実際のハードウェア実装です。

初期および常に

Verilogプロセスを宣言する方法は2つあります。これらはalwaysおよび最初のキーワードです。alwaysキーワードは、フリーランニングプロセスを示します最初のキーワードは、プロセスが1回だけ実行されることを示します。両方の構成はシミュレーター時間0で実行を開始し、両方ともブロックの終わりまで実行されます。alwaysブロックが終了すると、(再度)スケジュールが変更されます最初のブロックがalwaysブロックの前に実行されると考えるのはよくある誤解です。実際、最初の-blockは、 always -blockの特殊なケースと考える方が適切です。これは、最初に完了した後に終了します。

//例:
初期
  開始
    a  =  1 ;  //時間0 
    1でregaに値を割り当てます;  // 1時間待つ単位
    b  =  a ;  // regaの値をregbendに割り当て
  ます

常に @(a または b  // aまたはbが変更されるたびに、プロセスを実行し
ます
  if  a 
    c  =  b ; 
  そう
    でなければd  =  〜b ; end //このブロックで完了し、今度は一番上に戻ります(つまり、@ event-control)
 

常に @(posedge  a // regaが低から高への変化を持っているときはいつでも実行
  a  <=  b ;

これらはこれら2つのキーワードの典型的な使用法ですが、2つの重要な追加の使用法があります。これらの中で最も一般的なのは、 @(...)感度リストのないalwaysキーワードです。以下に示すように、常に使用することができます。

always 
  begin  //常に時間0で実行を開始し、決して停止しません
    clk  =  0 ;  // clkを0に設定
    1 ;  // 1時間待つ単位
    clk  =  1 ;  // clkを1に設定します
    1 ;  // 1時間単位が終了するのを待ちます
  //実行を続けます—したがって、最初の先頭に戻ります 

alwaysキーワードは、永久に実行されるという意味で 、C言語の構文while(1){..}と同様に機能します。

もう1つの興味深い例外は、 foreverキーワードを追加した最初のキーワードの使用です。

以下の例は、上記の常に例と機能的に同じです

initial  forever  //時間0で開始し、begin / endforeverを繰り返し
  ます
    beginclk  =  0 ;  // clkを0に設定
    1 ;  // 1時間待つ単位
    clk  =  1 ;  // clkを1に設定します
    1 ;  //ユニット
  終了を1回待ちます

フォーク/参加

フォーク/結合ペアは、並列プロセスを作成するためにVerilogによって使用されます。フォーク/結合ペア間のすべてのステートメント(またはブロック)は、実行フローがフォークにヒットすると同時に実行を開始します。実行は、 forkjoinの間で最も長く実行されているステートメントまたはブロックが完了すると、結合後に続行されます。

初期
  フォーク
    $ write "A" );  // charAを出力
    $ write "B" );  //文字B
    を出力begin 
      1 ;  // 1時間待つ単位
      $ write "C" );  // charC
    の終了
  結合を出力します

上記のように、「ABC」または「BAC」のシーケンスを印刷することができます。最初の$ writeと2番目の$ writeの間のシミュレーションの順序は、シミュレーターの実装によって異なり、シミュレーターによって意図的にランダム化される場合があります。これにより、シミュレーションに偶発的な競合状態と意図的な非決定論的動作の両方を含めることができます。

VHDLはVerilogのような複数のプロセスを動的に生成できないことに注意してください。[7]

競合状態

実行の順序は、Verilog内で常に保証されているわけではありません。これは、古典的な例で最もよく説明できます。以下のコードスニペットについて考えてみます。

初期
  a  =  0 ;

初期
  b  =  a ;

最初の
  開始
    1 ; 
    $ display "Value a =%d Value of b =%d" a b ); 
  終わり

aとbの値は何が出力されますか?初期ブロックの実行順序に応じて、ゼロとゼロ、またはゼロとその他の任意の初期化されていない値になります。$ displayステートメントは、#1の遅延のため、両方の割り当てブロックが完了した後に常に実行されます。

演算子

注:これらの演算子は、優先順位順に表示されていません

演算子タイプ 演算子記号 実行された操作
ビット単位 ビット単位のNOT(1の補数)
ビットごとのAND
| ビットごとのOR
^ ビット単位のXOR
〜^または^〜 ビット単位のXNOR
論理的 いいえ
&&
|| また
割引 削減AND
〜& リダクションNAND
| 削減または
〜| 削減NOR
^ 削減XOR
〜^または^〜 削減XNOR
算術 + 添加
- 減算
- 2の補数
* 乗算
/ 分割
**** べき乗(* Verilog-2001)
関連した >> 大なり記号
< 未満
> = 以上
<= 以下
== 論理的同等性(ビット値1'bXは比較から削除されます)
!= 論理的不等式(ビット値1'bXは比較から削除されます)
=== 4状態の論理的等式(ビット値1'bXはリテラルと見なされます)
!== 4状態の論理的不等式(ビット値1'bXはリテラルと見なされます)
シフト >> 論理的な右シフト
<< 論理的な左シフト
>>> 算術右シフト(* Verilog-2001)
<<< 算術左シフト(* Verilog-2001)
連結 {、} 連結
レプリケーション {n {m}} 値mをn回複製します
条件付き 条件付き

4値論理

IEEE 1364標準では、0、1、Z(高インピーダンス)、およびX(不明な論理値)の4つの状態を持つ4値論理が定義されています。競合するVHDLの場合、多値論理専用の標準は、9つのレベルを持つIEEE1164として存在します。[8]

システムタスク

システムタスクは、シミュレーション中に単純なI / Oおよびさまざまな設計測定機能を処理するために使用できます。すべてのシステムタスクには、ユーザーのタスクや機能と区別するために接頭辞$が付いています。このセクションでは、最も頻繁に使用されるタスクの短いリストを示します。それは決して包括的なリストではありません。

  • $ display –印刷して1行を画面に表示し、その後に自動改行を続けます。
  • $ write –改行なしで行を画面に表示するために印刷します。
  • $ swrite –改行なしで行を変数に出力します。
  • $ sscanf –フォーマットで指定された文字列を変数から読み取ります。(* Verilog-2001)
  • $ fopen –ファイルへのハンドルを開きます(読み取りまたは書き込み)
  • $ fdisplay –ファイルから1行を出力し、その後に自動改行を出力します。
  • $ fwrite –改行なしで行をファイルするために印刷します。
  • $ fscanf –フォーマット指定の文字列をファイルから読み取ります。(* Verilog-2001)
  • $ fclose –開いているファイルハンドルを閉じて解放します。
  • $ readmemh –16進ファイルの内容をメモリ配列に読み込みます。
  • $ readmemb –バイナリファイルの内容をメモリ配列に読み込みます。
  • $ monitor –値が変更されたときに、リストされているすべての変数を出力します。
  • $ time –現在のシミュレーション時間の値。
  • $ dumpfile – VCD(値変更ダンプ)形式の出力ファイル名を宣言します。
  • $ dumpvars –オンにして変数をダンプします。
  • $ dumpports –オンにして変数をExtended-VCD形式でダンプします。
  • $ random –ランダムな値を返します。

プログラム言語インターフェース(PLI)

PLIは、VerilogからC言語で記述されたプログラム関数に制御を移すメカニズムをプログラマーに提供します。これは、IEEE Std 1364-2005によって正式に非推奨になり、PLIを完全に置き換える 新しいVerilog ProceduralInterfaceが採用されました。

PLI(現在はVPI)により、Verilogは、テストハーネスマイクロコントローラー命令セットシミュレーターデバッガーなど、C言語で記述された他のプログラムと連携できますたとえば、C関数を提供し、現在のVerilogタスクまたは関数の引数をそれぞれ書き込みおよび読み取りに使用します。 tf_putlongp()tf_getlongp()

シミュレーションソフトウェア

Verilogシミュレーターについては、Verilogシミュレーターのリストを参照してください。

も参照してください

追加資料

類似の言語

Verilogジェネレーター

参考文献

  1. ^ Nielsen AA、Der BS、Shin J、Vaidyanathan P、Paralanov V、Strychalski EA、Ross D、Densmore D、Voigt CA(2016)。「遺伝子回路設計の自動化」科学352(6281):aac7341。土井10.1126 /science.aac7341PMID27034378 _
  2. ^ 1800-2vhhu017-SystemVerilogのIEEE標準-統一されたハードウェア設計、仕様、および検証言語
  3. ^ 「Verilogの発明者はEDAのカウフマン賞を獲得しました」EETimes2005年11月7日。
  4. ^ 黄、Chi-Lai; Su、SYH「ハードウェア記述言語を使用したコンピュータ支援論理システム設計のアプローチ」。1980年12月に台湾の台北で開催された国際コンピュータシンポジウム1980の議事録pp。772–79O。OCLC696254754_ 
  5. ^ 「フィリップレイモンド「フィル」ムーアビーのオーラルヒストリー」(PDF)コンピュータ歴史博物館。2013年4月22日。23〜25ページ。
  6. ^ 1800-2017-SystemVerilogのIEEE標準-統一されたハードウェア設計、仕様、および検証言語
  7. ^ Cummings、Clifford E.(2003)。「SystemVerilog–これはVerilogとVHDLのマージですか?」(PDF)SNUGボストン2003。
  8. ^ ミラー、D。マイケル; ソーントン、ミッチェルA.(2008)。多値論理:概念と表現デジタル回路とシステムに関する合成講義。12.モーガン&クレイプール。ISBN 978-1-59829-190-2
ノート

外部リンク

標準開発

言語拡張機能

  • Verilog AUTOs —業界IPがVerilogコードの保守を簡素化するために使用するオープンソースのメタコメント。