□FPGA/CPLD
◆CPLD
◆FPGAの構造と特徴
IOB
※専用ROM
パラレルコンフィギュレーション
※電源
内部コア電源 1.0~1.8V
補助電源 2.5V程度(コンフィギュレーション用など、不要なものあり)
I/O電源 1.8~3.3V
_◇CLB
コンフィギャラブル・ロジック・ブロック
例)XILINX Spartan-3E
※CLB
4スライスで構成
2スライス=SLICEM
ロジック、分散メモリ、シフトレジスタ
スライス間にはキャリ、シフト線
2スライス=SLICEL
ロジックのみ
スライス間にはキャリ線
一端がインターコネクト(近接ブロック配線)
一端がスイッチマトリックスに接続
※スライス
1LUT,キャリロジック、シーケンシャルエレメント
MUX
※LUT
RAMで構成される
スイッチマトリックス
_◇CPLDとFPGAの比較
FPGAの方が設計の自由度が高い
反面、CPLDは信号経路が限られ、遅延時間を予測しやすい
FPGAは同一の機能でも配置配線結果により遅延時間が変化する
_◇FPGAのスタートシーケンス
①電源投入
②FPGAセットアップ(PROG RESET)
③bit stream 書き込み
④DONE信号(フローティング)
⑤スタートアップ処理
⑥DCMリセット
⑦RESET解除(USER I/O RESET)
⑧DCM_LOCK
⑨クロック必要とする内部回路初期化,DDR, PCIなど
⑩システムスタート
◆Xilinx ISE WebPack
_◇設計プロセス
仕様
全体設定(内部構成の決定)
詳細設計(各モジュール設計)
コーディング
論理合成
シミュレーション
配置配線
ROM書き込み
※デザイン階層の選択
※デザイン入力
※論理シミュレーション
※デザイン制約
※合成、最適化
※デザインサイズと性能の評価
※配置配線
※タイミングシミュレーション
(スタティックタイミング解析)
※ビットストリーム生成
※デバイスへのダウンロード、デバッグ
※ROMファイル生成
_◇開発対象の選択
Device Properties画面で選択する
①Family
FPGAのファミリを指定する
例)Spartan3Eなど
②Device
ファミリ内のデバイス型番を指定する
例)XC3S100E
③Package
パッケージを指定する
例)VQ100
④Speed
速度グレードを指定する
例)-5
_◇設計スタイル
プロジェクト開始時にHDLなのかどうか選択する
ソースの種類は
VerilogならVerilog Module
⇒.vなるVerilogソースが作られる
_◇作業手順A
①Projectの新規作成
File>New Project…
プロジェクト名、フォルダ、設計スタイル、ターゲットデバイス等選択
②ソースコードの新規作成
Project>New Source…
ソースの種類を選択、ファイル名を指定
③論理合成
Source forウインドウで、Synthesis/Implementationを選択。
Synthesize – XSTをダブルクリック。
④ピン配置の指定(制約-Constraints-ファイルの作成)
Project>New Source…
ソースの種類を選択、ファイル名を指定
ProcessesウインドウのUser ConstraintsからEdit Constraints(Text)選択
ucfファイル(制約ファイル)
例)FPGA端子への信号のアサイン
NET “n_name” LOC = “Pxx”;
#ピン配置例
NET “CLK_I” LOC = “P63”;
※クリックすることで専用エディタも立ち上がる。
⑤テクノロジマッピングと配置配線
Implement Designをダブルクリック
⑥レポート確認
ゲート使用率、I/Oピン等
⑦ビットストリームの作成
ProcessesウインドウからGenerate Programming Fileを右クリック
CategoryからStartup Optionを選択し、FPGA Start-UP ClockをJTAG Clockに設定
Generate Programming Fileをツリー展開してからダブルクリック
⑧FPGAへのダウンロード
Configure Device(iMPACT)を選択、JTAG経由をチェックしてFinish
正しくFPGAが認識されたら、
Assign New Configuration Fileでビットストリーム選択
_◇作業手順B
①プロジェクトを作る
File > New Project
プロジェクト名、Project Location(フォルダ)決定
FPGA情報を入力
②Verilogコーディング
New Source — Verilog Module ファイル名
入出力ポートの設定
(既存ソースの追加)
Finish
>>>空のソースが出来ているので、これに記述
③ピンと信号の割り当て
Floor Plan I/O
LOC … ピン番号 Pxx
I/O Std … インタフェースレベル
3.3V電源ならばLVCOMS33
Drive Str
出力ピンのドライブ電流。デフォルト12mA
Slew
出力ピンのスルー・レート
Termination
入力ピンのプルアップ、プルダウン、KEEPER(状態保持)
File>Saveで書き込み
Bus Delimiterは外部ツール使わないなら XST Defaultで良い。
④論理合成~配置配線
Generate Programming File
⑤ダウンロードケーブルの接続
⑥ROMデータ作成
ISEの出力 BITファイル(FPGAそのものに書き込むフォーマット)
ROM書き込み MCSファイル(コンフィグROMのフォーマット)
iMPACTで変換
Manage Configuration Project
ROMの種類(Xilinx PROM)
ROMファイル名をつける
モード(シリアル)
ROMの型番
書き込む数だけBITファイルを選択し、Generate FileでMCS生成
⑦ROM書き込み
iMPACT
Boundary Scan 右クリック Initialize Chainでデバイス探索
(ボードを接続し、電源いれておくこと)
書き込みファイルでMCSとBIT指定
書き込みオプション(書き込み前消去、ベリファイ、自動ロード)
Programで書き込み
_◇言語テンプレート
Editメニューの言語テンプレートにより各種の雛形をコピーして使うことができる
_◇構文チェック
構文チェックはシンセシスモードで、ソースファイルを選択し、XSTの中で選ぶことができる
_◇シミュレーション
ビヘイビア(遅延考慮せず)
ポスト・ルート(遅延あり)
※テストベンチは、ターゲットとなるソースを選んでおいて、Project>New SourceからTest Bench WaveFormを選んで生成することができる。
⇒ファイルがセーブされたことを必ず確認すること
※ビヘイビアモードで、[Generate Expected Rusults]を実行することで、セルフチェックテストベンチ波形を自動的に生成することができる
_◇論理合成 XST
Synthesis/Implementation内の
Synthesize – XST
_◇制約
制約ファイルは Implementation Constraint Fileより作成する
⇒Associate Source画面で対応するソースと関連ずける
⇒制約ファイルは .ucf
⇒User ConstraintsよりEditする
①入出力信号とI/Oピンの配置を指定する
※制約ファイル例
#
NET “CLK_I” LOC = “P63”;
#
NET “GPIN” LOC = “P38”;
#
NET “LED1_O” LOC = “P17”;
NET “LED2_O” LOC = “P18”;
NET “LED3_O” LOC = “P22”;
NET “LED4_O” LOC = “P23”;
#
NET “SW1_I” LOC = “P30”;
NET “SW2_I” LOC = “P27”;
NET “SW3_I” LOC = “P26”;
NET “SW4_I” LOC = “P24”;
#
NET “DP_OEN<1>” LOC = “P86”;
NET “DP_OEN<2>” LOC = “P85”;
NET “DP_OEN<3>” LOC = “P3”;
NET “DP_OEN<4>” LOC = “P2”;
#
NET “DP_O<1>” LOC = “P94”;
NET “DP_O<2>” LOC = “P92”;
NET “DP_O<3>” LOC = “P98”;
NET “DP_O<4>” LOC = “P71”;
NET “DP_O<5>” LOC = “P70”;
NET “DP_O<6>” LOC = “P90”;
NET “DP_O<7>” LOC = “P91”;
NET “DP_O<8>” LOC = “P95”;
#
NET “GPIO<1>” LOC = “P32”;
NET “GPIO<2>” LOC = “P33”;
NET “GPIO<3>” LOC = “P35”;
NET “GPIO<4>” LOC = “P36”;
NET “GPIO<5>” LOC = “P40”;
NET “GPIO<6>” LOC = “P41”;
NET “GPIO<7>” LOC = “P47”;
NET “GPIO<8>” LOC = “P48”;
NET “GPIO<9>” LOC = “P49”;
NET “GPIO<10>” LOC = “P53”;
NET “GPIO<11>” LOC = “P54”;
NET “GPIO<12>” LOC = “P57”;
NET “GPIO<13>” LOC = “P58”;
NET “GPIO<14>” LOC = “P60”;
NET “GPIO<15>” LOC = “P61”;
#
NET “TxD” LOC = “P83”;
NET “RxD” LOC = “P79”;
#
_◇実装
implementation
テクノロジマッピング mapping
配置配線 place and routing
_◇確認
①実装終了後にかならずレポートを確認すること
ターゲットFPGA
ゲート使用率
I/Oピン使用率
I/Oパッド使用状況
ピン配置リスト
_◇ビットストリームの作成
Generate Programming File
.bit 拡張子のビットストリームを作成する
_◇FPGAへのダウンロード
Configure Device(iMPACT)を使用する
_◇ChipScope
内部信号のJTAG確認ツール。オプション
_◇コアジェネレータ
各種回路(FFTなど)自動生成
ソースは通常のモジュール
veoファイルにテンプレートがあるので、呼び出し部はこれをコピーして組み込む
※ネットリスト.ngcでの提供もある。
_◇Xilinxへの論理合成(Verilog)ノート
if文は必ずalways文の中で使う。
case文はalways文の中でだけ使える。case文の出力信号はレジスタ型にする。case文での入力信号は、ネット型とレジスタ型のどちらでも使える。
残りゲート数の確認
Project > View Design Summary > Device Utilization Summary
Slice単位
_◇Architecture Wizard
_◇CORE Generator
_◇HELP
メニューからのHELP以外に、ツールを選択してF1キーにより該当のHELPを表示させることができる
◆StateCAD