FC2カウンター FPGAの部屋 Efinity IDE
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Sapphire SoC の userTimerDemo で Efinity の BRAM Initial Content Updater を使ってみたがうまく行かない

Sapphire SoC の userTimerDemo をやってみる4(OpenOCD で userTimerDemo プロジェクトを実行)”で Efinity RISC-V Embedded Software IDE からアプリケーションの userTimerDemo.elf ファイルを Xyloni Development Kit の Sapphire SoC にロードして実行することができた。しかし、このソフトウェアは電源ON 時に実行して欲しい。というときに使用するのが、BRAM Initial Content Updater だそうだ。この機能を使ってみたいということで、やってみたのだが、Ubuntu 22.04 パソコンの場合は、BRAM Initial Content Updater で Update memory contentボタンをクリックすると Efinity が落ちてしまった。

BRAM Initial Content Updater の情報は、”Efinity® Software User Guide UG-EFN-SOFTWARE-v13.5 April 2024”の 87 ページの”About the BRAM Initial Content Updater”にある。この情報をもとにやってみよう。

まずは、Efinity の --optimize-zero-init-rom を 0 にする必要があるそうだ。
Efinity の File メニューから Edit Project... を選択した。
Project Editor ダイアログが起動した。
Synthesis タブをクリックした。
--optimize-zero-init-rom が 1 になっていた。
Efinity_244_L240428.png

--optimize-zero-init-rom の 1 の部分をダブルクリックし、出てきた下向き三角をクリックして、0 に変更した。
Efinity_245_L240428.png

--optimize-zero-init-rom が 0 になった。
Efinity_246_L240428.png

OK ボタンをクリックして Project Editor ダイアログを終了した。

Efinity で論理合成、Place & Route、ビットファイルの生成を行った。
Efinity_247_L240428.png

Open BRAM Initial Content Updater をクリックして、BRAM Initial Content Updater を起動した。
Efinity_238_L240428.png

BRAM Initial Content Updater が起動した。
Select Memory Initialization File ボタンをクリックして、hex ファイルを指定する。
Efinity_239_L240428.png

/media/masaaki/Ubuntu_Disk/Efinity/xyloni/design/soc_sap_t8/embedded_sw/sapphire0/software/standalone/userTimerDemo/build/userTimerDemo.hex を指定した。
Efinity_240_L240428.png

sapphire0_inst/u_EfxSapphireSoc/system_ramA_logic/ram_symbol0 をクリックした。
Update Memory Content ボタンをクリックした。
Efinity_248_L240428.png

Update Memory Content ボタンをクリックすると Efinity がコアダンプで落ちてしまった。orz
Efinity_249_L240428.png
  1. 2024年04月28日 05:35 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Sapphire SoC の userTimerDemo をやってみる2(Timer0 を追加した Sapphire SoC を Xyloni にコンフィギュレーション)

Sapphire SoC の userTimerDemo をやってみる1(Efinity で Sapphire SoC に Timer0 を追加)”の続き。

Github の Xyloni soc_sap_t8 に Timer0 を追加して userTimerDemo をやってみようということで、前回は、Efinity 2023.2 で soc_sap_t8 の sapphire0 を編集して Timer0 を追加し、論理合成、Place & Route、ビットファイルの生成を行った。今回は、Efinity Programmer を起動して、Timer0 を追加した Sapphire SoC を Xyloni Development Kit にコンフィギュレーションした。

Efinity 2023.2 で Tools メニューから Open Programmer を選択して、Efinity Programmer を起動した。

Efinity Programmer が起動した。
Select Image File ボタンをクリックした。
Efinity_227_L240425.png

Open Image File ダイアログが表示された。
/media/masaaki/Ubuntu_Disk/Efinity/xyloni/design/soc_sap_t8/outflow/soc_sap_t8.hexファイルを選択して、Open ボタンをクリックした。

Programming Mode を SPI Active モードに変更する。
Efinity_228_L240425.png

Programming Mode を SPI Active モードに変更した。
Xyloni Development Kit を USB ケーブルで Ubuntu 22.04 のパソコンに接続した。
Start Program ボタンをクリックし、HEX ファイルを Xyloni Development Kit に書き込んだ。
Efinity_229_L240425.png

