これから設計していく論理回路は、「プロジェクト」という単位で
扱います。
早速、新しいプロジェクトを作ってみましょう。
まずは手始めに、NOTゲート1個を、入力にスイッチA、
出力にLEDをつないでみることにします。
File→New Projectで、新しいプロジェクトの作成を開始します。
プロジェクトの名前やファイルを置くディレクトリ名などを
入力します。
この例では、プロジェクトの名前にnot_gateとしています。
ファイルを置くディレクトリは、みなさんはファイルサーバ上に
適当なフォルダ("VHDL"など)をつくり、その中に作っていってください。
続いて、今回使うEDX-001に載っている、設計した論理回路を
書き込むFPGAとしてSpartan2 (XC2S100)を選びます。
そのほかにも、このSpartan2のパッケージ、ピン数などの情報を
選ぶ必要がありますので、↑この図の通りに選んでおきます。
特に、Deviceのところで"XC2S100"を選んでいるか注意しましょう。
続いて、設計する回路を記述するVHDLファイルを作成します。
今回は、新しいファイルを作りますので、
ここで新しいファイルを作るために、
New Sourceボタン(赤丸内)を押します。
新しく作成するファイルの種類とファイル名を入力します。
今回は、VHDLで回路を設計しますのでVHDL Moduleを選び、
ファイル名は、not_gateとしておきます。
Next> ボタンで次へ。
続いて、この回路の入力・出力を定義します。
この例では、入力(in)としてPSW_Aという名前の端子と、
出力(out)としてLED_0という名前の端子を使うことを指定しています。
また、最初は、構造記述で回路を記述することにしますので、
Architecture Nameのところに、archと書いておきます。
ちなみに入力のPSWは、プッシュスイッチ、の意味で、
EDX-001に載っているプッシュスイッチAを入力信号として
使う、という意味です。
また出力のLED_0は、EDX-001のLED_0(実際には"7"の番号が
ついているLED)を出力信号として使う、という意味です。
これで、これから設計する回路のVHDLファイルの定義がすみましたので、
ここで確認し、Finishボタンを押します。
新しいディレクトリ(フォルダ)を作成するかを聞かれるので、Yes。
ファイルはこれだけなので、Next。
このほかに、すでにあるファイルを使うかどうかを聞かれますが、
今回はないので、そのままNext。
これで、いまから設計を始める回路のプロジェクトの定義が
すみましたので、確認して、Finish。
これで、新しく回路の設計をはじめる準備が整いました。
↑画面内のnot_gate.vhdタブ(赤丸内)を押してみると、
いまから設計する回路not_gateを記述するVHDLファイルで、
必要な箇所(おまじないや、entity宣言など)が
既に記入されていることがわかります。
これは、プロジェクトの作成時に、使う入出力の名前などを
指定していたので、それにあわせて、VHDLのお決まりの記述の部分を
雛形(テンプレート)として自動的に作成されたのでした。
便利ですね。
では、本題であるNOTゲートを、architecture内に
↑このように記入をしておきましょう。
まず、論理合成するために、
左上のSources for: をSynthesis/Implementationに選んでおきます。
続いて、ピン接続の定義、を行います。
例えばEDX-001のスイッチA(PSW_A)は、実際にはFPGA(XC2S100)の
50番ピンに接続されています。
(箱の中に入っている回路図で確認してみましょう)
このように、「実際の回路」で、「どのピンにどの信号を
割り当てるか」は、実際の装置で決まっていますので、
それにあわせて論理合成(正しくは配置配線)を行う必要があります。
今回使う入出力は、PSW_Aが50番ピン、LED_0が57番ピンに
つながっています。
このような指定は、UCF (User Constrain File)と呼ばれるファイルに
記述をしておく必要があります。
そこで、左上のSources:画面内で、設計対象の回路を記述している
not_gate.vhdを選んだ状態で、
右クリック→Add New File、で新しいファイルの追加を選び、
続くファイルの種類を選ぶ画面では、"Implementation Constraint File"を
選び、ファイル名をnot_gate.ucfとします。
その後、そのファイルを開くと、中身の何もないテキストファイルが作成されるので、
↑図のように指定を記述します。
ここでは、例えばPSW_Aという信号(NET)の場所(LOC=Location)を
"P50"(50番ピン)、として指定しています。
これで指定がすみましたので、早速論理合成をかけてみます。
Processes画面内のGenerate ProgrammingFileを右クリックし、
Runを選んで、実行します。
これは、論理合成に続いて、FPGAに書き込む情報への変換も
自動的に行うように指定しています。
実行中は、このような水色の丸がクルクル回るので、
終わるまで待ちます。
(ちょっと時間がかかります)
緑色のチェックマークがついたら、無事完了です。
赤丸の×印になったら、どこかでエラーがあったので、
エラーメッセージを見ながら修正をします。
では早速、設計した回路をEDX-001に書き込んでみましょう。
EDX-001を、PCとUSBケーブルで接続し、
PC側でコマンドプロンプトを立ち上げ(スタート→アクセサリ内)を
立ち上げます。
EDX-001のリセットをするためにINITボタンを押した後、
コマンドプロンプトで↑図のように入力すると、
設計した回路が転送されます。
(not_gateの部分が、今回設計した回路のプロジェクト名)
※コマンドプロンプトを開いたら、まずプロジェクトのファイルを保存しているフォルダ(ディレクトリ)に移動します。例えばMaguro(N:)へのドライブの変更は、「N:」と入力し、そこから先のフォルダ(ディレクトリ)の移動は、例えば"VHDL"という名前のフォルダ(ディレクトリ)に移動するときには、cdコマンドを使って「cd VHDL」のように入力します。
※「COM3:」のところは、EDX-001をどのUSBポートに接続するかで
変わります。演習室のPCの場合、前面の左側のUSBポートの場合は「COM4:」、
前面の右側のUSBポートの場合は「COM5:」となるようです。
よくわからない場合は、デバイスマネージャを開き、
「ポート」のところで、HuMANDATA...という名称のポートがあるはずですので、
そこに書いてあるCOM?の?の部分の番号を使います。
転送が終わると、EDX-001のDONEランプが点灯しているはずです。 転送が終わると、すぐに回路は動作を開始していますので、 スイッチAを押してみましょう。
ちなみに、スイッチAは、「負論理」、すなわち、 押すと'0'、押していないと'1'、の値が与えられます。 またLED_0も「負論理」、すなわち、 回路の出力が'0'のときに点灯、'1'のときに消灯します。 設計した回路がNOTゲートとして動作しているこをと確認しておきましょう。
また、動作記述で4ビット加算器を記述するのもよいでしょう。 その場合は、新しい回路をつくるときに、Architecture name のところをbehvとしておき、architecture内のbegin以降に、 4ビット加算器のVHDLでの動作記述を追加すればよいでしょう。