記事概要
- PolarFire SoC Discovery KitのLibero SoC プロジェクト作成
- PolarFire SoC Discovery KitのLチカ
- PolarFire SoC Discovery Kitの自作RTL作成(7SEG)
Libero SoCプロジェクト(Lチカ)
AN5282を参考にLチカのプロジェクトを作成します。前回はLibero SoCでのほぼ全ての作業をTCLファイルで済ませてしまったので、今回はLibero SoCを用いたPolarFire SoCの開発の流れを把握することを目的としています。
なお、手順の詳細についてはApplication NoteやLibero SoCのユーザガイドを参考いただくとして、本記事では概要や私が気になった点を中心に記します。
Libero SoC プロジェクト開発の流れ
Libero SoC プロジェクトにおける基本的な作業の流れは以下のようになっています。
- Libero SoCプロジェクトの作成
- デザインの実装
- デザインのシミュレーション1
- デザインの論理合成
- デザインの制約指定
- デザインの配置配線
- デザインの書き込み(Programming)
- デザインの実機動作確認
Libero SoCプロジェクトの作成
- Libero SoCを起動して、[Project > New Project]をクリック。
- 表示されたウィンドウの指示に従ってプロジェクトに関する事項を入力する。悩むところはそれほどないと思います。気になったのは以下くらいでしょうか。
- Enable block creation: チェックしない
作成したコンポーネントをブロックとして別のデザインで再利用できるようにする設定。再利用可能とすると、IO制約等が指定できなくなり、作成した回路がプログラムできないようです。今回はプログラムしますので、Disableとしています。 - Reserve pins for probes: チェックする(デフォルト)
チェックするとSmartDebugを使ってデバッグできるように一部のピンが設定されるようです。デバッグも試してみたいので有効にしました。チェックしない場合はそれらのピンをGeneralピンとして利用できるようですが、本キットではそれらのピンが基板上で既にFT4232H(USBシリアル変換モジュール)に接続されているので、そもそも他の用途には使えない気がします。 - System Controller Suspend Mode: チェックしない
デバイスの初期化以後にシステムサービスや一部のタンパ機能を利用不可とする設定です。資料によると攻撃者からのデザイン改変やSEUでのタンパ応答によるゼロ化を防ぐための機能のようです。今回はあくまでデバイスの評価が目的なので、有効化しません。製品の適用先によって個別に検討すべき事項かと思います。
- Enable block creation: チェックしない
- Finishをクリック。
デザインの実装
Application Note通りにSmartDesignを使ってデザインを作成します。Libero SoCではLibero SoCに登録されているマクロやIPをGUI上でポチポチしてデザインが作成できます。いわゆるノーコードというものでしょうか。
- Desing FlowタブのCreate SmartDesignをダブルクリック。
- 表示されたウィンドウでNameを入力し、OKを選択。
- Catalog IPタブを開き、IP(AND2)をドラッグ&ドロップでSmartDesignのGUI上にインスタンスする。ちなみにSmartDesignのGUIをcanvasと呼ぶようです。
- 3つのピンを選択して、右クリックから[Promote to Top Level]を選択する。これによってSoCの外部ピンに割り当て可能となります。今回はIPが1つしかないですが、複数のIPや自分で作成したデザインがある場合はIP同士の内部接続も必要です。
- デザインを保存して、Generate Componentでデザインを生成。
- Design Hierarchyタブを開くと、Build Hierarchyと警告されているので、クリックした後に、作成したsmartdesignを右クリックしてSet As Rootを選択。これでデザインは完成です。
デザインの論理合成
今回はDesign FlowタブのImplement Design > Synthesizeを右クリックし、Runを選択するだけです。Synplify Proでデザインが論理合成されます。
ネットリストファイルはよくある.edfや.ednではなく、.vmのようです。Libero SoCのユーザガイドには
Tip: Structural Verilog (.vm) is the only supported synthesis output format in PolarFire.
と記載されていますが、このあたりよくわかっていません。.vmファイルはゲートレベルのVerilog記述のはずなので、本ファイルをそのままシミュレーションに使えそうですが、どうもLibero SoCでは[Generate Simulation File]という機能で、別途シミュレーション用のVerilogファイルを作成できるようです。
デザインの制約指定
ピン制約
Libero SoCのI/O Editorを使って制約を与えます。
- Design FlowタブでManage Constraintsをダブルクリック。
- 表示されたタブで[Edit > Edit with I/O Editor]を選択する。
- 表示されたウィンドウのPort Viewタブで3つのピン制約(A, B, Y)を設定する。特筆すべき事項はなく、下記の画像通りになればOKです。
- 制約を保存して、I/O Editorを閉じる。
タイミング制約
今回はCLKを使っていないのでタイミング制約を与えていません。したがって、配置配線時にも特にタイミング検証に関するレポートは出力されません。
デザインの配置配線
Design FlowタブのPlace and Routeを右クリックしてRunを選択すると配置配線が実行されます。
デザインの書き込み(Programming)
前回の記事ではジョブファイルとFlashProを用いて書き込みましたが、今回はこのままLibero SoCを用いてデザインを書き込みます。
- ホストPCとデバイスをUSB接続する。
- Design Flowタブの[Program Design > Run PROGRAM Action]を実行する。
デザインの実機動作確認
デザインの書き込み完了後、SWITCH1、もしくは、SWITCH2を押下するとLED1が消灯するようになりました。
今回の回路ではSWの状態により下記のようFPGAへの入力が変化します。どちらかのスイッチが押下されていればANDゲートの出力(=T18ピンの出力)がLowとなり、どちらも押下されていない場合はHighになります。
T18ピンの出力はその後バイポーラトランジスタ(MBT2222ADW1T1G)のベースに入力され、LEDの点灯/消灯を決定します。
SWの状態 | FPGAへの入力 (T19 or U18) |
---|---|
OFF | High |
ON | Low |
おまけ
LED2~7が点灯しっぱなしで邪魔なので消灯させたいと思います。
LED8も消灯したいのですが、現段階では変更できなそうなので、一旦放置します。
Package Pin Assignment Tableの入手と確認
MPFS095T-FCSG325のPackage Pin Assignment Tableをここから入手します。
中身を確認するとLEDに接続される全てのPINのUnused Conditionは以下のように記載されています。
DNC, LiberoSOC Defined High-Z with weak pull up ON. Connection to VDD18 through resistor (10K ohm) is allowed. CLAMP=ON
Do Not Connectなので、量産設計等ではPIN制約を与えずに外部機器に接続するようなことがないようにするべきと思いますが、前回作成したデザインでは制約を特に与えずに接続されていました。ユーザに対しては建前上DNCとはしているものの、Microchip社がデモデザインを評価キットで作成する分には問題ないと判断しているのでしょうか。
ともかく、現状のデザインではLEDに接続される全てのPINがweak pull upされているので、各PINの出力がHighとなって、7つのLEDが点灯し続けているようです。
デザインの変更
LED2~7に接続されている各ピンの出力をLowに固定します。
-
SmartDesignのcanvas上で右クリックをして、Add Port...を選択して、LED[6:1]ポートを出力ポートとして追加。
-
デザインを保存して、Generate Component。
-
論理合成実行後に、I/O Editorで下記のようにLED[1]からLED[6]までのピン制約を変更
ポート | ピン | LED | Function |
---|---|---|---|
LED[1] | V17 | LED2 | HSIO |
LED[2] | U20 | LED3 | HSIO |
LED[3] | U21 | LED4 | HSIO |
LED[4] | AA18 | LED5 | HSIO |
LED[5] | V16 | LED6 | HSIO |
LED[6] | U15 | LED7 | HSIO |
LED[7] | E1 | LED8 | MSSIO |
なお、LED8のみHSIOではなく、MSSIOとなっています。このIOはMSSと呼ばれるPolarFire SoCのプロセッサ専用のIOピンのようで、I/O Editorを使ってFabricのポートを接続することはできませんでした。
実際にこれらのMSSIOピンのペリフェラル(UART, I2C, USB等)を設定する場合には、PFSoC MSS Configuratorを使うようです。
デザインフローの再実行・実機確認
先ほどと同様に配置配線を実施し、デザインを書き込むと無事LED2~7が消灯しました。
今後したいこと
- デモデザイン(#1で完了)
- FPGA開発(今回途中まで)
- Baremetal Application開発
- Linux Application開発
- AXI4によるMSS-Fabricの協調動作開発
- mikroBusインタフェースの活用
- Raspberry piインタフェースの活用
-
今回は実施していません ↩