HEX ファイル形式の FPGA のビットストリームを Xyloni Development Kit に書き込んだ。
Efinity_230_L240425.png
  1. 2024年04月25日 08:25 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Sapphire SoC の userTimerDemo をやってみる1(Efinity で Sapphire SoC に Timer0 を追加)

Xyloni Development Kit を使ってみる16(soc_sap_t8 をやってみる8)”で Sapphire SoC で uartEchoDemo を実行することができた。今度は、userTimerDemo をやってみたいということで、Efinity 2023.2 で soc_sap_t8 の sapphire0 を編集して Timer0 を追加し、論理合成、Place & Route、ビットファイルの生成を行った。

Efinity 2023.2 を起動して、soc_sap_t8 プロジェクトを開く。

Project タブの IP の sapphire0 を右クリックし、右クリックメニューから Configure を選択した。
Efinity_214_L240424.png

sapphire0 の IP Configuration ダイアログが開いた。
Timer タブをクリックし、User Timer 0 の Include the Timer 0. のチェックボックスをチェックした。
チェックすると下に項目が増えた。増えた項目はデフォルトのままとした。
Generate ボタンをクリックした。
Efinity_215_L240424.png

Review generation configuration ダイアログが表示された。
Generate ボタンをクリックした。
Efinity_216_L240424.png

Generation Success ダイアログが表示された。
OK ボタンをクリックした。
Efinity_217_L240424.png

Synthesize ボタンをクリックして、論理合成、Place & Route 、ビットファイルの生成を行った。
Efinity_218_L240424.png

論理合成、Place & Route 、ビットファイルの生成が終了した。
Efinity_219_L240424.png

論理合成のレポートファイル、soc_sap_t8.map.rpt の一部を示す。

### ### Resource Summary (begin) ### ### ### 
INPUT  PORTS    :   33
OUTPUT PORTS    :   51

EFX_ADD         :   717
EFX_LUT4        :   3881
   1-2  Inputs  :   767
   3    Inputs  :   1535
   4    Inputs  :   1579
EFX_MULT        :   4
EFX_FF          :   3247
EFX_RAM_5K      :   18
EFX_GBUFCE      :   2
### ### Resource Summary (end) ### ### ###


Place のレポート、soc_sap_t8.place.rpt の一部を示す。

---------- Resource Summary (begin) ----------
Inputs: 31 / 96 (32.29%)
Outputs: 63 / 223 (28.25%)
Clocks: 2 / 16 (12.50%)
Logic Elements: 6193 / 7384 (83.87%)
    LE: LUTs/Adders: 4600 / 7384 (62.30%)
    LE: Registers: 3247 / 5280 (61.50%)
Memory Blocks: 18 / 24 (75.00%)
Multipliers: 4 / 8 (50.00%)
---------- Resource Summary (end) ----------


Route のレポート、soc_sap_t8.timing.rpt の Clock Frequency Summary を示す。

---------- 1. Clock Frequency Summary (begin) ----------

User target constrained clocks
  Clock Name   Period (ns)  Frequency (MHz)    Waveform        Targets
io_systemClk      50.090        19.964      {0.000 25.045} {io_systemClk}  
jtag_inst1_TCK   166.670         6.000      {0.000 83.335} {jtag_inst1_TCK}

Maximum possible analyzed clocks frequency
  Clock Name   Period (ns)  Frequency (MHz)     Edge
io_systemClk      40.623        24.617         (R-R)
jtag_inst1_TCK    41.008        24.385         (F-R)

Geomean max period: 40.815

---------- Clock Frequency Summary (end) ---------------

  1. 2024年04月24日 08:41 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Windows 11 では Efinity は C ドライブ限定で使用した方が良い

昨日の記事でもそうだが、Windows 11 の C ドライブにインストールした Efinity を使用して、D ドライブにプロジェクトを作成すると、デバイスが不正で、内部エラーになってしまうようだ。
Windows 11 の Efinity は C ドライブにインストールして、C ドライブにプロジェクトを作成した方が良い。

