Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

UART レシーバー用の FIFO インターフェイス DPI コンポーネントの生成

この例では、UART レシーバーと統合するための FIFO バッファ インターフェイス用の SystemVerilog DPI コンポーネントを生成する方法の完全なワークフローを示します。インターフェイスはMATLABで作成され、HDL シミュレーターにエクスポートされます。UART レシーバーとそのテストベンチ用の SystemVerilog ファイルも提供されます。

デモの目的で、この例では 64 ビット Windows 7 で Modelsim 10.3c を使用します。ただし、これと同じ手順を他のシステムやシミュレータでも簡単に複製できます。

要件と前提条件

この例に必要なサードパーティ製品:

  • シミュレーター:Mentor Graphics® ModelSim®/QuestaSim® または Cadence® Xcelium™

  • サポートされている C コンパイラの 1 つ:Microsoft® Visual C++、または GNU GCC

背景

ユニバーサル非同期送受信機 (UART) は、シリアル ラインを介してデータを送受信する回路です。UART は通常、RS-232 標準で使用され、受信機と送信機が含まれています。ただし、この例では受信機のみが使用されます。

シリアル送信は 0 の「スタート ビット」で始まり、その後にデータ ビットが続き、「パリティ ビット」と「ストップ ビット」で終わります。シングルバイトの送信を次の図に示します。

転送は非同期であり、クロック情報がないことを意味します。そのため、受信機と送信機は使用するボー レート、ストップ ビット、およびパリティ ビットについて合意する必要があります。この例では、1 バイトがボー レート 19,200、1 ストップ ビット、パリティ ビットなしで転送されます。

次の図に示すように、オーバーサンプリング スキームを使用して、ボー レートの 16 倍のレートでデータ ビットの中間点を推定します。

次の回路図は、UART レシーバーの設計を示しています。

手順 1: MATLAB 設計

最初のステップは、設計の要件を満たすMATLABコードを作成することです。テストベンチで要件を把握することを試みる必要があります。この例では、設計は 8 ワードの先入れ先出し (FIFO) バッファーで構成されています。

  1. デザイン: FIFO_Buffer

  2. テストベンチ: FIFO_Buffer_tb

手順 2: MATLABテストベンチが要件を捉えていることを確認する

テストベンチを実行して実行時エラーがないことを確認すると、次の図がプロットされるはずです。

FIFO_Buffer_tb

テストベンチは次の方法でデザインを実行していることに注意してください。

  • クロックサイクル<15:6 バイトを書き込み (書き込み信号が有効、読み取り信号が無効)、その後 6 バイトを読み取ります (読み取り信号が有効、書き込み信号が無効)。

  • クロックサイクル>15:読み取りと書き込みを同時に行います。(例:書き込まれたバイトは次のクロック サイクルで読み取られます)。

手順 3: DPI コンポーネントを生成し、HDL シミュレーターで動作を確認します。

コンポーネントを生成するには、次のコマンドを実行します。

dpigen -testbench FIFO_Buffer_tb FIFO_Buffer -args {0,int8(0),0}

次の図は、この例に関連するファイルを示しています。

DPIGEN が DPI コンポーネントとそのテストベンチを生成したら、以下の手順に従って SystemVerilog テストベンチを実行できます。

  • ModelSim/QuestaSim を GUI モードで起動します。

  • 現在のディレクトリを、HDL シミュレータのコード生成ディレクトリの下のcodegen/dll/FIFO_Buffer/dpi_tbに変更します。

  • 次のコマンドを入力してシミュレーションを開始します

do  run_tb_mq.do

次の波形が生成されます。

これは、6 バイトの書き込みと読み取りを行った後、8 バイトの書き込みと読み取りを同時に行うMATLABテストベンチと一致することに注意してください。

  • シミュレーションが終了すると、コンソールに次のテキストが表示されるはずです。

**************TEST COMPLETED (PASSED)**************

手順 4: 生成された DPI コンポーネントを UART レシーバー デザインに統合する

DPI コンポーネントの動作が検証されたら、それを UART レシーバーに統合します。次の図は、さまざまなコンポーネントに必要なファイルを示しています。

DPI コンポーネントが統合された UART レシーバーを実行するために、「uart_rx_FIFO_tb.sv」という名前のテストベンチが提供されています。UART コンポーネントは、以下に示すようにテストベンチでインスタンス化されます。

// Instantiate DUT generated using MATLAB Based SystemVerilog DPI
FIFO_Buffer_dpi u_FIFO_Buffer_dpi(
.clk(clk),
.clk_enable(clk_enable),
.reset(reset),
.wr(rx_done_tick),
.w_data(dout),
.rd(rd),
.Empty(Empty),
.r_data(r_data),
.Full(Full)
);

手順 5: UART レシーバーをシミュレートする

デザインを正常にシミュレートするには、次のファイルが同じフォルダー内にあることを確認してください。

ステップ 3 と同様に、Modelsim を開き、以下を使用して .do ファイルを実行します。

do run_tb.do

次の波形が生成されます。

テストベンチでは、6 つの ASCII 文字 (「MATLAB」) がシリアル「rx」信号を介して転送され、FIFO バッファに書き込まれます。6 番目の文字転送が完了すると、「rd」信号がアサートされ、文字 (「MATLAB」) が「r_data」に戻されます。

参照

Pong P. Chu (2008), FPGA Prototyping by Verilog Examples. Hoboken, New
Jersey: John Wiley & Sons, Inc.