FC2カウンター FPGAの部屋 2024年03月25日
fc2ブログ

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

FPGAの部屋

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

Ubuntu 22.04 の Efinity で helloworld チュートリアルをやってみる2

Ubuntu 22.04 の Efinity で helloworld チュートリアルをやってみる1”の続き。

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、Ubuntu 22.04 のパソコンで Efinity の helloworld チュートリアルをやってみようということで、前回は、”1.0 Prepare the Tutorial Files”、”2.0 Create Your Proje”、”3.0 Run the Flow”の”3.1 RTL Simulation”、”3.2 Synthesize the Design”、”3.3 Perform Post-Map Simulation”を行った。今回は、残りのすべてをやってみよう。ただ、Windows 11 で一度やっているので、無駄は省くことにする。

3.4 Build the Device Interface
Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”の”3.4 Build the Device Interface”を読んで、まとめてみた。
Efinix Trion® FPGA は、HDL で記述されたロジック、メモリ、乗算器の周りに GPIO ピン、PLL、発振器などのブロックが存在する。Efinity® Interface Designer を使用して、周辺部分を構築する。このセクションでは、インターフェイス デザイナーを使用して helloworld インターフェイスを表示し、欠落している GPIO リソースを追加するそうだ。

Open Interface Designer ボタンをクリックした。
Efinity_41_L240325.png

Efinity Interface Designer - helloworld ウインドウが開いた。
左のウインドウの Design:T8F81 をすべて展開した。
Efinity_42_L240325.png

led[3] の Package Planner を用いた確認と、生成された制約の確認、Place ボタンをクリックして、配置を行って、led[4] の制約が抜けているまでの確認事項は飛ばす。詳しくは、”Windows 11 の Efinity で helloworld チュートリアルをやってみる3”を参照のこと。

led[4] ポートの制約から再開する。
Open Interface Designer ボタンをクリックし、 Interface Designer を起動した。
Design:T8F81 -> GPIO(6) を右クリックし、右クリックメニューから Create Block を選択した。

Design:T8F81 -> GPIO(7) に gpio_int7: が生成された。

Block Editor の Instance Name に led[4] と入力して、Enter キーを押した。(Enter キーを押さないとちゃんと入力されないようだ)
Mode を output に変更して(プルダウンメニューで選択した)、Enter キーを押した。
Save ボタンでセーブした。
Efinity_43_L240325.png

Interface Designer の Design メニューから Show/Hide GPIO Resource Assigner を選択した。
GPIO : Instance View が表示された。
led[4] の Package Pins のプルダウンメニューから B3 を選択して、Enter キーを押した。(チュートリアルでは、Resource を指定するようになっているが、通常はピン番号を指定することから、ピン番号で指定できるかどうか?を確認した)
Efinity_45_L240325.png

led[4] の Package PinsB3 を指定できた。
Efinity_46_L240325.png

Save ボタンでセーブしてから、Generate Efinity Constraint Files ボタンをクリックした。
Efinity_47_L240325.png

Interface Designer の様子を示す。
Efinity_48_L240325.png

Interface Designer を閉じた。

3.5 Perform Place & Route
Toggle Automated Flow ボタンをクリックして、Automated Flow に変更した。
Efinity でダッシュボードの Place ボタンをクリックし、配置配線とビット・ファイルの生成を実行した。
Result タブの Pacement -> helloworld.place.rpt ファイルを確認した。
Logic Elements は 56 個使用していて、LUTs/Adder は 55 個、Registers は 18 個使用している。
Efinity_51_L240325.png

Result タブの Routing -> helloworld.timing.rpt ファイを表示した。
クロックの解析結果は制約が 33.333 MHz のところ、17.528 ns、57.052 MHz だった。
ポートの出力遅延、入力遅延も問題ないようだ。
Efinity_51_L240325.png

4.0 Review Results
4.1 Review Place and Route Results in the Floorplan Editor
省略。”Windows 11 の Efinity で helloworld チュートリアルをやってみる4”を参照のこと。

4.2 Use the Timing Browser
4.3 Use the Tcl Command Console

省略。”Windows 11 の Efinity で helloworld チュートリアルをやってみる5”を参照のこと。

5.0 Configure the FPGA
Efinity の Tools メニューから Open Programmer を選択した。

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

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

Efinity Programmer の Image の Bitstream File に /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/project/tutorial/helloworld/outflow/helloworld.hex ファイルが入力された。
Programming Mode の SPI Active の隣の Start Program ボタンをクリックした。
FLash メモリ を消去して、helloworld.hex を Flash メモリに書き込んだ。

月 3月 25 24 15:26:46 - Erasing entire flash...
月 3月 25 24 15:27:07 - ... finished erasing flash
月 3月 25 24 15:27:07 - Writing '/media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/project/tutorial/helloworld/outflow/helloworld.hex' to flash memory...
月 3月 25 24 15:27:10 - ... finished active programming