C ドライブにインストールした Efinity で D ドライブに Trion T8F81 の xyloni_sapphire プロジェクトを作成する。
Efinity 2023.2 を起動して、File メニューから Create Project... を選択した。
Name に xyloni_sapphire と入力した。
Location に D:/HDL/Efinity/xyloni_sapphire と入力した。つまり D ドライブにプロジェクトを作成する。
OK ボタンをクリックした。
Efinity_188_240413.png

Open Project ダイアログが表示された。
デバイスが不正だとのこと、OK ボタンをクリックするとプロジェクトが閉じて、アボートするようだ。
OK ボタンをクリックした。
Efinity_189_240413.png

Open Project ダイアログが表示された。
Internal error だそうだ。
OK ボタンをクリックした。
Efinity_190_240413.png

作成したプロジェクトは消えてしまった。
Efinity_191_240413.png

なお、C ドライブに xyloni_sapphire プロジェクトを先ほどと同じ設定で作成すると、 xyloni_sapphire プロジェクトが作成た。
Efinity_187_240413.png

安全性をみて、”Efinity は C ドライブにインストールして、C ドライブにプロジェクトを作成した方が良い”という結論になった。
  1. 2024年04月13日 20:26 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit を使ってみる15(soc_sap_t8 をやってみる7)

”Xyloni Development Kit を使ってみる14(soc_sap_t8 をやってみる6)”の続き。

Sapphire SoC のサンプルが”Efinix-Inc/xyloni”の”design/soc_sap_t8”の Sapphire SoC for Xyloni にあるので、やってみようとうことで、前回は、ワークスペースのディレクトリ設定が間違っていたことに気づいたので、もう一度、Ubuntu 22.04 のパソコンでやり直してみたがやはり、OpenOCD の起動時にエラーになった。今回は、Ubuntu 22.04 のパソコンではうまく行かないので、Windows 11 のパソコンで xyloni をダウンロードして、Efinity で xyloni/design/soc_sap_t8/top_sapphire.xml を Open Project... で読み込んだところ、IP のアップデート・ダイアログが表示された。IP をアップデートしたら Internal Error で落ちてしまった。

(2024/04/13:追記) デバイスが不正だとエラーが出た原因は、C ドライブに Efinity をいインストールして、D ドライブにプロジェクトを置いているからだった。プロジェクトを C ドライブに移動したら、デバイスが不正だというエラーは出なくなった。ただし IP はアップデートしようとして失敗している。

Windows 11 のパソコンで xyloni//design/soc_sap_t8 をやってみよう。

https://github.com/Efinix-Inc/xyloni で code の下向き三角をクリックし、Download ZIP を選択し、ダウンロードを行った。
Efinity_178_240412.png

xyloni-master.zip がダウンロードできたので、解凍した。
xyloni-masterが解答できたので、xyloni に名前を変えた。
Efinity_179_240412.png

Efinity を起動して、File メニューから Open Project... を選択した。
Open Project File ダイアログが開いた。
xyloni/design/soc_sap_t8/top_sapphire.xml を選択し、Open ボタンをクリックした。
IP Upgrades ダイアログが表示された。
Yes ボタンをクリックした。
Efinity_180_240412.png

IP Upgrades が進んでいく。
Efinity_181_240412.png

IP Upgrades が Fail した。
Efinity_182_240412.png

OK ボタンをクリックした。
Open Project ダイアログが表示された。
デバイスが不正だとのこと、OK ボタンをクリックするとプロジェクトが閉じて、アボートするようだ。
OK ボタンをクリックした。
Efinity_183_240412.png

Open Project ダイアログが表示された。
Internal error だそうだ。
OK ボタンをクリックした。
Efinity_184_240412.png

プロジェクトがクローズされた。
Efinity_185_240412.png

