JR2BMU logo

FPGAボード Cmod S7を導入してみた(6)

  前回はIPコアを活用してDDSシンセサイザを実装しました。今回はFPGAに内蔵されているADCを使用してみます。

1.XADCモジュールのシミュレーション

1-1.XADCの概要

  Cmod S7ボードに搭載されているFPGAには内蔵ADC(XADCと呼ばれている)が含まれています。これにより内蔵温度計や電源電圧の監視に加えて、外部信号の変換も可能です。変換出力は12bitで、変換速度は最大1MSPSです。
  I/Oポートは以下の通りです。温度計、電圧計、外部アナログ信号はマルチプレクサで選択できます。ADCは2つ実装されていますが、同時に変換はできず2チャンネル使用する場合は変換に倍の時間がかかります。変換された値はStatus Registersの所定のアドレスに書き込まれます。レジスタの値はDRP(dynamic reconfiguration port)と呼ばれるインターフェースを通じてロジック回路に読み出すことができます。
  XADCの動作をはControl resistersで指定します。初期設定はIPコアのウィザードで指定できるので、その後変更させない場合には操作の必要はありません。

xadc

1-2.XADC IPコアの設定

  シミュレーション用にIPコアを設定します。IPカタログからXADC Wizardを選択します(①~③)。今回はほとんどデフォルトの設定でシミュレーションしてみます。ウィザードでは、温度・電圧アラーム機能をオフにしておき(④)、入力をVP VNに変更してください(⑤)。

xadc_setup

1-3.シミュレーション

次に、ADCの動作をシミュレーションしてみます 以下のテストベンチと波形ファイル(正弦波)をご利用ください。
    テストベンチ  [ADC_tb.sv]
    波形ファイル  [design.txt]

他のIPと同様に、作成されたADCモジュールのテンプレートは以下の場所にあります。
    \(プロジェクト名)\(プロジェクト名).gen\sources_1\ip\xadc_wiz_0\xadc_wiz_0.veo
このテンプレートを用いてテストベンチを作成しています。I/Oピンの詳細はデータシートをご覧ください。
  ADCを含むシミュレーションでは、テストベンチ内(HDL記述)でアナログ入力を設定することができません。その代わりに、波形データを与えることができます。デフォルトでは以下の場所にテンプレートが作成されています。
    \(プロジェクト名)\(プロジェクト名).gen\sources_1\ip\xadc_wiz_0\design.txt
波形ファイルの内容は、次のように時間に対しアナログ入力値を指定したものです。
wave

入力波形を変更するにはファイルの中身を編集します。 全ての入力を指定する必要はなく、時間と使用する入力値のみで構いません。上記のファイルでは、VP-VN端子間に正弦波を入力しています。
  ダウンロードしたファイルを2つともプロジェクトに追加し、Run simulation --> Run behavioral simulationでシミュレーションを開始します。シミュレーションを進めて、以下の写真のようにdo_out[15:0]に正弦波が表示されれば成功です。do_outは16bitですが、信号は上位12bitのみで下位4bitは0埋めされています。

xadc_setup

2.実装

  XADCの動作確認として、以下の構成を実装してみます。XADCでアナログ入力をデジタル信号に変換し、デジタル信号をΔΣ型DACでアナログ信号に変換して出力します。

xadc_setup

ソースコードはこちらをご利用ください。
    Constraint file[Cmod-S7-25-Master.xdc]
    HDL file [ADC.sv, DeltaSigma.sv, top.sv]

実装に当たり、以下の3点をご確認、変更してください。

2-1.入出力ピン

  Cmod S7ボードではアナログ入力としてDIPピン32,33が用意されています。ボード上のFPGAとの配線は図の通りです。FPGA上のアナログ入力は差動用の端子が用意されていますが、ボード上でシングルエンドに変換されています。
  DIP32: AD5P -AD5N
  DIP33: AD12P-AD12N
また、FPGAのアナログ入力範囲は0~1V(差動)ですが、ボード上に分圧抵抗が実装されているので最大3.3V(シングルエンド)まで入力可能です。
xadc_setup

今回は入力としてAD5P-AD5N(DIP32)を使用します。また、出力はDIP9番ピンとし、ボード上の12MHzクロックも使用します。

2-2.Clocking wizardの設定

  こちらの手順で入力クロック(12MHz)から120MHzのクロックを生成します。

2-3.XADCの設定

  IPに変更を加えます。ウィザードを再度開き(①)、②クロック周波数を120MHzにし、③入力チャネルをVAUXP5 VAUXN5に変更してください。

xadc_edit


3.動作確認

  書き込みは(1)Synthesis、(2)Implementation、(3)Generate bitstream、(4)Programの順番で行います。
  DIP32番ピンにアナログ信号(電圧範囲0~3.3V)を入力します。写真のようにDIP9番ピンにLPFを接続し、出力を確認します。以下に結果の例を示します。入力信号に対応した出力が得られていれば成功です。

connection


connection


  今回はFPGAに内蔵されたADCの使い方をご紹介しました。次回はFIRフィルタを実装します。

©JR2BMU All rights reserved.

inserted by FC2 system