オリジナルの無線LANをFPGAで作ろう 3ページ目


過去の記事はこちら 1ページ目 2ページ目


1-送信FPGA-IQ変調器
2ページ目からのつづきです。FPGAのファームウェアを作っていきます。。
開発環境が使いやすいAlteraのFPGAを使用します。後述しますが、Altera開発ツールはSignalTapUというデバッガが無償で使えるのが特に便利です。
Altera開発環境のインストール方法については別のところで説明します。

FPGAファームウェアは先に送信側を作ります。
Alteraの開発ツールのQurtusUを起動したら、まずは、プロジェクトを作成します。
メインメニュー → File → New Project Wizard でプロジェクト作成ウィザードが開きます。

Nextをクリックすると、プロジェクト名と作成ディレクトリを指定する画面が開きます。

プロジェクト名は"musen_lan"にして、デスクトップに"musen_lan"というディレクトリを作成しておいてプロジェクトの保存場所にしました。
Nextをクリックすると、プロジェクトに追加するファイルを指定する画面が開きます。

特に追加するファイルはありませんので、何もせずにNextをクリックします。次はFPGA型名を指定する画面が開きます。

EP4CE15E22C7というCyclone4シリーズのQFP144パッケージのスピードグレード7のデバイスを選択します。
FPGAの型名は後で変更することも可能です。
Nextをクリックすると、EDAツールの設定画面が開きます。

特に設定はありませんので、何もせずにNextをクリックします。最後にプロジェクトのサマリーが表示されます。

Finishをクリックしてプロジェクト作成ウィザードは完了です。

FPGAのファームはVerilog-RTLやVHDLのコードで作成するケースが多いですが、今回は回路図をメインにしてファームを作成していきます。
回路図だとファーム全体の構成がひと目で見て理解するすることができます。
まずは回路図を新規作成します。メインメニュー → File → New で新規ファイル作成画面が開きます。

ファイル種別の一覧から Block Diagram / Schematic File を選ぶと、新規回路図が作成されます。
回路図は等間隔に点が並んだものです。

回路図に前頁のIQ変調器と同じものを作っていきます。

まずは乗算器を作ります。回路図上にマウスポインタを持ってきて左ダブルクリックするとシンボル作成画面が開きます。

シンボル一覧からlibraries→arithmetic→lpm_multを選択すると乗算器の詳細パラメータ設定画面が開きます。

作成する乗算器に名前をつけます。ファームウェアによっては種類の違う複数の乗算器を使用することもありますから名前をつけて区別します。
デフォルトのlpm_multi0のままで大丈夫ですからNextをクリックします。次にビット幅設定画面が出てきます。

AxB(通常の乗算)か、AxA(2乗)かの選択は、通常の乗算を選んで、入力ビット幅はA,Bともに16ビットに、出力ビット幅は14ビットを選びます。
16ビットx16ビットの乗算の出力は32ビットですが、下位18ビットは乗算器内部で捨てて14ビット出力とします。
乗算器の後段で32ビットの精度は必要ありませんので、乗算器の出力で下位ビットを捨ててしまいます。
Nextをクリックすると次のパラメータ設定画面が出てきます。

B入力を変数にするか定数にするかは変数を選択し、符号付きか符号なしかは符号付きを選択し、インプリメンテーションはデフォルトを選択します。
符号付きについて少し補足しますと、2の補数を使用します。
Nextをクリックすると次のパラメータ設定画面が出てきます。

パイプラインは8段パイプラインに設定してaclrとclkenのチェックボックスははずしておきます。最適化はデフォルトを選択します。
パイプラインとは、乗算結果が出るまでに複数クロックサイクルを要するような回路構成のことです。
パイプライン段数を増やすほどに結果が出るまでのクロックサイクル数は増えますが、最高動作周波数はあがります。
ファームウェア全体の最高動作周波数に対して乗算器の動作周波数がボトルネックになるケースが多いのですが、
この場合には乗算器をパイプライン化することで最高周波数の問題を解決できる場合があります。
Nextをクリックすると次の設定画面が開きます。

シミュレーション設定は何も変えずにNextをクリックします。

サマリーも特に何も変えずにFinishをクリックします。乗算器が作成されて回路図に乗算器が追加されます。


次に加算器を作ります。乗算器の時と同じように回路図上にマウスポインタを持ってきて左ダブルクリックするとシンボル作成画面が開きます。

シンボル一覧からlibraries→arithmetic→lpm_add_subを選択すると加減算器の詳細パラメータ設定画面が開きます。

加算器の名前はデフォルトのlpm_add_sub0のままで大丈夫ですからNextをクリックします。次にビット幅と加減算の設定画面が出てきます。

ビット幅は14にして、加算・減算・加減算の種別は加算を選択します。
ビット幅は入力・出力どちらも14ビットですので、出力がロールオーバーする場合があります。ロールオーバーしないように使用します。
Nextをクリックすると次のパラメータ設定画面が出てきます。

変数+変数か、定数+変数か、変数+定数かは、変数+変数を選択します。符号なしか符号付きかは、符号付きを選択します。
Nextをクリックすると次のパラメータ設定画面が出てきます。

キャリーイン、キャリーアウト、オーバーフローフラグは今回は使用しません。
Nextをクリックすると次のパラメータ設定画面が出てきます。

加算器はパイプライン構成にはしません。
Nextをクリックすると次のパラメータ設定画面が出てきます。

シミュレーション設定は何も変えずにNextをクリックします。

サマリーも特に何も変えずにFinishをクリックします。加算器が作成されて回路図に乗算器が追加されます。

次に10MHz発振器(NCO)を作ります。乗算器・加算器と作り方が少し違います。メインメニュー → Tools → MegaWizard Plug-In Manager で新規モジュール作成画面が開きます。

モジュール一覧からDSP→Signal Generation→NCO v11.1を選びます。名前はNCOにします。 NextをクリックするとNCOウィザードが出てきます。

Step1 Parameterizeをクリックすると、パラメータ設定画面が出てきます。

Parametersタブを開いて、GenerationはAlgorithmはMultiplier-Basedを、Precisionは上から順に32・16・16を、PhaseDithering無しを設定します。

Implementationタブを開いて、Frequency Modulationありの16ビットを、Phase Modulationなし、OutputsはDual Outputを設定します。
他項目はデフォルトでOKです。

上記のウィザードのStep2 Set Upp Simulationは特に設定はありません。
Step3 GenerateをクリックしてNCOを生成します。
NCOを生成完了したら、回路図で左ダブルクリックすると、シンボル一覧に先ほど作ったNCOが加わっていますから、NCOを選択して回路図に追加します。

乗算器・加算器・発振器を作成して回路図に配置した様子です。乗算器は2個使いますから、1個作ったらコピペしてください。


次回は、送信FPGAに必要な機能を引き続き作っていきます!

2015年1月9日 記
4ページ目に続く

戻る