ダメだったので、次からは、”XyloniボードへのSapphire SoC実装とファームウエア開発プロジェクトの構築”を参考に、一から Sapphire SoC を実装してみよう。
最初に OpenOCD を Windows 11 にインストールする必要があるのだろうか?
”Sapphire RISC-V SoC Hardware and Software User Guide UG-RISCV-SAPPHIRE-v6.0 December 2023”の 8 ページの”Required Software”では、” The RISC-V IDE includes the following packages:”に”xPack GNU RISC-V Embedded GCC”と”OpenOCD Debugger”が入っているので、OpenOCD をインストールする必要はないみたいだ。
それじゃなぜ、Ubuntu 22.04 で OpenOCD をインストールする必要があったんだろうか?なぞだ?
  1. 2024年04月12日 04:21 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Efinix の RISC-V プロセッサの Sapphire SoC を勉強する

Github の Efinix-Inc/xyloni の xyloni/design/Efinity_tutorial は前回で終了した。次は、Efinix の IP の Sapphire RISC-V SoC を使用している Xiloni Development Kit のサンプル・プロジェクトの soc_sap_t8 をやってみようと思っている。
そこで今回は、Sapphire SoC を学習してみよう。

Efinix の”RISC-V SoC: 組み込みコンピューティングの推進”ページを読みながら Sapphire SoC に付いて学習する。
Efinix の”RISC-V SoC: 組み込みコンピューティングの推進”ページから引用して、ブログに書いていく。

Sapphire SoC
Efinity IP マネージャで必要なペリフェラルを選択し、SoC を構成することができるそうだ。

特徴を引用する。

・VexRiscv コア - 6 つのパイプラインステージ (フェッチ、インジェクタ、デコード、実行、メモリ、ライトバック)、割込処理、例外処理
・システムクロック: 20 ~ 400 MHz
・オンチップ RAM: 4 ~ 512 KB (SPI FLASH用のブートローダーを含む)
・DDR または HyperRAM メモリコントローラ
 ・メモリサイズサポート: 4 MB ~ 3.5 GB
 ・ユーザ設定可能な外部メモリバス周波数
 ・外部メモリアクセスのための半二重 AXI3 インターフェイス (最大 256 ビット)
 ・400 MHz DDR クロック周波数、800 Mbps
 ・200 MHz HyperRAM クロック周波数、400 Mbps
・ユーザロジック用の AXI マスタチャネル (最大 2 系統)
・ユーザロジック用の AXI スレーブチャネル (1 系統)
・浮動小数点ユニット
・Linux 用の MMU (メモリ マネジメント ユニット)
・カスタム命令セット (様々な機能を実現するための 1,024 ID)
・RISC-V アトミック拡張機能、Compressed 命令 (オプション)
・APB3 ペリフェラル:
 ・GPIO 最大 32 本
 ・I2C マスタ 最大 3 個
 ・Clint Timer
 ・PLIC
 ・SPI マスタ 最大 3 個 (最大 25 MHz)
 ・Timer 最大 3 個
 ・UART 最大 3 個
 ・APB3 ユーザペリフェラル 最大 5 個


PLIC は何かな?と思ってググって見たところ、”RISC-VのPLIC(Platform-Level Interrupt Controller)について”によると PLIC(Platform-Level Interrupt Controller) のようだ。

Sapphire SoC のブロック図を引用する。
Efinity_117_L240404.png

ユーザ・ロジックとは AXI4 インタフェースで接続だそうだ。これは嬉しい。
命令キャッシュとデータ・キャッシュもあるようだ。

SoC デザイン フローを引用する。
Efinity_118_L240404.png

ソフトウェアの作成は、”Ubuntu 22.04 に efinity-riscv-ide-2023.2 をインストールする”でインストールした efinity-riscv-ide-2023.2 を使用する。

Sapphire RISC-V SoC の使い方については、”Sapphire RISC-V SoC Hardware and Software User Guide UG-RISCV-SAPPHIRE-v6.0 December 2023”を参照する。
  1. 2024年04月04日 04:24 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Windows 11 の Efinity で helloworld チュートリアルをやってみる7

Windows 11 の Efinity で helloworld チュートリアルをやってみる6”の続き。

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみようということで、前回は、、”5.0 Configure the FPGA”をやってみたところ、FPGA をコンフィグレーションできずに失敗した。今回は、USB ドライバが間違っていたので、正しい USB ドライバに入れ替えたところ、Efinity Programmer で ”Trion T8 BGA81 development kit”をコンフィグレーションが成功した。