Efinity_54_L240325.png

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

Ubuntu 22.04 の Efinity で helloworld チュートリアルをやってみる1

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、Ubuntu 22.04 のパソコンで Efinity の helloworld チュートリアルをやってみよう。
今回は、”1.0 Prepare the Tutorial Files”、”2.0 Create Your Proje”、”3.0 Run the Flow”の”3.1 RTL Simulation”、”3.2 Synthesize the Design”、”3.3 Perform Post-Map Simulation”を行った。

Ubuntu 22.04 の Efinity を使用する。
Efinity の環境を整えて、ファイルをコピーしよう。

1.0 Prepare the Tutorial Files
Ubuntu 22.04 のターミナルで efinity/2023.2 に移動した。
cd /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2

以下のコマンドを実行した。
source bin/setup.sh
cd project
mkdir tutorial
cp -r helloworld/ tutorial/
cd tutorial/helloworld

Efinity_28_L240325.png

2.0 Create Your Proje
ターミナルに efinity & と入力し、 Efinity 2023.2 を起動した。
Efinity Software の File メニューから Create Project... を選択lした。

Create New Project ダイアログが表示された。
Name に helloworld と入力した。
Location のフォルダ・アイコンをクリックし、/media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/project/tutorial/helloworld を選択した。
Description に”My helloworld example project.”と入力した。
Family はデフォルトで Trion だった。
Device もデフォルトで T8F81 だった。
Efinity_29_L240325.png

Design タブをクリックした。
Top Module/Entity に helloworld を入力した。
Default Version: の下の 3 個並んだ左端のボタンの Import Design and constraint files ボタンをクリックした。

Import Directory Files ダイアログが表示された。
/media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/project/tutorial ディレクトリに行って、helloworld ディレクトリを選択した。
File To Import で ALL Files ラジオボタンを選択していることを確認した。
Choose ボタンをクリックした。

helloworld_tb.v テストベンチ・ファイルを選択し、Default Version: の下の 3 個並んだ右端のボタンの Delete selected design file ボタンをクリックして削除した。
helloworld_tb.v テストベンチ・ファイルが削除された。
OK ボタンをクリックした。
Efinity_30_L240325.png

Efinity に helloworld プロジェクトが作成された。
Efinity_31_L240325.png

3.0 Run the Flow
3.1 RTL Simulation
次に Icarus Verilog を使用して、RTL シミュレーションを行う。
helloworld_tb.v に VCD ファイルに出力する記述があることを確認した。

以下のコマンドを実行した。
efx_run.py helloworld.xml --flow rtlsim
成功した。
Efinity_32_L240325.png

左端のウインドウの Result タブをクリックして選択した。
Simulation を展開して、helloworld.rtl.simlog をダブルクリックした。
RTL シミュレーション結果の helloworld.rtl.simlog が右端のウインドウに表示された。
Efinity_33_L240325.png

コマンドプロンプトから、次のコマンドを起動して、GTKWave を起動した。
gtkwave outflow/helloworld.vcd

GTKWave GUI が表示された。
sim/dut の信号をすべて追加した。
Efinity_34_L240325.png

3.2 Synthesize the Design
Toggle automated flow ボタンをクリックして、automated flow をオフにした。
注:下に示すキャプチャ画面はすでに automated flow をオフにしてある。
Efinity_39_L240325.png

Synthesize ボタンをクリックして、論理合成を行った。
注:下に示すキャプチャ画面はすでに論理合成を行った後である。
Efinity_40_L240325.png

論理合成が終了した。

左端のウインドウの Result タブをクリックして選択した。
Synthesis を展開すると、生成されたネットリスト・ファイルの helloworld.map.v や論理合成のリポート・ファイルの helloworld.map.rpt、helloworld.map.out と helloworld.res.csv ファイルが入っていた。
helloworld.map.rpt を開くと論理合成結果が表示された。
Efinity_35_L240325.png

3.3 Perform Post-Map Simulation
論理合成後のシミュレーションを行う。

ターミナルで以下のコマンドを入力した。
efx_run.py helloworld.xml --flow mapsim
成功した。Windows 11 ではエラーだったが、Ubuntu 22.04 では成功した。
Efinity_36_L240325.png

Result タブの Simulation -> helloworld.map.simlog が生成された。
helloworld.map.simlog を表示した。
Efinity_37_L240325.png

コマンドプロンプトから、次のコマンドを起動して、GTKWave を起動した。
gtkwave outflow/helloworld.vcd

GTKWave GUI が表示された。
sim/dut の信号をすべて追加した。
counter 信号もバラバラに展開されている。
Efinity_38_L240325.png
  1. 2024年03月25日 06:35 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0