Windows 11 の Efinity で helloworld チュートリアルをやってみる6”では ”Trion T8 BGA81 development kit”に libusb をインストールしてしまったのだが、X で PJラボ@放電屋さんにインストールすべき USB ドライバは libusbK だと教えていただいた。ありがとうございました。

というわけで、libusb ドライバを削除して、libusbK ドライバをインストールしよう。
ドライバの削除の仕方は、”Efinity IDE のインストール3(Windows 11 へインストール2)”に書いたので、それに従う。

libusb ドライバを削除する。
Windows 11 の Windows アイコンを右クリックし、右クリックメニューから”デバイスマネージャー”を選択する。

デバイスマネージャー画面が開く。
libusb-win32 devices を展開すると、AVR USB HID DEMO がインストールされている。
Efinity_161_240323.png

AVR USB HID DEMO を右クリックし、右クリックメニューから”デバイスのアンインストール”を選択した。

”デバイスのアンインストール”ダイアログが表示された。
”このデバイスのドライバーを削除しようとしました。”のチェックボックスにチェックを入れた。
”アンインストール”ボタンをクリックした。

デバイスマネージャー画面から、libusb-win32 devices が削除された。
Efinity_157_240323.png

これで、libusb ドライバが削除できたので、libusbK ドライバをインストールする。
”Trion T8 BGA81 development kit”を USB ケーブルで Windows 11 のパソコンに接続した。
zadig-2.8.exe をダブルクリックして起動した。
Option メニューから List All Devices を選択した。

プルダウンメニューから AVR USB HID DEMO を選択した。

AVR USB HID DEMO が表示された。
Driver の矢印の先の右のボックスに libusbK を選択した。
Replace Driver ボタンをクリックした。
Efinity_166_240325.png

Warning - System Driver ダイアログが表示された。
はい・ボタンをクリックした。
Efinity_167_240325.png

ドライバがインストールされて、Driver Installation ダイアログが表示された。
Close ボタンをクリックした。
Efinity_168_240325.png

AVR USB HID DEMO に libusbK がインストールされた。
Efinity_169_240325.png

デバイスマネージャーを見ても、libusbK USB devices に AVR USB HID DEMO が表示されているのが見えた。
Efinity_170_240325.png

5.0 Configure the FPGA
Efinity の Tools メニューから起動した Open Programmer では、1 回起動して、終了させると、次からは、Programmer は起動中だ言われて立ち上がらない。

There is already a Programmer instance running. Bringing it to foreground...


そこで、Windows マークから Efinity 2023.2 Programmer を起動した。

Efinity Programmer が起動した。
USB Target に AVR USB HID DEMO が表示されていた。
Select Image File ボタンをクリックした。
Efinity_162_240323.png

Open Image File ダイアログが表示された。
C:\Efinity\2023.2\project\tutorial\helloworld\outflow\helloworld.hex ファイルを選択して、”開く”ボタンをクリックした。
Efinity_163_240323.png

Efinity Programmer の Image の Bitstream File に C:\Efinity\2023.2\project\tutorial\helloworld\outflow\helloworld.hex ファイルが入力された。

Programming Mode の SPI Active の隣の Start Program ボタンをクリックした。
FLash メモリ を消去して、helloworld.hex を Flash メモリに書き込んだ。成功だ。

月 3月 25 24 20:33:03 - Erasing entire flash...
月 3月 25 24 20:33:23 - ... finished erasing flash
月 3月 25 24 20:33:23 - Writing 'C:/Efinity/2023.2/project/tutorial/helloworld/outflow/helloworld.hex' to flash memory...
月 3月 25 24 20:33:27 - ... finished active programming


Efinity_171_240325.png

コンフィグレーションの結果、LED スイープしている。
SW3 を押している間はスイープが逆方向になった。
S|W2 を押している間は LED が全消灯した。
Efinity_55_L240325.jpg
Efinity_56_L240325.jpg
  1. 2024年03月26日 05:12 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0
»