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

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

FPGAの部屋

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

Xyloni Development Kit を使ってみる5(Efinity_tutorial をやってみる2)

Xyloni Development Kit を使ってみる4(Efinity_tutorial をやってみる1)”の続き。

Github の Efinix-Inc/xyloni の xyloni/design/Efinity_tutorial をやってみようということで、前回は、Efinity で xyloni/design/Efinity_tutorial/new_project.xml を開いて、論理合成を行った。今回は、Interface Designer を起動して、IO ピン部分の割付を行った。

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

Interface Designer が起動した。
Show/Hide GPIO Resource Assigner をクリックした。
Efinity_76_L240330.png

Design Explorer の GPIO(0) を右クリックし、Create Bus を選択した。
Efinity_77_L240330.png

Add New Bus ダイアログが表示された。
Name に Dataout と入力し、MSB を 3 に変更した。
Mode を output に変更した。
Next > ボタンをクリックした。
Efinity_78_L240330.png

Pin Name が Dataout であることを確認し、(ここに Dataout が入っていたと思うのだが、よく覚えていない) Drive Strength を 3 に設定した。
Efinity_79_L240330.png

Summary が表示された。
Efinity_80_L240330.png

Interface Designer に Dataout[3] 〜 Dataout[0] が追加された。
Efinity_81_L240330.png

Design Explorer の GPIO(0) を右クリックし、Create Block を選択した。
Efinity_82_L240331.png

gpio_inst5 が追加された。
Efinity_83_L240331.png

同様に Create Block で、gpio_inst6 と gpio_inst7 を追加した。
Efinity_84_L240331.png

Dataout に Resource を指定する。
xyloni/design/Efinity_tutorial/TrionXyloniEvalBoardLab.pdf のスライド 16 の図を引用する。
Efinity_89_L240331.png

Dataout[0] - GPIOL_21
Dataout[1] - GPIOR_37
Dataout[2] - GPIOR_16
Dataout[3] - GPIOR_17

を指定した。
Efinity_85_L240331.png

入力ポートに名前を付ける。
gpio_inst5 をクリックして、Block Editor の Instance Name に clk を入力して、Enter キーを押した。
Efinity_86_L240331.png

gpio_inst6 をクリックして、Block Editor の Instance Name に setn を入力して、Enter キーを押した。
gpio_inst7 をクリックして、Block Editor の Instance Name に stopn を入力して、Enter キーを押した。
Efinity_87_L240331.png

入力ポートに Resource を指定する。
xyloni/design/Efinity_tutorial/TrionXyloniEvalBoardLab.pdf のスライド 22 の図を引用する。
Efinity_90_L240331.png

clk - GPIOL20
setn - SW1 GPIOR_02
stopn - SW2 GPIOR_15

を指定した。
Efinity_88_L240331.png

Check Design ボタンをクリックした。このボタンをクリックすると、セーブしてからチェックするようだ。
Efinity_95_L240331.png

Interface Designer を閉じた。

xyloni/design/Efinity_tutorial ディレクトリに new_project.peri.xml が生成された。
Efinity_93_L240331.png

new_project.peri.xml には IO のプロパティが記述されている。
Efinity_94_L240331.png
  1. 2024年03月31日 07:04 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit を使ってみる4(Efinity_tutorial をやってみる1)

Xyloni Development Kit を使ってみる3”の続き。

前回は、Github の Efinix-Inc/xyloni をクローンして、bsp ディレクトリをやってみた。今回は、Github の Efinix-Inc/xyloni の xyloni/design/Efinity_tutorial をやってみよう。

xyloni/design/Efinity_tutorial のやり方は design/Efinity_tutorial/TrionXyloniEvalBoardLab.pdf に書いてあるので、それを参照してやっていこう。

Efinity_tutorial には counter.vhd の VHDL ファイルがあって、そこには、30 ビットのカウンタが実装されている。そのうちの 30 ビット目から 27 ビット目までを LED に出力している。また、setn 入力を 0 にするとカウンタの出力がオール 1 にせっとされ、stopn 入力を 0 にするとカウントが止まるように記述されている。
design/Efinity_tutorial/TrionXyloniEvalBoardLab.pdf の 3 枚目のスライドを引用する。
Efinity_70_L240330.png

使用するパソコンの OS は Ubuntu 22.04 とする。
すでに Efinity の環境は設定済みだ。具体的には、source /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/bin/setup.sh を実行してある。
efinity & で Efinity Software を起動した。

File メニューから Open Project... を選択する。
Open Project File ダイアログで、xyloni/design/Efinity_tutorial/new_project.xml を選択して、、”開く”ボタンをクリックした。
Efinity Software で ne_project プロジェクトが開いた。
Efinity_71_L240330.png

counter.vhd を開いてみた。(VHDL ファイルを見るのは久しぶり。懐かしい。。。)
Efinity_72_L240330.png

タイミング制約ファイルの contercontrain.sdc を開くと、clk を 30 ns 周期のクロックと定義する文が 1 行だけだった。

create_clock -period 30 [get_ports {clk}]



design/Efinity_tutorial/TrionXyloniEvalBoardLab.pdf の 7 スライド目では、Efinity Software の File メニューから Edit Project... を選択して、Project Editor ダイアログを表示した。
Design タブをクリックし、Top Module/Entity に counter と入力するように、書かれていたが、実際に Project Editor ダイアログの Design タブを表示させると、Top Module/Entity に counter がすでに入力されていたので、そのまま OK ボタンをクリックした。
Efinity_73_L240330.png

Efinity Software の dashboard で Toggle Automated Flow ボタンをクリックし、Automated Flow をオフした。
Synthesis ボタンをクリックして、論理合成を行った。
Efinity_74_L240330.png

論理合成が終了した。
Efinity_75_L240330.png
  1. 2024年03月30日 12:25 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit を使ってみる3

Xyloni Development Kit を使ってみる2”の続き。

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、Ubuntu 22.04 のパソコンで Efinity の helloworld チュートリアルをやってみようということで、前回は、Xyloni Development Kit にあらかじめコンフィグレーションされている LED の表示と SD カードの機能を確かめた。今回は、Github の Efinix-Inc/xyloni をクローンして、bsp ディレクトリをやってみた。

git clone するので、OS が Ubuntu 22.04 のパソコンを使用する。

Github の Efinix-Inc/xyloni をクローンする。
git clone https://github.com/Efinix-Inc/xyloni.git --recursive
Efinity_52_L240328.png

xyloni ディレクトリが git clone された。
Efinity_68_L240328.png

bsp ディレクトリをやっていこう。

Interface Designer のピン割り当ての生成 をやってみる。
最初に環境を設定した。
source /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/bin/setup.sh

CSV ファイルを使用しないで、コマンドだけでピン割り当てを指定する場合
python3 build.py -m spi -p hi_xyloni -1 8 -2 5
このコマンドはエラーになった。
Efinity_53_L240328.png

次は、CSV ファイルの設定でピン割り当てを指定する場合
使用する pmod_gpio.csv を示す。
Efinity_69_L240328.png
フォーマットは 1 行目の

Inst name,,,,Conn Type,Dir,Resource,In Clk,In Reg,Out Clk,Out Reg,Slew Rate,Drive Strength

のようだ。

コマンドを実行した。
python3 build_csv.py -p hi_xyloni T8F81 pmod_gpio.csv
Efinity_54_L240328.png

ERROR が出ているが、bsp/output ディレクトリの下に、 hi_xyloni.peri.xml ファイルと outflow ディレクトリとファイルが生成された。
Efinity_55_L240328.png

hi_xyloni.peri.xml ファイルの一部を示す。
Efinity_67_L240328.png

トップレベルのテンプレートを生成する。
環境を設定し、Efinity を起動する。
source /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/bin/setup.sh
efinity &


Efinity 2023.2 が起動した。
Efinity Software の File メニューから Create Project... を選択した。

Create New Project ダイアログが表示された。
Name に hi_xyloni と入力した。
Location のフォルダ・アイコンをクリックし、/media/masaaki/Ubuntu_Disk/Efinity/HDL/xyloni_proj/hi_xyloni を選択した。
Family はデフォルトで Trion だった。
Device もデフォルトで T8F81 だった。
Efinity_56_L240328.png

Design タブをクリックした。
Top Module/Entity に hi_xyloni を入力した。
OK ボタンをクリックした。
Efinity_57_L240328.png

hi_xyloni プロジェクトが生成された。
Efinity_58_L240328.png

xyloni/bps/output/hi_xyloni.peri.xml ファイルをコピーして、
Efinity_59_L240328.png

hi_xyloni プロジェクトにペーストした。
Efinity_60_L240328.png

Efinity Software から Open Interface Desiger ボタンをクリックする。
Efinity_61_L240328.png

Efinity Interface Designer が起動すると、GPIO の情報がすべて設定されていた。
Efinity_62_L240328.png

Efinity_63_L240328.png

Generate Efinity Constraint Files ボタンをクリックした。
Efinity_64_L240328.png

hi_xyloni ディレクトリの outflow ディレクトリに Verilog ファイルのテンプレートの hi_xyloni_template.v が生成された。
Efinity_65_L240328.png

hi_xyloni_template.v を示す。
Efinity_66_L240328.png
  1. 2024年03月29日 06:50 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit を使ってみる2

”Xyloni Development Kit を使ってみる1”の続き。

Xyloni Development Kit が届いた”の Xyloni Development Kit を使ってみようということで、前回は、Xyloni Development Kit を勉強したところ、Windows 11 において、USB の interface2 は libusb ドライバをインストールするのではなく、FTDI の標準ドライバをインストールすることが分かって、libusb ドライバをアンインストールした。今回は、Xyloni Development Kit にあらかじめコンフィグレーションされている LED の表示と SD カードの機能を確かめた。

Xyloni Development Kit に付属していた PMOD コネクタ(12 ピンのライトアングルのピンソケット)をはんだ付けしてある。
また、フォーマットした SD カ-ドを Xyloni Development Kit の SD カードスロットに挿入した。
Efinity_178_240328.jpg

Efinity_179_240328.jpg

Windows 11 のパソコンに USB ケーブルを接続して、Xyloni Development Kit の USB MicroB コネクタにつないだ。
LED が 1 から 4 まで順番に点灯した。
Efinity_180_240328.jpg

BTN2 を押すと、LED の点灯が反転した。

Tera Term を立ち上がて、COM15 に接続し、115200 bps に設定した。
Xyloni Development Kit の BTN1 を押すと、メニューが表示された。
Efinity_176_240328.png

キーボードの Enter キーを押すと、SD カードの情報が表示されるということなので、Enter キーを押した。
SD カードの情報が表示された。

========SD Card Info=======

Manufacturer ID         : 159
Type                    : Hard disk file system
TRAN_SPEED              : 10Mbit/s
SD CARD Size            : 7496 MByte


Efinity_177_240328.png
  1. 2024年03月28日 05:14 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit を使ってみる1

Xyloni Development Kit が届いた”の Xyloni Development Kit を使ってみよう。

Github の Efinix-Inc/xyloni の Features を引用する。

・ Efinix® T8F81C2 device in an 81-ball FineLine BGA package
・ 128 Mbit SPI NOR flash memory
・ FTDI FT4232H chipset with USB controller
・ Dedicated UART interface through USB
・ Micro-USB type B receptacle
・ 41-pin high-speed connectors (including PMOD) for user I/O with unattached pin headers
・ 12-pin PMOD-compatible GPIO socket
・ Micro-SD card slot
・ User LEDs and switches:
 ・ 4 LEDs on T8F81C2 bank 1B and 2B
 ・ 2 pushbutton switches (connected to bank 2A I/O pins)
・ 33.33 MHz oscillator for T8F81C2 PLL input
・ Power:
 ・ Power source: USB
 ・ User selectable voltages from 1.8 V, 2.5 V, and 3.3 V for bank 2A and 2B through USB
・ Power good and T8F81C2 configuration done LEDs


Xyloni Development Kit には、USB デバイスとして、FTDI FT4232H が搭載されていて、4 チャネルのインタフェースを持っているそうだ。Github の Efinix-Inc/xyloni から引用する。

・ FTDI interface 0 = SPI
・ FTDI interface 1 = JTAG
・ FTDI interface 2 = UART
・ FTDI interface 3 = VCCIO setting


Windows 11 の場合は、”Xyloni Development Kit User Guide XYLONI-DK-UG-v1.4 November 2022”の 5 ページの”Installing the Windows USB Drivers”によると libusb-win32 ドライバをインストールするのは、interface の 0, 1, 3 のみでインタフェース2 はインストールしないそうだ。
Efinity IDE のインストール3(Windows 11 へインストール2)”では、interface2 にも libusb-win32 をインストールしていたので、これを削除する。

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

デバイスマネージャー画面が開く。
libusb-win32 devices を展開すると、Xyloni (Interface 0)、 Xyloni (Interface 1)、 Xyloni (Interface 2)、 Xyloni (Interface 3) がインストールされていた。
そのうちの Xyloni (Interface 2) をアンインストールしてみる。
Xyloni (Interface 2) を右クリックし、右クリックメニューから”デバイスのアンインストール”を選択した。
Efinity_172_240327.png

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

デバイスマネージャー画面から、libusb-win32 devices の Xyloni (Interface 2) が削除された。
Efinity_174_240327.png

この状態で Zadig ソフトウェアを起動しても Xyloni (Interface 2) が見えない。
Xyloni Development Kit を USB ケーブルから抜き差しする。
それから Zadig ソフトウェアを起動すると、Xyloni (Interface 2) の Driver が FTDIBUS に戻っているのが見えた。
USB ケーブルをパソコンに差し込んだ時に FTDIBUS のドライバがインストールされたのだと思う。
Efinity_175_240327.png

この Xyloni (Interface 2) が UART のポートで、Tera Term などのターミナル・ソフトウェアで接続することができるポートになるようだ。

なお、最後の Interface 3 は、xyloni/tools/ にある”xyloni_set_vccio.py - Modify the VCCIO on Xyloni”を使用して、FPGA の Bank 2A と 2B を 1.8V, 2.5V, 3.3V に設定することができるようだ。
”Xyloni Development Kit User Guide XYLONI-DK-UG-v1.4 November 2022”の 8 ページの”Selecting VCCIO”によると、デフォルト値は 3.3V だそうだ。

参照:”AN 006: Configuring Trion® FPGAs AN006-v6.0 February 2024
  1. 2024年03月27日 11:18 |
  2. Xyloni Development Kit
  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

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

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

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

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみようということで、前回は、”4.2 Use the Timing Browser”と”4.3 Use the Tcl Command Console”、それに、チュートリアルには無いが、IP Catalog を表示した。今回は、”5.0 Configure the FPGA”をやってみたところ、失敗した。

(2024/03/26:追記) ”Trion T8 BGA81 development kit”にインストールするドライバが間違っていました。インストールするのは、libusb ドライバではなく libusbK ドライバでした。詳しくは、”Windows 11 の Efinity で helloworld チュートリアルをやってみる7”を参照のこと。

今回、Efinix さんのご厚意により、”Trion T8 BGA81 development kit”を貸していただいたので、これを使用して、”5.0 Configure the FPGA”を行う。下の写真はUSB ケーブルでパソコン接続したところを撮影した。
Efinity_166_240323.jpg

まずは、USB ドライバのインストールをする必要がある。
Efinity IDE のインストール3(Windows 11 へインストール2)”を参照して、Zadig ソフトウェアを起動して、libusb をインストールする。

”Trion T8 BGA81 development kit”への USB ドライバのインストール方法については、”Trion® T8 BGA81 Development Kit User Guide T8F81C-DK-UG-v2.6 July 2023”の 4 ページの”Installing the Windows USB Drivers”によると、 Trion®
T8 BGA81 Development Board or AVR USB HID DEMO に libusb ドライバをインストールすれば良いようだ。

Zadig ソフトウェアを起動して、libusb をインストールする。
まず、、”Trion T8 BGA81 development kit”を USB ケーブルでパソコンに接続した。
Windows アイコンを右クリックし、右クリックメニューからデバイスマネージャーを選択した。
デバイスマネージャー画面が開いた。
libusb は見えていない。
Efinity_157_240323.png

Zadig ソフトウェアを起動する。
Option メニューから List All Devices を選択した。

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

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

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

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

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

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

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 ファイルが入力されていた。
Start Program ボタンをクリックした。
Efinity_164_240323.png

しかし、FPGA はプログラムされていないようだ。LED も全く動作していない。
再起動した後で、何回かやってみたが動作しなかった。
  1. 2024年03月24日 06:56 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Ubuntu 22.04 に efinity-riscv-ide-2023.2 をインストールする

Windows 11 に efinity-riscv-ide-2023.2.1.1-windows-x64 をインストールする”では、Windows 11 に efinity-riscv-ide-2023.2.1.1-windows-x64 をインストールした。今回は、Ubuntu 22.04 に efinity-riscv-ide-2023.2 をインストールしよう。

Efinity IDE のダウンロード”でダウンロードした efinity-riscv-ide-2023.2.1.1-linux-x64.run をインストールする。
Efinity_20_L240323.png

efinity-riscv-ide-2023.2.1.1-linux-x64.run を右クリックし、右クリックメニューから”プロパティ”を選択した。
実行 プログラムとして実行可能(E) にチェックが入っているので、これでよい。
Efinity_21_L240323.png

efinity-riscv-ide-2023.2.1.1-linux-x64.run を右クリックし、右クリックメニューから”プログラムとして実行(R)”を選択した。
ターミナルが開いて、ベリファイや解凍が行われた。
インストール・パスを要求されたので、”/media/masaaki/Ubuntu_Disk/Efinity/efinity-riscv-ide-2023.2”を入力して、Enter キーを押した。
Efinity_22_L240323.png

efinity-riscv-ide-2023.2 のインストールが実行された。
Efinity_23_L240323.png

/media/masaaki/Ubuntu_Disk/Efinity/efinity-riscv-ide-2023.2 が生成された。
Efinity_24_L240323.png

efinity-riscv-ide-2023.2 の内容を示す。
Efinity_25_L240323.png

efinity-riscv-ide をダブルクリックすると、起動した。
Efinity RISC-V Embedded Software IDE Launcher ダイアログが表示された。
Efinity/HDL/workspace0 ディレクトリをワークスペースに指定して、Launch ボタンをクリックした。
Efinity_26_L240323.png

finity RISC-V Embedded Software IDE が起動した。こちらもベースは Eclipse のようだ。
Efinity_27_L240323.png
  1. 2024年03月23日 08:36 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Windows 11 に efinity-riscv-ide-2023.2.1.1-windows-x64 をインストールする

Windows 11 に efinity-riscv-ide-2023.2.1.1-windows-x64 をインストールしてみよう。

Efinity IDE のダウンロード”でダウンロードした”efinity-riscv-ide-2023.2.1.1-windows-x64.msi”をインストールしてみよう。
インストールのやり方は”Sapphire RISC-V SoC Hardware and Software User Guide UG-RISCV-SAPPHIRE-v6.0 December 2023”の 11 ページの”Install the Efinity RISC-V Embedded Software IDE”に書いてあった。

efinity-riscv-ide-2023.2.1.1-windows-x64.msi をダブルクリックして、インストーラーを起動した。
Efinity_147_240322.png

Efinity RISC-V Embedded Software IDE 2023.2 Setup ダイアログが表示された。
Welcome to Efinity RISC-V Embedded Software IDE 2023.2 Setup Wizard 画面
Next ボタンをクリックした。
Efinity_148_240322.png

End-User License Agreement 画面
I accept the terms in the License Agreement にチェックを入れた。
Next ボタンをクリックした。
Efinity_149_240322.png

Destination Folder 画面
デフォルトのパスのままが良いと思う。D: ドライブにすると問題が発生するかもしれない?
Next ボタンをクリックした。
Efinity_150_240322.png

Ready to install Efinity RISC-V Embedded Software IDE 2023.2 画面
Install ボタンをクリックした。
Efinity_151_240322.png

Installing Efinity RISC-V Embedded Software IDE 2023.2 画面が表示され、インストールが進んでいく。
Efinity_152_240322.png

Completed the Efinity RISC-V Embedded Software IDE 2023.2 Setup Wizard 画面
インストールが終了したので、Finishボタンをクリックした。
Efinity_153_240322.png

Windows 11 のスタートメニューから”すべてアプリ”を選択する。
E のグループに Efinity RISC-V IDE 2023.2 があるので選択する。
Efinity_154_240322.png

Efinity RISC-V Embedded Software Launcher ダイアログが起動した。
Workspace を選択して、Launch ボタンをクリックした。
Efinity_155_240322.png

Efinity RISC-V Embedded Software IDE が起動した。
Efinity_156_240322.png
  1. 2024年03月22日 09:03 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

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

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

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみようということで、前回は、”3.5 Perform Place & Route”と”4.0 Review Results”の”4.1 Review Place and Route Results in the Floorplan Editor”をやってみた。今回は、”4.2 Use the Timing Browser”と”4.3 Use the Tcl Command Console”、それに、チュートリアルには無いが、IP Catalog を表示してみよう。

4.2 Use the Timing Browser
Floorplan を Efinity IDE に入れた。
Floorplan の Show Timing Path ボタンと Show Timing Delay ボタンをクリックした。
Efinity_136_240321.png

View Timing Browser ボタンをクリックした。
Timing Browser が表示された。
Critical Path が表示されている。
Data Path Cell の led[4] をクリックすると FloorPlan で led[4] のセルを表示するようだ。
Efinity_137_240321.png

Data Path Cell の rdata[4]~FF をクリックすると FloorPlan で rdata[4]~FF セルを表示した。
Efinity_138_240321.png

4.3 Use the Tcl Command Console
Show/Hide Tcl Command Console ボタンをクリックした。
Efinity_143_240321.png

Console の下に Type tcl command... と表示されたボックスが表示された。この中に TCL コマンドを入力するようだ。
また、コンソール部分には、tcl 8.6 と表示されて、簡単なヘルプが表示されている。
Efinity_144_240321.png

Type tcl command... にコマンドとして source example_report.tcl と入力し、Enter キーを押した。
Efinity_145_240321.png

タイミング・パスのレポートが表示された。
Efinity_146_240321.png

IP Catalog の表示
IP Catalog を表示してみよう。
Open IP Catalog ボタンをクリックした。
Efinity_140_240321.png

IP Catalog が表示された。
展開するといろいろな IP が表示された。
AXI Infastructures -> AXI Data FIFO を選択した。
Efinity_141_240321.png

Next>> ボタンをクリックした。
IP の設定画面が表示された。ここで、いろいろな設定を行うようだ。
Efinity_142_240321.png
  1. 2024年03月21日 05:17 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

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

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

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみようということで、前回は、”3.4 Build the Device Interface”をやってみた。今回は、”3.5 Perform Place & Route”と”4.0 Review Results”の”4.1 Review Place and Route Results in the Floorplan Editor”をやってみよう。

3.5 Perform Place & Route
Place & Route を実行する。

Toggle Automated Flow ボタンをクリックして、Automated Flow に変更した。
Place ボタンをクリックした。
Efinity_128_240319.png

Place & Route とビットファイルを生成できたようだ。
Efinity_129_240319.png

Result タブの Routing -> helloworld.timing.rpt ファイを表示した。
クロックの解析結果は制約が 33.333 MHz のところ、17.528 ns、57.052 MHz だった。
Efinity_130_240319.png

4.0 Review Results
4.1 Review Place and Route Results in the Floorplan Editor
Floorplan Editor を起動する。
Efinity で View Floorplan ボタンをクリックする。
Efinity_131_240319.png

FloorPlan が表示された。
Show World View ボタンをクリックすると、World View が表示された。
Efinity_132_240319.png

View Floorplan Legend ボタンをクリックすると、色の説明が出る。青が論理素子で赤が配線用の素子のようだ。
Show All Net ボタンをクリックして、すべての配線の表示を止めた。
論理素子を 1 個選択すると下の欄に、説明が出る。

Block: (15,52) type=eft name=counter[1]~FF


また、Show Fan In、Show Fan Out ボタンをクリックすると、入力配線、出力配線が表示される。
Show Net Tracer ボタンをクリックすると Net Tracer ダイアログが表示された。
Net Tracer ダイアログのリストの一番上の LUT_152 だが、このネットを追跡するには、Trace ボタンをクリックする。
また、他のネットを折っていく場合は、そのネットをマウス・クリックで選択し、Trace ボタンをクリックすろと、そのネットを追っていくことができる。
Efinity_134_240319.png

Efinity_135_240319.png
  1. 2024年03月20日 08:31 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

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

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

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみようということで、前回は、”3.2 Synthesize the Design”と”3.3 Perform Post-Map Simulation”を行った。今回は、”3.4 Build the Device Interface”をやってみよう。

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_105_240318.png

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

Design:T8F81 -> GPIO(6) -> led[3] をクリックした。
Block Summary と Block Editor が表示された。
Efinity_107_240319.png

Package Planner ボタンをクリックした。
Package Planner - helloworld が表示された。
Efinity_108_240319.png

E3 ピンをクリックすると、View Configuration の Pin information に led[3] に接続されていることと、その他の情報が表示された。
Efinity_109_240319.png

Package Planner を閉じた。
Interface Designer に戻って、Generate Efinity Constraint Files ボタンをクリックした。
Efinity_110_240319.png

Efinity_111_240319.png

helloworld\outflow に helloworld.interface.csv, helloworld.pt.rpt, helloworld.pinout.csv, helloworld.pinout.rpt, helloworld.pt_timing.rpt, helloworld.pt.sdc, helloworld_template.v が生成された。
Efinity_112_240319.png

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”から、ファイルの説明を Google 翻訳して引用する。

• helloworld.interface.csv - コアとペリフェラルの間のインターフェイスで使用される FPGA デザイン ピンを制約します。
• helloworld.pt.rpt - インターフェイスに関する情報を提供します。
• helloworld.pinout.csv - CSV 形式でボード設計のピン配置が含まれます。
• helloworld.pinout.rpt - 適切にフォーマットされたテキスト ファイル形式でボード設計のピン配置が含まれます。
• helloworld.pt_timing.rpt - Trion® インターフェイス ロジックのタイミング レポート。
• helloworld.pt.sdc - インターフェイス設定に基づいて FPGA デザイン ピンを制約するためのテンプレート SDC ファイル。
• helloworld_template.v - インターフェイス設定に基づいて FPGA デザイン ピンを定義するテンプレート Verilog HDL ファイル。


Interface Designer を閉じて、Efinity に戻った。
automated flow は OFF にしてあるので、ダッシュボードの Place ボタンをクリックして、配置だけを行った。
Efinity_113_240319.png

配置が終了した。
Efinity_114_240319.png

Result タブの Pacement -> helloworld.place.rpt ファイルを確認すると、led[4] が Uassigned Core Pins としてリストされている。
led[4] のピン指定が無かったようだ。
Efinity_115_240319.png

Open Interface Designer ボタンをクリックし、 Interface Designer を起動した。
Design:T8F81 -> GPIO(6) を右クリックし、右クリックメニューから Create Block を選択した。
Efinity_116_240319.png

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

Block Editor の Instance Name に led[4] と入力して、Enter キーを押した。(Enter キーを押さないとちゃんと入力されないようだ)
Efinity_118_240319.png

Mode を output に変更して(プルダウンメニューで選択した)、Enter キーを押した。
Save ボタンでセーブした。
Efinity_119_240319.png

Generate Efinity Constraint Files ボタンをクリックした。
Efinity_120_240319.png

Design Check ダイアログが表示された。デザインにエラーがあるということだ、led[4] を指定しても出力ピンを指定していないので、必然的にエラーが出ているのだろう?
Efinity_121_240319.png

Interface Designer の Design メニューから Show/Hide GPIO Resource Assigner を選択した。
Efinity_122_240319.png

GPIO : Instance View が表示された。
led[4] に Resource のプルダウンメニューから GPIOL_21 を選択して、Enter キーを押した。
Efinity_123_240319.png

led[4] の Resource に GPIOL_21 が指定された。Package Pin も B3 に指定されている。
Efinity_124_240319.png

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

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

Interface Designer を閉じた。
Efinity でダッシュボードの Place ボタンをクリックし、配置を実行した。
Result タブの Pacement -> helloworld.place.rpt ファイルを確認すると、 Uassigned Core Pins が無くなって、成功した。
Logic Elements は 56 個使用していて、LUTs/Adder は 55 個、Registers は 18 個使用している。
Efinity_127_240319.png
  1. 2024年03月19日 11:26 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

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

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

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみようということで、前回は、”3.0 Run the Flow”の”3.1 RTL Simulation”を行った。今回は、”3.2 Synthesize the Design”と”3.3 Perform Post-Map Simulation”を行った。

3.2 Synthesize the Design
Toggle automated flow ボタンをクリックして、automated flow をオフにした。
Efinity_98_240318.png

Synthesize ボタンをクリックして、論理合成を行った。
Efinity_99_240318.png

論理合成が終了した。
Efinity_100_240318.png

helloworld\outflow フォルダに論理合成のリポート・ファイルの helloworld.map.rpt と helloworld.map.out が生成された。
Efinity_101_240318.png

生成されたネットリスト・ファイルは、helloworld\outflow フォルダの helloworld.map.v のようだ。
Efinity_104_240318.png

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

コマンドプロンプトで以下のコマンドを入力した。
efx_run.bat helloworld.xml --flow mapsim

helloworld\outflow フォルダの helloworld.log を見ると”RuntimeError: vvp process failed to run after 3 attempts”になっていた。エラーが発生したようだ。
Efinity_103_240318.png

helloworld.map.rpt ファイルを示す。

Efinity Synthesis report for project helloworld
Version: 2023.2.307.2.17
Generated at: Mar 18, 2024 04:31:29
Copyright (C) 2013 - 2023  All rights reserved.

### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
Top-level Entity Name : helloworld

### ### File List (begin) ### ### ###
C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v
### ### File List (end) ### ### ###

"MEM|SYN-0657" : Mapping into logic memory block 'mem' (50 bits) (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:36) because size is too small (<=64)

### ### EFX_FF CE enables (begin) ### ### ###
Total number of enable signals: 0
Total number of FFs with enable signals: 0
### ### EFX_FF CE enables (end) ### ### ###

### ### EFX_FF SR set/reset (begin) ### ### ###
Total number of set/reset signals: 1
Total number of FFs with set/reset signals: 13
SR signal <rstn>, number of controlling flip flops: 13
### ### EFX_FF SR set/reset (end) ### ### ###

### ### Module Resource Usage Distribution Estimates (begin) ### ###

**Note: some resources maybe grouped under different hierarchy due to optimization and LUT mapping

Module                          FFs        ADDs        LUTs      RAMs DSP/MULTs
-----------------------         ---        ----        ----      ---- ---------
helloworld:helloworld        18(18)      12(12)      41(41)      0(0)      0(0)

### ### Module Resource Usage Distribution Estimates (end) ### ###


### ### Clock Load Distribution Report (begin) ### ###

 Clock     Flip-Flops   Memory Ports    Multipliers
 -----     ----------   ------------    -----------
   clk             18              0              0

### ### Clock Load Distribution Report (end) ### ###

### ### EFX Flow Options (begin) ### ### ###

family : Trion
device : T8F81
project : helloworld
project-xml : C:/Efinity/2023.2/project/tutorial/helloworld/helloworld.xml
root : helloworld
I,include : C:/Efinity/2023.2/project/tutorial/helloworld
output-dir : C:/Efinity/2023.2/project/tutorial/helloworld/outflow
work-dir : C:/Efinity/2023.2/project/tutorial/helloworld/work_syn
write-efx-verilog : C:/Efinity/2023.2/project/tutorial/helloworld/outflow/helloworld.map.v
binary-db : C:/Efinity/2023.2/project/tutorial/helloworld/outflow/helloworld.vdb
insert-ios : 0
max-carry-cascade : 160
max_mult : -1
max_ram : -1
mode : speed
veri_options : verilog_mode=verilog_2k,vhdl_mode=vhdl_2008

### ### EFX Flow Options (end) ### ### ###

### ### Resource Summary (begin) ### ### ### 
INPUT  PORTS    :   3
OUTPUT PORTS    :   5

EFX_ADD         :   12
EFX_LUT4        :   41
   1-2  Inputs  :   9
   3    Inputs  :   11
   4    Inputs  :   21
EFX_FF          :   18
EFX_GBUFCE      :   1
### ### Resource Summary (end) ### ### ###

Plain synthesis (without verilog dump and post-map checks) time : 7s
Elapsed synthesis time : 7s


helloworld.map.out ファイルを示す。

[EFX-0000 INFO] Efinix FPGA Synthesis.

[EFX-0000 INFO] Version: 2023.2.307.2.17

[EFX-0000 INFO] Compiled: Dec 15 2023.

[EFX-0000 INFO] 

[EFX-0000 INFO] Copyright (C) 2013 - 2023 Efinix, Inc. All rights reserved.



INFO: Read project database "C:/Efinity/2023.2/project/tutorial/helloworld/helloworld.xml"

-- Analyzing Verilog file 'C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v' (VERI-1482)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(8): INFO: compiling module 'EFX_IBUF' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(16): INFO: compiling module 'EFX_OBUF' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(23): INFO: compiling module 'EFX_IO_BUF' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(33): INFO: compiling module 'EFX_CLKOUT' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(41): INFO: compiling module 'EFX_IREG' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(51): INFO: compiling module 'EFX_OREG' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(60): INFO: compiling module 'EFX_IOREG' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(75): INFO: compiling module 'EFX_IDDIO' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(87): INFO: compiling module 'EFX_ODDIO' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(99): INFO: compiling module 'EFX_GPIO_V1' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(118): INFO: compiling module 'EFX_PLL_V1' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v(136): INFO: compiling module 'EFX_OSC_V1' (VERI-1018)

INFO: Read project database "C:/Efinity/2023.2/project/tutorial/helloworld/helloworld.xml"

INFO: ***** Beginning Analysis ... *****

INFO: default VHDL library search path is now "C:/Efinity/2023.2/sim_models/vhdl/packages/vhdl_2008" (VHDL-1504)

-- Analyzing Verilog file 'C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v' (VERI-1482)

-- Analyzing Verilog file 'C:/Efinity/2023.2/sim_models/maplib/efinix_peri_lib.v' (VERI-1482)

-- Analyzing Verilog file 'C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v' (VERI-1482)

INFO: Analysis took 0.0200392 seconds.

INFO:   Analysis took 0 seconds (approximately) in total CPU time.

INFO: Analysis virtual memory usage: begin = 55.736 MB, end = 56.064 MB, delta = 0.328 MB

INFO:   Analysis peak virtual memory usage = 56.072 MB

INFO: Analysis resident set memory usage: begin = 58.748 MB, end = 59.692 MB, delta = 0.944 MB

INFO:   Analysis peak resident set memory usage = 59.692 MB

INFO: ***** Ending Analysis ... *****

INFO: ***** Beginning Elaboration ... *****

C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v(14): INFO: compiling module 'helloworld' (VERI-1018)

C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v(36): INFO: extracting RAM for identifier 'mem' (VERI-2571)

C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v(66): WARNING: expression size 32 truncated to fit in target size 13 (VERI-1209)

C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v(69): WARNING: expression size 14 truncated to fit in target size 13 (VERI-1209)

C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v(36): WARNING: net 'mem' does not have a driver (VDB-1002)

INFO: Elaboration took 0.0042327 seconds.

INFO:   Elaboration took 0 seconds (approximately) in total CPU time.

INFO: Elaboration virtual memory usage: begin = 56.064 MB, end = 56.068 MB, delta = 0.004 MB

INFO:   Elaboration peak virtual memory usage = 56.076 MB

INFO: Elaboration resident set memory usage: begin = 59.704 MB, end = 60.396 MB, delta = 0.692 MB

INFO:   Elaboration peak resident set memory usage = 60.396 MB

INFO: ***** Ending Elaboration ... *****

[EFX-0000 INFO] ... Setting Synthesis Option: mode=speed

INFO: ***** Beginning Reading Mapping Library ... *****

-- Analyzing Verilog file 'C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v' (VERI-1482)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(8): INFO: compiling module 'EFX_ADD' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(21): INFO: compiling module 'EFX_FF' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(38): INFO: compiling module 'EFX_COMB4' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(48): INFO: compiling module 'EFX_GBUFCE' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(57): INFO: compiling module 'EFX_LUT4' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(65): INFO: compiling module 'EFX_MULT' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(100): INFO: compiling module 'EFX_DSP48' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(156): INFO: compiling module 'EFX_DSP24' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(209): INFO: compiling module 'EFX_DSP12' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(262): INFO: compiling module 'EFX_RAM_4K' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(322): INFO: compiling module 'EFX_RAM_5K' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(394): INFO: compiling module 'EFX_DPRAM_5K' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(499): INFO: compiling module 'RAMB5' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(561): INFO: compiling module 'EFX_RAM_10K' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(653): INFO: compiling module 'EFX_RAM10' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(754): INFO: compiling module 'EFX_DPRAM10' (VERI-1018)

C:/Efinity/2023.2/sim_models/maplib/efinix_maplib.v(884): INFO: compiling module 'EFX_SRL8' (VERI-1018)

INFO: Reading Mapping Library took 0.0172926 seconds.

INFO:   Reading Mapping Library took 0 seconds (approximately) in total CPU time.

INFO: Reading Mapping Library virtual memory usage: begin = 56.068 MB, end = 56.328 MB, delta = 0.26 MB

INFO:   Reading Mapping Library peak virtual memory usage = 56.328 MB

INFO: Reading Mapping Library resident set memory usage: begin = 60.62 MB, end = 60.86 MB, delta = 0.24 MB

INFO:   Reading Mapping Library peak resident set memory usage = 60.86 MB

INFO: ***** Ending Reading Mapping Library ... *****

[EFX-0000 INFO] ... Pre-synthesis checks begin

[EFX-0000 INFO] ... Pre-synthesis checks end (Real time : 0s)

[EFX-0000 INFO] ... NameSpace init begin

[EFX-0000 INFO] ... NameSpace init end (Real time : 0s)

[EFX-0000 INFO] ... Mapping design "helloworld"

[EFX-0000 INFO] ... Hierarchical pre-synthesis "helloworld" begin

[EFX-0000 INFO] ... Hierarchical pre-synthesis "helloworld" end (Real time : 0s)

[EFX-0200 WARNING] Removing redundant signal : i[31]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[30]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[29]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[28]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[27]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[26]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[25]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[24]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[23]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[22]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[21]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[20]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[19]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[18]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[17]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[16]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[15]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[14]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[13]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] Removing redundant signal : i[12]. (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:39)

[EFX-0200 WARNING] The above message was generated too many times, subsequent similar messages will be muted.

[EFX-0657 WARNING] Mapping into logic memory block 'mem' (50 bits) (C:\Efinity\2023.2\project\tutorial\helloworld\helloworld.v:36) because size is too small (<=64)

[EFX-0000 INFO] ... Flat optimizations begin

[EFX-0000 INFO] ... Flat optimizations end (Real time : 0s)

[EFX-0000 INFO] ... Flat synthesis begin

[EFX-0000 INFO] ... Flat synthesis end (Real time : 0s)

[EFX-0000 INFO] ... Flat optimizations begin

[EFX-0000 INFO] ... Flat optimizations end (Real time : 0s)

[EFX-0000 INFO] ... Check and break combinational loops begin

[EFX-0000 INFO] ... Check and break combinational loops end (Real time : 0s)

[EFX-0000 INFO] ... Sequential Optimization begin

[EFX-0000 INFO] ... Clock Network 'clk' with 18 loads will be considered for sequential optimization.

[EFX-0000 INFO] ... Sequential Optimization deduced 25 equivalent points.

[EFX-0000 INFO] ... Sequential Optimization end (Real time : 3s)

[EFX-0000 INFO] ... SOP modeling begin

[EFX-0000 INFO] ... SOP modeling end (Real time : 0s)

[EFX-0000 INFO] ... LUT mapping begin

[EFX-0000 INFO] ... LS, strategy: 3, nd: 36, ed: 125, lv: 4, pw: 95.92

[EFX-0000 INFO] ... LUT mapping end (Real time : 0s)

[EFX-0000 INFO] ... Post-synthesis Verific netlist creation begin

[EFX-0000 INFO] ... Post-synthesis Verific netlist creation end (Real time : 0s)

[EFX-0000 INFO] ... Postmap Retiming Optimization begin

[EFX-0000 INFO] ... Clock Network 'clk' with 18 loads will be considered for retiming optimization.

[EFX-0000 INFO] ... Performed 0 retime moves.

[EFX-0000 INFO] ... Postmap Retiming Optimization end (Real time : 4s)

[EFX-0000 INFO] ... Post-synthesis Verific netlist unification/params processing begin

[EFX-0000 INFO] ... Post-synthesis Verific netlist unification/params processing end (Real time : 0s)

INFO: ***** Beginning VDB Netlist Checker ... *****

INFO: VDB Netlist Checker took 0.0008936 seconds.

INFO:   VDB Netlist Checker took 0 seconds (approximately) in total CPU time.

INFO: VDB Netlist Checker virtual memory usage: begin = 67.424 MB, end = 67.424 MB, delta = 0 MB

INFO:   VDB Netlist Checker peak virtual memory usage = 89.812 MB

INFO: VDB Netlist Checker resident set memory usage: begin = 74.376 MB, end = 74.412 MB, delta = 0.036 MB

INFO:   VDB Netlist Checker peak resident set memory usage = 93.728 MB

INFO: ***** Ending VDB Netlist Checker ... *****

-- Writing netlist 'helloworld' to Verilog file 'C:/Efinity/2023.2/project/tutorial/helloworld/outflow/helloworld.map.v' (VDB-1030)

[EFX-0000 INFO] Resource Summary 

[EFX-0000 INFO] =============================== 

[EFX-0000 INFO] EFX_ADD         :   12

[EFX-0000 INFO] EFX_LUT4        :   41

[EFX-0000 INFO] EFX_FF          :   18

[EFX-0000 INFO] EFX_GBUFCE      :   1

[EFX-0000 INFO] =============================== 

  1. 2024年03月18日 05:13 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

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

Efinity® Trion® Tutorial UG-EFN-TUTORIAL-v7.0 August 2022”を参照して、helloworld チュートリアルをやってみよう。
今回は、”3.0 Run the Flow”の”3.1 RTL Simulation”を行った。

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

Windows 11 の検索ウインドウに”コマンドプロンプト”と入力して、コマンドプロンプトを起動した。
C:\Efinity\2023.2 に移動した。
cd C:\Efinity\2023.2
以下のコマンドを実行した。
bin\setup.bat
cd project
md tutorial
xcopy helloworld tutorial\helloworld\
cd tutorial\helloworld

Efinity_80_240317.png

Windows メニューから Efinity 2023.2 を起動した。
Efinity Software の File メニューから Create Project... を選択した。
Efinity_81_240317.png

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

Design タブをクリックした。
Top Module/Entity に helloworld を入力した。
Import Design and constraint files ボタンをクリックした。
Efinity_96_240317.png

Import Directory Files ダイアログが表示された。
C:\Efinity\2023.2\project\tutorial フォルダに行って、helloworld フォルダを選択した。
File To Import で ALL Files ラジオボタンを選択していることを確認した。
Choose ボタンをクリックした。
Efinity_83_240317.png

helloworld_tb.v テストベンチ・ファイルを選択し、Delete selected design file ボタンをクリックして削除した。
Efinity_84_240317.png

helloworld_tb.v テストベンチ・ファイルが削除された。
OK ボタンをクリックした。
Efinity_97_240317.png

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

コマンドプロンプトのフォルダが c:\Efinity\2023.2\project\tutorial\helloworld フォルダであることを確認する。
efx_run.bat helloworld.xml --flow rtlsim
エラーのようだった。
Efinity_87_240317.png

outflow\helloworld.log ログを見ると、どうやら iverlog へのパスが通っていないようだった。
Efinity_88_240317.png

そう言えば、iverilog へのパスを通してなったので、パスを通す。
Windows アイコンを右クリックし、右クリックメニューから”設定”を選択した。
設定ダイアログが表示された。
設定ダイアログで”設定の検索”に”環境変数”を入力した。
検索項目が 2 つ示されるので、そのうちの”環境変数を編集”をクリックした。

環境変数ダイアログが表示された。
ユーザーの環境変数の Path をクリックして、編集ボタンをクリックした。
Efinity_89_240317.png

環境変数の編集画面が開いた。
新規ボタンをクリックし、Icarus Verilog へのパスを追加した。
Efinity_90_240317.png

再度、RTL シミュレーションのコマンドを入力した。
efx_run.bat helloworld.xml --flow rtlsim
今度は成功した。
Efinity_91_240317.png

Efinity Software の File メニューから Open File... を選択した。
Open File ダイアログが表示された。
C:\Efinity\2023.2\project\tutorial\helloworld\outflow\helloworld.rtl.simlog を選択して、開いた。
RTL シミュレーションのログが表示された。
Efinity_92_240317.png

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

GTKWave GUI が表示された。
sim/dut の信号をすべて追加した。
Efinity_93_240317.png
  1. 2024年03月17日 21:18 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Efinity IDE のインストール4(Windows 11 へインストール3)

Windows 11 に Icarus Verilog と GTKWave をインストールする”の続き。

前回は、Windows 11 に Icarus Verilog と GTKWave をインストールした。今回は、Efinity を Windows 11 にインストールし、パッチを当てた。

”Efinity IDE のダウンロード”でダウンロードした efinity-2023.2.307-windows-x64.msi とパッチの efinity-2023.2.307.2.17-windows-x64-patch.zip をインストールする。

まずは、 efinity-2023.2.307-windows-x64.msi をダブルクリックして、起動し、インストールを行う。
Efinity_69_240316.png

efinity-2023.2.307-windows-x64.msi をダブルクリックした。
Efinity 2023.2 Setup ダイアログが表示された。
Welcome to the Efinity 2023.2 Setup Wizard 画面
Next ボタンをクリックした。
Efinity_70_240316.png

End-User License Agreement 画面
I accept the terms in the License Agreement にチェックを入れた。
Next ボタンをクリックした。
Efinity_71_240316.png

Destination Folder 画面
デフォルトのままとした。
注: D:¥Efinity¥2023.2¥ にインストールしたのだが、Efinity が起動しなかった。C ドライブにインストールするべきだと思う。
Next ボタンをクリックした。
Efinity_72_240316.png

Ready to Install Efinity 2023.2 画面
Install ボタンをクリックした。
Efinity_73_240316.png

インストールが始まった。
Efinity_74_240316.png

インストールが終了した。
Completed the Efinity 2023.2 Setup Wizard 画面
Finishボタンをクリックした。
Efinity_75_240316.png

efinity-2023.2.307.2.17-windows-x64-patch.zip を展開したら、efinity-2023.2.307.2.17-windows-x64-patch フォルダが生成された。
Efinity_76_240316.png

パッチを適用する。
コマンドプロンプトを起動して、以下のコマンドを実行した。
cd D:\Archives\Efinity\efinity-2023.2.307.2.17-windows-x64-patch
C:\Efinity\2023.2\bin\setup.bat
.\run.bat

Efinity_77_240316.png

Efinity を起動する。
Windows 11 のスタート・アイコンをクリックし、すべてのアプリ> を選択して、Efinity 2023.2 を表示した。
Efinity 2023.2 -> Efinity 2023.2 をクリックして、Efinity 2023.2 を起動した。
Efinity_78_240316.png

Efinity 2023.2 が起動した。
Efinity_79_240316.png
  1. 2024年03月16日 08:07 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Windows 11 に Icarus Verilog と GTKWave をインストールする

”Efinity IDE のインストール3(Windows 11 へインストール2)”の続き。

前回は、Zadig ソフトウェアを使って、libusb ドライバをインストールした。今回は、汎用に使用できるので、タイトルを変更したが、Windows 11 に Icarus Verilog と GTKWave をインストールした。

Icarus Verilog for Windows をインストールする。
Icarus Verilog for Windows サイトに行って、iverilog-v12-20220611-x64_setup [18.2MB] をダウンロードした。
Efinity_51_240315.png

iverilog-v12-20220611-x64_setup.exe がダウンロードできた。
Efinity_52_240315.png

iverilog-v12-20220611-x64_setup.exe をダブルクリックして、インストールを行った。
Setup - Icarus Verilog version v12-20220611 ダイアログが表示された。
Licence Agreement 画面が表示された。
I accept the agreement のラジオボタンをチェックして、Next ボタンをクリックした。
Efinity_53_240315.png

Information 画面
Next ボタンをクリックした。
Efinity_54_240315.png

Select Destination Location 画面
デフォルトの C:\iverilog のままとした。
Next ボタンをクリックした。
Efinity_55_240315.png

Select Components 画面
GTKWave もインストールされるようだ。
Next ボタンをクリックした。
Efinity_56_240315.png

Select Start Menu Folder 画面
デフォルトの Icarus Verilog のままとした。
Next ボタンをクリックした。
Efinity_57_240315.png

Select Addtional Tasks 画面
Next ボタンをクリックした。
Efinity_58_240315.png

Ready to Install 画面
Install ボタンをクリックした。
Efinity_59_240315.png

インストールが開始され、進行した。
Efinity_60_240315.png

インストールが終了した。
Finishボタンをクリックした。
Efinity_61_240315.png

C:\iverilog フォルダを確認した。
gtkwave フォルダもあった。
Efinity_62_240315.png

GTKWave へのパスを設定する。
環境変数ダイアログの表示方法に関しては、”Windows 10 環境変数設定手順”を参照した。

Windows アイコンを右クリックし、右クリックメニューから”設定”を選択した。
設定ダイアログが表示された。
設定ダイアログで”設定の検索”に”環境変数”を入力した。
検索項目が 2 つ示されるので、そのうちの”環境変数を編集”をクリックした。
Efinity_26_240312.png

環境変数ダイアログが表示された。
ユーザーの環境変数の Path をクリックして、編集ボタンをクリックした。
Efinity_63_240315.png

環境変数の編集画面が開いた。
新規ボタンをクリックし、GTKWave へのパスを追加する。
Efinity_64_240315.png

C:¥iverlog¥gtkwave¥bin を追加した。
OK ボタンをクリックした。
Efinity_65_240315.png

見えないが、ユーザーの環境変数の Path に GTKWave へのパスが追加された。
OK ボタンをクリックした。
Efinity_66_240315.png

(2024/03/17:追記) Icarus Verilog へのパスを追加する必要があった。詳しくは”Windows 11 の Efinity で helloworld チュートリアルをやってみる1”参照。
ユーザーの環境変数の Path をクリックして、編集ボタンをクリックした。
Efinity_89_240317.png

環境変数の編集画面が開いた。
新規ボタンをクリックし、Icarus Verilog へのパスを追加した。
Efinity_90_240317.png


C:\iverilog\gtkwave\bin フォルダの gtkwave.exe をダブルクリックした。
Efinity_67_240315.png

ターミナルと一緒に GTKWave が起動した。
Efinity_68_240315.png
  1. 2024年03月15日 05:29 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Efinity IDE のインストール3(Windows 11 へインストール2)

Efinity IDE のインストール2(Windows 11 へインストール1)”の続き。

前回は、Efinity IDE を Windows 11 のパソコンにインストールするための前準備として、Microsoft Visual C++ 2019 x64 runtime libraryのインストールの確認と、USB ドライバの確認、OpenJDK のインストールを行った。今回は、前回行った USB ドライバでは使用できないようなので、Zadig ソフトウェアを使って、libusb ドライバをインストールした。

(2024/03/27:追記) Xyloni Development Kit の interface2 は libusb-win32 をインストールする必要が無いので、削除した。詳しくは、”Xyloni Development Kit を使ってみる1”を参照ください。

前回、USB ドライバが当たっていることを確認したが、”Efinix Ti60 評価ボードでLチカ 前編 (準備)”を参照すると、Efinity では、FTDI 社の標準ドライバでは無く、libusb というドライバが必要であることが書いてあった。ということで、急遽、Zadig で libusb ドライバをインストールする。

インストール手順は”Efinix Ti60 評価ボードでLチカ 前編 (準備)”を参照した。

Xyloni Development Kit を USB ケーブルで Windows 11 のパソコンに接続した。

Zadig ソフトウェアは前回ダウンロードした Zadig 2.8 を使用する。
ダウンロードした zadig-2.8.exe をダブルクリックして起動した。
Efinity_34_240314.png

Zadig ソフトウェアが起動した。
Efinity_35_240314.png

Option メニューから List All Devices を選択した。
Efinity_36_240314.png

プルダウンメニューから Xyloni (Interface 0) を選択した。
Efinity_37_240314.png

Xyloni (Interface 0) が表示された。
Driver の右のボックスの下向き三角をクリックする。
Efinity_38_240314.png

Driver の右のボックスに libusb-win32 を選択した。
Replace Driver ボタンをクリックした。
Efinity_39_240314.png

Installing Driver... ダイアログが表示された。
Efinity_40_240314.png

Driver Instration ダイアログが表示された。
成功のようだ。
Efinity_41_240314.png

Driver の左のボックスが libusb0 に更新された。
Efinity_45_240314.png

同様に Xyloni (Interface 1) に対して、libusb のインストールを行った。
Efinity_42_240314.png

同様に Xyloni (Interface 2) に対して、libusb のインストールを行った。
Efinity_43_240314.png

同様に Xyloni (Interface 3) に対して、libusb のインストールを行った。
Efinity_44_240314.png

これで libusb のインストールは終了した。

”Efinix Ti60 評価ボードでLチカ 前編 (準備)”を参照して、アンインストール手順も試してみよう。

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

デバイスマネージャー画面が開く。
libusb-win32 devices を展開すると、Xyloni (Interface 0)、 Xyloni (Interface 1)、 Xyloni (Interface 2)、 Xyloni (Interface 3) がインストールされていた。
そのうちの Xyloni (Interface 0) を試しにアンインストールしてみる。
Xyloni (Interface 0) を右クリックし、右クリックメニューから”デバイスのアンインストール”を選択した。
Efinity_46_240314.png

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

デバイスマネージャー画面から、libusb-win32 devices の Xyloni (Interface 0) が削除された。
Efinity_48_240314.png

この状態で Zadig ソフトウェアを起動しても Xyloni (Interface 0) が見えない。
Xyloni Development Kit を USB ケーブルから抜き差しする。
それから Zadig ソフトウェアを起動すると、Xyloni (Interface 0) の Driver が FTDIBUS に戻っていた。
Efinity_49_240314.png

もう一度、libusb をインストールした。
Efinity_50_240314.png
  1. 2024年03月14日 05:28 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Efinity IDE のインストール2(Windows 11 へインストール1)

”Efinity IDE のインストール1(Ubuntu 22.04 へインストール)”の続き。

前回は、Efinity IDE を Ubuntu 22.04 のパソコンにインストールした。今回は、Efinity IDE を Windows 11 のパソコンにインストールするための前準備として、Microsoft Visual C++ 2019 x64 runtime libraryのインストールの確認と、USB ドライバの確認、OpenJDK のインストールを行った。

Efinity IDE のダウンロード”で ダウンロードした efinity-2023.2.307-windows-x64.msi と efinity-2023.2.307.2.17-windows-x64-patch.zip を使用する。

インストール手順は”Efinity® Software Installation User Guide UG-EFN-INSTALL-v3.1 January 2024”を参照する。

Windows Requirements は
・ Windows 10 or later, 64 bit operating system は Windows 11 の 64 ビットなのでクリアしている。
・ Microsoft Visual C++ 2019 x64 runtime library (or latest version) redistributable
これは、Windows 11 の設定からアプリ>インストールされているアプリを検索すると、Microsoft Visual C++ 2015-2019 Redistributable (x64) が見つかったので、大丈夫のようだ。
Efinity_20_240312.png

インストールされていない場合は、”Latest Microsoft Visual C++ Redistributable Version”辺りからダウンロードして、インストールする必要があると思う。

・Zadig software to install USB drivers
Zadig USB driver installation made easy”から Zadig 2.8 をダウンロードする。
Efinity_21_240312.png

Efinity® Software Installation User Guide UG-EFN-INSTALL-v3.1 January 2024”の”Installing the Windows USB Driver”を参照してインストールする。
私のパソコンでは、Xyloni Development Kit を USB ケーブルで Windows 11 のパソコンに接続すると、USB Serial Port が 4 個追加されたので、ドライバはインストールされているだろうということで、そのままとした。(2024/03/14:追記)libusb ドライバをインストールする必要がある。”Efinity IDE のインストール3(Windows 11 へインストール2)”を参照のこと。
Efinity_22_240312.png

・Java 64-bit runtime environment
Efinity® Software Installation User Guide UG-EFN-INSTALL-v3.1 January 2024”には、3 つの選択肢があるが、そのうちの OpenJDK16 をインストールする。
Archived OpenJDK General-Availability Releases”から、”16 GA (build 16+36) Windows 64-bit zip”をダウンロードする。
Efinity_23_240312.png

OpenJDK のインストールについては、”Windows 版 OpenJDK インストール手順”を参照した。

ダウンロードした openjdk-16_windows-x64_bin.zip を
Efinity_24_240312.png

展開して、C: ドライブにコピーした。
Efinity_25_240312.png

C: ドライブに jdk-16 ディレクトリが生成された。

jdk-16 ディレクトリの情報を環境変数に追加する。
環境変数ダイアログの表示方法に関しては、”Windows 10 環境変数設定手順”を参照した。

Windows アイコンを右クリックし、右クリックメニューから”設定”を選択した。
設定ダイアログが表示された。
設定ダイアログで”設定の検索”に”環境変数”を入力した。
検索項目が 2 つ示されるので、そのうちの”環境変数を編集”をクリックした。
Efinity_26_240312.png

環境変数ダイアログが表示された。
Efinity_27_240312.png

ユーザー環境変数の”新規(N)...”ボタンをクリックする。
Efinity_28_240312.png

新しいユーザー関数ダイアログが表示された。
変数名に JAVA_HOME 、変数値に C:\jdk-16 を入力した。
OK ボタンをクリックした。
Efinity_34_240312.png

ユーザー環境変数に JAVA_HOME が追加された。
Efinity_29_240312.png

ユーザー環境変数の Path に JAVA_HOME の bin フォルダへのパスを追加する。
ユーザー環境変数の Path を選択して、”編集(E)...”ボタンをクリックした。
Efinity_30_240312.png

環境変数名の編集ダイアログが表示された。
”新規(N)”ボタンをクリックした。
Efinity_31_240312.png

%JAVA_HOME%\bin を入力した。
OK ボタンをクリックした。
Efinity_32_240312.png

環境変数ダイアログも OK ボタンで閉じた。

Windows アイコンを右クリックし、右クリックメニューから”ターミナル”を選択した。
Windows PowerShell が起動した。
java -version を入力した。

openjdk version "16" 2021-03-16
OpenJDK Runtime Environment (build 16+36-2231)
OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)


が表示された。
Efinity_33_240312.png
  1. 2024年03月13日 04:49 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Efinity IDE のインストール1(Ubuntu 22.04 へインストール)

Efinity IDE のダウンロード”で Ubuntu 用のインストーラーの efinity-2023.2.307-ubuntu-x64.tar.bz2 をダウンロードすることができた。今回は、”Efinity® Software Installation User Guide UG-EFN-INSTALL-v3.1 January 2024”に従って、Ubuntu 22.04 のパソコンにインストールした。

まずは Ubuntu のバージョンは”Ubuntu v18.04 or later”だそうだ。私のパソコンは Ubuntu 22.04 なので問題ない。
最初に、いくつかのグラフィック関連ライブラリをインストールする必要があるそうだ。
sudo apt install libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0
なお、”Efinity® Software Installation User Guide UG-EFN-INSTALL-v3.1 January 2024”では、最後のライブラリの名前が間違っていたようだ。
Efinity_12_240311.png

次に iVerilog つまり、Icarus Verilog と GTKWave をインストールするということだが、すでにインストールしてあるので、省略する。
インストールの仕方は”Efinity® Software Installation User Guide UG-EFN-INSTALL-v3.1 January 2024”に書いてあるので、参照ください。

Efinity Software をインストールする。
まず、適当なディレクトリに(私は、Efinity ディレクトリを作成した)、efinity-2023.2.307-ubuntu-x64.tar.bz2 をコピーした。
efinity-2023.2.307-ubuntu-x64.tar.bz2 を展開する。
tar -xjvf efinity-2023.2.307-ubuntu-x64.tar.bz2
Efinity_13_240311.png

Efinity ディレクトリを示す。efinity ディレクトリが生成された。
Efinity_14_240311.png

tree efinity をしたところ、3240 ディレクトリと 26019 のファイルがあるようだ。
Efinity_15_240311.png

パッチをインストールする。
efinity-2023.2.307.2.17-ubuntu-x64-patch.zip を Efinix ディレクトリにコピーした。
ダブルクリックして、展開した。
efinity-2023.2.307.2.17-ubuntu-x64-patch ディレクトリが生成された。
Efinity_16_240311.png

パッチを適用する。
cd efinity-2023.2.307.2.17-ubuntu-x64-patch
source /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/bin/setup.sh
./run.sh

Efinity_17_240311.png

Efinity IDE を起動する。
source /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/bin/setup.sh
efinity

このコマンドは後でシェルスクリプトにしておこう。
Efinity Software が起動した。
Efinity_18_240311.png

Efinity Software を終了して、USB ドライバをインストールする。
sudo /media/masaaki/Ubuntu_Disk/Efinity/efinity/2023.2/bin/install_usb_driver.sh
sudo udevadm control --reload-rules

Efinity_19_240311.png
  1. 2024年03月12日 04:50 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

Efinity IDE のダウンロード

Xyloni Development Kit が届いた”の Xyloni Development Kit を使用するために Efinity IDE をダウンロードする。

最初に Efinix の Support Center ページの Register をクリックした。
Efinity_1_240306.png

Account Registration ページの User Contact Information を入力した。
会社名を入力しなくても hobbyist という入力項目があって、私のような人に優しい入力フォームだった。
Efinity_2_240306.png

Register で入力したメールアドレスにコンファームのメールが届くので、そこにある URL をクリックして、メールアドレスをコンファームした。

Register が終了したら、Efinix の Support Center ページで、Login をクリックした。
I agree to Efinix's privacy policy and terms of us のチェックボックスにチェックを入れた。
Register したメールアドレスとパスワードを入力し、Sign In ボタンをクリックして、ログインする。
Efinity_3_240306.png

Efinity and RISC-V IDE Downloads ページで Request Free Efinity License ボタンをクリックする。
Efinity_4_240306.png

Request Efinity License ボタンが表示されるので、クリックした。

Software License Request Successful ページが表示された。
Efinity_6_240306.png

Home ボタンをクリックすると、Home ページが表示される。
Efinity_7_240306.png

Home ページからは、 Efinity Software の Current version: 2023.2.307 をクリックすると Efinity and RISC-V IDE Downloads ページに行ける。
Efinity_8_240306.png

もしくは、Software License Request Successful ページの状態から Efinity ボタンをクリックすると、Efinity and RISC-V IDE Downloads ページに行ける。

とにかく、Efinity and RISC-V IDE Downloads ページに行って、必要なツールのインストーラーをダウンロードしよう。

必要なインストーラーをクリックすると、Efinity Software License Agreement の I agree ボタンをクリックする必要があるようだ。
Efinity_9_240306.png

ダウンロードが終了すると、Efinity Software Download ページが表示された。
Efinity_10_240306.png

私は、Ubuntu 用と Windows 用のインストーラーをダウンロードした。
Efinity_11_240306.png
  1. 2024年03月11日 04:45 |
  2. Efinity IDE
  3. | トラックバック:0
  4. | コメント:0

fifo8 IP の作成4(Gowin FPGA Designer で検証)

fifo8 IP の作成3”の続き。

8 深度の FIFO を SystemVerilog で書いてみるということで、前回は、バグがないかどうか?不安になり、テストベンチにアサーションを入れたところ、バグが分かった。バグを修正し、シミュレーションを行った。今回は、Gowin FPGA Designer で fifo8.sv を Synthesis 、Place & Route してみた。

IDE/bin/gw_ide をダブルクリックして、GOWIN FPGA Designer を起動した。
File メニューから New... を選択して、プロジェクトを新規作成した。

New ダイアログが開いた。
Projects の FPGA Design Project を選択して、OK ボタンをクリックした。

Project Wizard ダイアログが表示された。
Project Name 画面で、Name に fifo8 と入力し、Create in に /media/masaaki/Ubuntu_Disk/Gowin/HDL を指定した。
Next > ボタンをクリックした。
fifo8_9_240308.png

Slelect Device 画面
GW5A-LV25MG121NC1/10 を選択した。
Next > ボタンをクリックした。
fifo8_10_240308.png

Summary 画面
Finish ボタンをクリックした。
fifo8_11_240308.png

fifo8 プロジェクトが作成できた。
fifo8_12_240308.png

System Verilog を使えるように設定する。
Project メニューから Configration を選択した。
Configuration ダイアログが開いた。
Synthesis -> General をクリックし、GowinSynthesis の Verilog Language で System Verilog 2017 を選択した。
OK ボタンをクリックした。
fifo8_13_240308.png

Gowin/HDL/fifo8/src ディレクトリに fifo8.sv をコピーした。
Gowin FPGA Designer の Design タブの Verilog Files を右クリックし、右クリックメニューから Add Files... を選択した。
Select Files ダイアログが表示された。
fifo8/src/fifo8.sv を選択し、Open ボタンをクリックした。
Design タブの Verilog Files に fifo8.sv が追加された。

fifo8.sv をアクティブ・ハイのリセットからアクティブ・ローのリセットに変更した。
”parameter data_width = 8”に変更した。つまり、データ幅を 8 ビットにした。
fifo8_14_240308.png

Run Synthesis ボタンをクリックし、論理合成を行った。

GOWIN FPGA Designer で FloorPlanner ボタンをクリックした。

Constraint File ダイアログが表示された。
OK ボタンをクリックした。

FloorPlanner が起動した。
Package View タブをクリックした。

適当に PMOD のピンに fifo8 の信号を割り当てた。
fifo8_15_240308.png

Save Contraints to /media/masaaki/Ubuntu_Disk/Gowin/HDL/fifo8/src/fifo8.cst ボタンをクリックして、blink2.cst にセーブした。
GOWIN FPGA Designer に戻ると、fifo8.cst ファイルが生成されていた。

//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
//All rights reserved. 
//File Title: Physical Constraints file
//GOWIN Version: 1.9.9 Beta-4 Education
//Part Number: GW5A-LV25MG121NC1/I0
//Device: GW5A-25
//Device Version: A
//Created Time: Fri 03 08 04:37:27 2024

IO_LOC "empty" G8;
IO_PORT "empty" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[7]" K5;
IO_PORT "out_data[7]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[6]" L5;
IO_PORT "out_data[6]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[5]" L11;
IO_PORT "out_data[5]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[4]" K11;
IO_PORT "out_data[4]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[3]" E10;
IO_PORT "out_data[3]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[2]" E11;
IO_PORT "out_data[2]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[1]" A10;
IO_PORT "out_data[1]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "out_data[0]" A11;
IO_PORT "out_data[0]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "full" G7;
IO_PORT "full" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "rd_ena" G5;
IO_PORT "rd_ena" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "wr_ena" F5;
IO_PORT "wr_ena" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[7]" C10;
IO_PORT "in_data[7]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[6]" C11;
IO_PORT "in_data[6]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[5]" B10;
IO_PORT "in_data[5]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[4]" B11;
IO_PORT "in_data[4]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[3]" D10;
IO_PORT "in_data[3]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[2]" D11;
IO_PORT "in_data[2]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[1]" G10;
IO_PORT "in_data[1]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "in_data[0]" G11;
IO_PORT "in_data[0]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "rst_n" H11;
IO_PORT "rst_n" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "clk" E2;
IO_PORT "clk" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;


fifo8_16_240308.png

次に、Timing Constraints Editor ボタンをクリックし、タイミング制約を作成する。

Constraint File ダイアログが表示された。
SDC file (*.sdc) を作成するとのことだ。
OK ボタンをクリックした。

Gowin Timing Constraints Editor が開いた。
Netlist Tree ウインドウの fifo8 -> Ports (22) -> clk を右クリックし、右クリックメニューから Add Clock を選択した。
fifo8_17_240308.png

Create Clock ダイアログが開いた。
Clock name に clk を入力し、Waveform の Period を 20 ns に、Rising を 0 ns、Falling を 10 ns に設定した。
OK ボタンをクリックした。
fifo8_18_240308.png

clk タイミング制約が追加された。
Save ボタンをクリックして、セーブした。
fifo8_19_240308.png

GOWIN FPGA Designer に戻ると、fifo8.sdc ファイルが生成されていた。

//Copyright (C)2014-2024 GOWIN Semiconductor Corporation.
//All rights reserved.
//File Title: Timing Constraints file
//GOWIN Version: 1.9.9 Beta-4 Education
//Created Time: 2024-03-08 04:41:47
create_clock -name clk -period 20 -waveform {0 10} [get_ports {clk}]


fifo8_20_240308.png

GOWIN FPGA Designer で Project メニューから Configuration をクリックした。
Configuration ダイアログが表示された。
Use CPU as regular IO にチェックを入れて、OK ボタンをクリックした。
fifo8_21_240308.png

Run Place & Routte ボタンをクリックして、Place & Route を行った。成功した。
fifo8_22_240308.png

GOWIN FPGA Designer の Process タブをクリックし、Process ウインドウを表示した。
Place & Route -> Place & Route Report を表示した。
Resource -> Resource Usage Summary を表示した。
Logic は 49 個使用して、その内訳は LUT が 68 個、ALU が 31 個、ROM16 が 0 個だそうだ。
Register は 72 個だった。
fifo8_23_240308.png

Place & Route -> Timing Analyzer Report をクリックした。
Timing Summaries -> Clock Summary などを表示した。
Max Frequency Summay を見ると、Actual Fmax は 105.073 MHz だった。
大丈夫そうだ。IP として使えそうだ。
fifo8_24_240308.png
  1. 2024年03月10日 04:51 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

fifo8 IP の作成3

fifo8 IP の作成2”の続き。

8 深度の FIFO を SystemVerilog で書いてみることにしたということで、前回は、Icarus Verilog でシミュレーションを行った。今回は、バグがないかどうか?不安になり、テストベンチにアサーションを入れたところ、バグが分かった。バグを修正し、シミュレーションを行った。

バグがないかどうか?不安になり、テストベンチにアサーションを入れた。
アサーションは SystemVerilog の queue 型配列で実装した。なお、”SystemVerilogで遊ぼう! - 03. queue型配列”を参照させていただいた。

    task fifo_input;
        forever begin
            @(posedge clk);
            #15;
            if(~reset & wr_ena & ~full)
                array.push_back(in_data);
        end
    endtask
     initial begin
        #10 fork
            fifo_input;
        join_none
    end
   
    task fifo_val_check;
        integer fdata;

        forever begin
            @(posedge clk);
            #15;
            if(~reset & rd_ena & ~empty) begin
                fdata = array.pop_front();
                if(out_data != fdata) begin
                    $display("time = %t, out_data = %d, array = %d", $realtime, out_data, fdata);
                end
            end
        end
    endtask
     initial begin
        #10 fork
            fifo_val_check;
        join_none
    end


それで、Icarus Verilog でシミュレーションを行ったところ、エラーが発生した。
iverilog -o fifo8 fifo8*.sv -g 2012
vvp fifo8

fifo8_25_240309.png

Valid[7:0] の振る舞いの表を修正した。
fifo8_26_240309.png
fifo8_27_240309.png
fifo8_28_240309.png

fifo8.sv と fifo8_tb.sv を修正した。

Icarus Verilog でシミュレーションを行う。
iverilog -o fifo8 fifo8*.sv -g 2012
vvp fifo8

fifo8_29_240309.png

GTKWave を起動して、VCD ファイルを開いた。
gtkwave &
なお、indata[23:0] と out_data[23:0] の Data Format は Decimal に変更してある。
fifo8_30_240309.png

値が見えないので、拡大した。
fifo8_31_240309.png
fifo8_32_240309.png

fifo8.sv を貼っておく。

// fifo8.sv
// 2024/02/29 by marsee
// 8 entries fifo
// 2024/03/09 : Added assertions and fixed bugs

module fifo8 #(
    parameter data_width = 24
)(
    input   logic   clk,
    input   logic   reset,
    input   logic   [data_width-1:0]in_data,
    input   logic   wr_ena,
    output  logic   full,
    output  logic   [data_width-1:0]out_data,
    input   logic   rd_ena,
    output  logic   empty
);
    reg [data_width-1:0] ff[7:0];
    reg [7:0] valid;
    integer valid_po;

    always_ff @(posedge clk) begin : FF_OP
        integer i;

        if(reset) begin
            for(i=7; i>0; i=i-1) begin
                ff[i] <= 0;
            end
        end else begin
            for(i=7; i>1; i=i-1) begin
                if(full==1'b0 && wr_ena==1'b1) begin
                    ff[i-1] <= ff[i];
                end
            end
            if(full==1'b0 && wr_ena==1'b1) begin
                ff[7] <= in_data;
            end
        end
    end

    always_comb begin
        if(valid == 8'd0)
            valid_po = 8;
        else if(valid == 8'h80)
            valid_po = 7;
        else if(valid == 8'h01)
            valid_po = 8;
        else if(valid == 8'h81)
            valid_po = 7;
        else if(valid == 8'hc1)
            valid_po = 6;
        else if(valid == 8'he1)
            valid_po = 5;
        else if(valid == 8'hf1)
            valid_po = 4;
        else if(valid == 8'hf9)
            valid_po = 3;
        else if(valid == 8'hfd)
            valid_po = 2;
        else if(valid == 8'hff)
            valid_po = 1;
         else
             valid_po = 8;
    end
    
    always_ff @(posedge clk) begin
        if(reset) begin
            ff[0] <= 0;
        end else if(valid_po != 8 & rd_ena) begin
            ff[0] <= ff[valid_po];
        end else if(valid == 8'h80)
            ff[0] <= ff[valid_po];
    end
    assign out_data = ff[0];
    
    always_ff @(posedge clk) begin
        integer  i;

        if(reset) begin
            for(i=7; i>=0; i=i-1) begin
                valid[i] <= 0;
            end
            full <= 1'b0;
        end else begin
            if(wr_ena & valid==8'd0) begin
                valid[7] <= 1'b1;
            end else if(valid == 8'h80) begin // valid[7]のみが1の場合
                if(~wr_ena & ~rd_ena) begin
                    valid[7] <= 1'b0;
                    valid[0] <= 1'b1;
                end else if(wr_ena & ~rd_ena)
                    valid[0] <= 1'b1;
                else if(wr_ena & rd_ena) begin
                    valid[0] <= 1'b1;
                end
            end else if(valid == 8'h01) begin // Valid[0]のみが1の場合
                if(~wr_ena & rd_ena)
                    valid[0] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[7] <= 1'b1;
                else if(wr_ena & rd_ena) begin
                    valid[7] <= 1'b1;
                    valid[0] <= 1'b0;
                end
            end else if(valid == 8'h81) begin // valid[7], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[7] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[6] <= 1'b1;
            end else if(valid == 8'hc1) begin // valid[7], valid[6], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[6] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[5] <= 1'b1;
            end else if(valid == 8'he1) begin // valid[7], valid[6], valid[5], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[5] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[4] <= 1'b1;
            end else if(valid == 8'hf1) begin // valid[7], valid[6], valid[5], valid[4], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[4] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[3] <= 1'b1;
            end else if(valid == 8'hf9) begin // valid[7], valid[6], valid[5], valid[4], valid[3], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[3] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[2] <= 1'b1;
            end else if(valid == 8'hfd) begin // valid[7], valid[6], valid[5], valid[4], valid[3], valid[2], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[2] <= 1'b0;
                else if(wr_ena & ~rd_ena) begin
                    valid[1] <= 1'b1;
                    full <= 1'b1;
                end
            end else if(valid == 8'hff) begin // Valid[7:0]がすべて1の場合
                if(rd_ena) begin
                    valid[1] <= 1'b0;
                    full <= 1'b0;
                end
            end
        end
    end

    assign empty = ~valid[0];

// the "macro" to dump signals
`ifdef COCOTB_SIM
initial begin
  $dumpfile ("fifo2.vcd");
  $dumpvars (0, fifo8);
  #1;
end
`endif

endmodule


テストベンチの fifo8_tb.sv を貼っておく。

// fifo8_tb.sv
// 2024/02/29 by marsee
// 2024/03/09 : Added assertions and fixed bugs

`timescale 1ns / 1ns

module fifo8_tb;
    parameter data_width = 24;

    logic   clk;
    logic   reset;
    logic   [data_width-1:0]in_data;
    logic   wr_ena;
    logic   full;
    logic   [data_width-1:0]out_data;
    logic   rd_ena;
    logic   empty;
    integer i;
    int array[$];

    task gen_clk;
        forever begin
            #10 clk = ~clk; // 10 単位時間ごとに反転
        end
    endtask
    initial begin
        #10 fork
            gen_clk;
        join_none
    end

    task fifo_input;
        forever begin
            @(posedge clk);
            #15;
            if(~reset & wr_ena & ~full)
                array.push_back(in_data);
        end
    endtask
     initial begin
        #10 fork
            fifo_input;
        join_none
    end
   
    task fifo_val_check;
        integer fdata;

        forever begin
            @(posedge clk);
            #15;
            if(~reset & rd_ena & ~empty) begin
                fdata = array.pop_front();
                if(out_data != fdata) begin
                    $display("time = %t, out_data = %d, array = %d", $realtime, out_data, fdata);
                end
            end
        end
    endtask
     initial begin
        #10 fork
            fifo_val_check;
        join_none
    end

    initial begin // 一回のみ順番に実行される
        clk = 1'b1;
        reset = 1'b1;
        wr_ena = 1'b0;
        rd_ena = 1'b0;
        in_data = 0;
        #60
        reset = 1'b0;
        wr_ena = 1'b1;
        for(i=0; i<10; i=i+1) begin
            @(posedge clk);
            #1;
            in_data = in_data + 8'd1;
        end
        #60;
        wr_ena = 1'b0;
        rd_ena = 1'b1;
        for(i=0; i<10; i=i+1) begin
            in_data = in_data + 8'd1;
            @(posedge clk);
            #1;
        end
        #60
        for(i=0; i<80; i=i+1) begin
            in_data = in_data + 8'd1;
            wr_ena = $urandom_range(1,0);
            rd_ena = $urandom_range(1,0);
            @(posedge clk);
            #1;
        end
        #60
        $finish;
    end

    fifo8 fifo8_inst(.*);

    // シミュレーション時に fifo.vcd を出力する
    initial begin
        $dumpfile("fifo8.vcd");
        $dumpvars (0, fifo8_inst);
        #1;
    end
endmodule

  1. 2024年03月09日 05:16 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

fifo8 IP の作成2

”fifo8 IP の作成1”の続き。

(2024/03/09:修正)ソースコードにバグがあったので、ソースコードを修正した。詳しくは”fifo8 IP の作成3”を参照。

8 深度の FIFO を SystemVerilog で書いてみることにしたということで、前回は、概要とソースコードを貼った。今回は、Icarus Verilog でシミュレーションを行った。

Icarus Verilog でシミュレーションを行う。
iverilog -o fifo8 fifo8*.sv -g 2012
vvp fifo8

fifo8_4_240307.png

fifo8 ディレクトリに fifo8 と fifo8.vcd ファイルが生成された。
fifo8_5_240307.png

GTKWave を起動して、VCD ファイルを開いた。
gtkwave &
なお、indata[23:0] と out_data[23:0] の Data Format は Decimal に変更してある。
fifo8_6_240307.png

値が見えないので、拡大した。
fifo8_7_240307.png
fifo8_8_240307.png

問題なさそうだ。
  1. 2024年03月08日 04:00 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

fifo8 IP の作成1

8 深度の FIFO を SystemVerilog で書いてみることにした。今回は、概要とソースコードを貼っておく。

(2024/03/09:修正)ソースコードにバグがあったので、ソースコードを修正した。詳しくは”fifo8 IP の作成3”を参照。

8 深度の汎用 FIFO を SystemVerilog で書いてみることにした。
ブロック図を示す。
fifo8_1_240307.png

8 段の FF があって、最後の FF がデータを出力する。
入力は最初の FF に入力され、7 個の FF のデータの先頭を最後の FF に MUX で入力する。
それぞれの FF には、有効なデータが入っているか?を示す Valid フラグを付けておく。
Valid フラグの状況ごとに、次の Valid フラグの状態を表にまとめた。
Valid[7:0] の振る舞いの表を示す。
fifo8_2_240307.png
fifo8_3_240307.png

8 深度の汎用 FIFO の fifo8.sv を示す。

// fifo8.sv
// 2024/02/29 by marsee
// 8 entries fifo

module fifo8 #(
    parameter data_width = 24
)(
    input   logic   clk,
    input   logic   reset,
    input   logic   [data_width-1:0]in_data,
    input   logic   wr_ena,
    output  logic   full,
    output  logic   [data_width-1:0]out_data,
    input   logic   rd_ena,
    output  logic   empty
);
    reg [data_width-1:0] ff[7:0];
    reg [7:0] valid;
    integer valid_po;

    always_ff @(posedge clk) begin : FF_OP
        integer i;

        if(reset) begin
            for(i=7; i>0; i=i-1) begin
                ff[i] <= 0;
            end
        end else begin
            for(i=7; i>1; i=i-1) begin
                if(full==1'b0 && wr_ena==1'b1) begin
                    ff[i-1] <= ff[i];
                end
            end
            if(full==1'b0 && wr_ena==1'b1) begin
                ff[7] <= in_data;
            end
        end
    end

    always_comb begin
        if(valid == 8'd0)
            valid_po = 8;
        else if(valid == 8'h80)
            valid_po = 7;
        else if(valid == 8'h01)
            valid_po = 8;
        else if(valid == 8'h81)
            valid_po = 7;
        else if(valid == 8'hc1)
            valid_po = 6;
        else if(valid == 8'he1)
            valid_po = 5;
        else if(valid == 8'hf1)
            valid_po = 4;
        else if(valid == 8'hf9)
            valid_po = 3;
        else if(valid == 8'hfd)
            valid_po = 2;
        else if(valid == 8'hff)
            valid_po = 1;
         else
             valid_po = 8;
    end
    
    always_ff @(posedge clk) begin
        if(reset) begin
            ff[0] <= 0;
        end else if(valid_po != 8 & rd_ena) begin
            ff[0] <= ff[valid_po];
        end else if(valid == 8'h80)
            ff[0] <= ff[valid_po];
    end
    assign out_data = ff[0];
    
    always_ff @(posedge clk) begin
        integer  i;

        if(reset) begin
            for(i=7; i>=0; i=i-1) begin
                valid[i] <= 0;
            end
            full <= 1'b0;
        end else begin
            if(wr_ena & valid==8'd0) begin
                valid[7] <= 1'b1;
            end else if(valid == 8'h80) begin // valid[7]のみが1の場合
                if(~wr_ena & ~rd_ena) begin
                    valid[7] <= 1'b0;
                    valid[0] <= 1'b1;
                end else if(wr_ena & ~rd_ena)
                    valid[0] <= 1'b1;
                else if(wr_ena & rd_ena) begin
                    valid[0] <= 1'b1;
                end
            end else if(valid == 8'h01) begin // Valid[0]のみが1の場合
                if(~wr_ena & rd_ena)
                    valid[0] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[7] <= 1'b1;
                else if(wr_ena & rd_ena) begin
                    valid[7] <= 1'b1;
                    valid[0] <= 1'b0;
                end
            end else if(valid == 8'h81) begin // valid[7], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[7] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[6] <= 1'b1;
            end else if(valid == 8'hc1) begin // valid[7], valid[6], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[6] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[5] <= 1'b1;
            end else if(valid == 8'he1) begin // valid[7], valid[6], valid[5], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[5] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[4] <= 1'b1;
            end else if(valid == 8'hf1) begin // valid[7], valid[6], valid[5], valid[4], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[4] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[3] <= 1'b1;
            end else if(valid == 8'hf9) begin // valid[7], valid[6], valid[5], valid[4], valid[3], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[3] <= 1'b0;
                else if(wr_ena & ~rd_ena)
                    valid[2] <= 1'b1;
            end else if(valid == 8'hfd) begin // valid[7], valid[6], valid[5], valid[4], valid[3], valid[2], valid[0]が1の場合
                if(~wr_ena & rd_ena)
                    valid[2] <= 1'b0;
                else if(wr_ena & ~rd_ena) begin
                    valid[1] <= 1'b1;
                    full <= 1'b1;
                end
            end else if(valid == 8'hff) begin // Valid[7:0]がすべて1の場合
                if(~wr_ena & rd_ena) begin
                    valid[1] <= 1'b0;
                    full <= 1'b0;
                end
            end
        end
    end

    assign empty = ~valid[0];

// the "macro" to dump signals
`ifdef COCOTB_SIM
initial begin
  $dumpfile ("fifo2.vcd");
  $dumpvars (0, fifo8);
  #1;
end
`endif

endmodule


テストベンチの fifo8_tb.sv を示す。

// fifo8_tb.sv
// 2024/02/29 by marsee

`timescale 1ns / 1ns

module fifo8_tb;
    parameter data_width = 24;

    logic   clk;
    logic   reset;
    logic   [data_width-1:0]in_data;
    logic   wr_ena;
    logic   full;
    logic   [data_width-1:0]out_data;
    logic   rd_ena;
    logic   empty;
    integer i;

    task gen_clk;
        forever begin
            #10 clk = ~clk; // 10 単位時間ごとに反転
        end
    endtask
    
    initial begin
        #10 fork
            gen_clk;
        join_none
    end

    initial begin // 一回のみ順番に実行される
        clk = 1'b0;
        reset = 1'b1;
        wr_ena = 1'b0;
        rd_ena = 1'b0;
        in_data = 0;
        #60
        reset = 1'b0;
        wr_ena = 1'b1;
        for(i=0; i<10; i=i+1) begin
            @(posedge clk);
            #1;
            in_data = in_data + 8'd1;
        end
        #60;
        wr_ena = 1'b0;
        rd_ena = 1'b1;
        for(i=0; i<10; i=i+1) begin
            in_data = in_data + 8'd1;
            @(posedge clk);
            #1;
        end
        #60
        for(i=0; i<80; i=i+1) begin
            in_data = in_data + 8'd1;
            wr_ena = $urandom_range(1,0);
            rd_ena = $urandom_range(1,0);
            @(posedge clk);
            #1;
        end
        #60
        $finish;
    end

    fifo8 fifo8_inst(.*);

    // シミュレーション時に fifo.vcd を出力する
    initial begin
        $dumpfile("fifo8.vcd");
        $dumpvars (0, fifo8_inst);
        #1;
    end
endmodule

  1. 2024年03月07日 04:56 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

Tang Primer 25K の SDRAM モジュールを使ってみる4

Tang Primer 25K の SDRAM モジュールを使ってみる3”の続き。

Tang Primer 25K の SDRAM モジュールを使ってみたいということで、前回は、タイミング制約違反を解消しようとしたが、解消できなかった。しかし、タイミング制約違反は改善した。今回は、Programmer を起動して、Tang Primer 25K をコンフィギュレーションした。GTK Term を起動して、Tang Primer 25K に接続しようとしたが、USB シリアルのポートが見つからない。X で IDA さんに教えていただいて、解決できたが、私が SDRAM モジュールを逆刺ししてしまったので、FAIL が表示された。

前回の Run Place & Route で TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/pnr /sdram.fs が生成されている。
Tang_Primer_25K_254_240306.png

Tang Primer 25K をホスト・パソコンに USB ケーブルで接続した。

ホスト・パソコンの OS は Ubuntu 22.04 なので、Programmer をスーバーユーザー権限で起動した。
sudo /media/masaaki/Ubuntu_Disk/Gowin/Programmer/bin/programmer -family GW5A -device GW5A-25A -fs /media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/pnr/sdram.fs

Programmer が起動し、USB Debuuger A ケーブルが見つかった。
Save ボタンをクリックした。

Gowin Programmer が起動した。
Tang_Primer_25K_255_240306.png

Programmer の Program/Configure ボタンをクリックした。

Progress Information ダイアログが表示された。
Programming... が進んでいく。

コンフィギュレーションが終了した。
Tang_Primer_25K_256_240306.png

次に、この SDRAM プロジェクトでは、SDRAM の検査結果がシリアル経由で表示されるようなので、GTK Term を起動した。
sudo gtkterm

GTK Term の GUI が起動した。
Configuration メニューから Port を選んで、USB シリアルを選ぼうとしたが、メニューに表示されない。
Tang_Primer_25K_257_240306.png

Programmer が専有しているんだろう? ということで、Programmer を終了したが、やはり、USB シリアルのポートは表示されない。。。

X でつぶやいたら、IDA さんに教えていただいた。いつもありがとうございます。

Linux環境だとProgrammerがftdi_sioをunloadするという暴挙にでるので、手動でsudo modprobe ftdi_sio するしかないです。


sudo modprobe ftdi_sio
Tang_Primer_25K_258_240306.png

を実行したら、GTK Term で ttyUSB0 と ttyUSB1 が見えるようになった。
Tang_Primer_25K_259_240306.png

ttyUSB1 を選択して、OK ボタンをクリックした。
これで USB シリアルの準備ができた。
Tang Primer 25K の S1 ボタンをクリックすると、SDRAM のテスト結果を表示するようなので、S1 ボタンをクリックした。
すると下のように GTK Term に表示された。

Write aaaa ffff 0000 to ram0.
Write 5555 0000 ffff to ram1.
Read from ram0:aaaeffff0004
Read from ram1:55550004ffff

[TEST FAILED] !!!!!!!!!!!!!!!


TEST FAILED してしまっている。
Tang_Primer_25K_260_240306.png

これは、私が USB シリアルが見えなくて、SDRAM モジュールを付け外しして、いろいろとやっているときに、逆刺しして、電源 ON してしまったのが、原因のようだ。orz
もう一度、SDRAM モジュールを購入したので、テストはそれが届いてからにしよう。凹むな。。。
  1. 2024年03月06日 04:23 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0

Tang Primer 25K の SDRAM モジュールを使ってみる3

Tang Primer 25K の SDRAM モジュールを使ってみる2”の続き。

Tang Primer 25K の SDRAM モジュールを使ってみたいということで、前回は、Place & Route を行ったがエラーになった。エラー内容を修正後、Place & Route が成功した。リソース使用量とタイミング成約を確認したところ、タイミング成約違反があった。今回は、タイミング制約違反を解消しようとしたが、解消できなかった。しかし、タイミング制約違反は改善した。

Route のストラテジーを変更して、より配線を頑張るようにしてみよう。
”Gowin ソフトウェア ユーザーガイド SUG100-3.8J, 2023-11-30”の 51 ページの”Route”の Route Option で配線の頑張り具合を設定できるようだ。
現在は、0 だが、1 にすると、より良い配線結果を見つけてくれるようだ。

GOWIN FPGA Designer の Project メニューから Configuration を選択する。
Configuration ダイアログが開いた。
Place & Route -> Route をクリックし、Route Option を 1 に設定した。
Tang_Primer_25K_247_240305.png

Run Place & Routte ボタンをクリックして、Place & Route を行った。
Tang_Primer_25K_248_240305.png

Place & Route -> Timing Analyzer Report をクリックした。
Timing Summaries -> Clock Summary などを表示した。
Max Frequency Summay を見ると、clk133m の Actual Fmax は 131.768 MHz だった。タイミング制約エラーが出ているが Route Option が 0 のときの 126.565 MHz よりも改善されている。
Tang_Primer_25K_249_240305.png

Setup Paths Table のエラーの数も 1 個だけになり、前回よりも改善されている。
Tang_Primer_25K_250_240305.png

Route Option が 0 のときの Setup Paths Table のエラーを示す。
Tang_Primer_25K_246_240303.png

次は、Configuration ダイアログの Place & Route -> Place の Place Option を変更してみよう。

GOWIN FPGA Designer の Project メニューから Configuration を選択する。
Configuration ダイアログが開いた。
Place & Route -> Place をクリックし、Place Option を 1 に設定した。
Tang_Primer_25K_251_240305.png

Run Place & Routte ボタンをクリックして、Place & Route を行った。

Place & Route -> Timing Analyzer Report をクリックした。
Timing Summaries -> Clock Summary などを表示した。
Max Frequency Summay を見ると、clk133m の Actual Fmax は 124.096 MHz だった。Actual Fmax が悪くなってしまった。
Tang_Primer_25K_252_240305.png

Setup Paths Table のエラーの数も多くなった。
Tang_Primer_25K_253_240305.png

Configuration ダイアログの Place & Route -> Place の Place Option を 0 から 1 にすると、タイミング成約違反が悪くなるので、0 に戻した。
  1. 2024年03月05日 04:48 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0

Tang Primer 25K の SDRAM モジュールを使ってみる2

Tang Primer 25K の SDRAM モジュールを使ってみる1”の続き。

Tang Primer 25K の SDRAM モジュールを使ってみたいということで、前回は、TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/sdram.gprj を GOWIN FPGA Designer で開いて、論理合成を行ったが、エラーになった。エラーの原因は SystemVerilog に対応していなかったことだったので、GOWIN FPGA Designer の設定を修正後、論理合成が成功した。今回は、Place & Route を行ったがエラーになった。エラー内容を修正後、Place & Route が成功した。リソース使用量とタイミング成約を確認したところ、タイミング成約違反があった。

Run Place & Routte ボタンをクリックして、Place & Route を行った。
エラーが出てしまった。エラーの内容は

ERROR (CM2024) : GW5A-25A-MBGA121N SSPI regular_io must be set true.

だった。
Tang_Primer_25K_239_240303.png

このエラーの解消には、Dual-Purpose Pin の設定が必要だ。
GOWIN FPGA Designer の Project メニューから Configuration を選択する。
Configuration ダイアログが開いた。
Place & Route -> Dual-Purpose Pin をクリックし、Use SSPI as regular IO にチェックを入れた。
Tang_Primer_25K_240_240303.png

再度、Run Place & Routte ボタンをクリックして、Place & Route を行った。
今回もエラーだった。内容は、

ERROR (PR2028) : The constrained location is useless in current package
ERROR (PR2017) : 'sdram_dq[12]' cannot be placed according to constraint, for the location is a dedicated pin (I2C)
ERROR (PR2028) : The constrained location is useless in current package
ERROR (PR2017) : 'clk_50M' cannot be placed according to constraint, for the location is a dedicated pin (CPU/SSPI)

ということで、I2C ピンと CPU ピンも Dual-Purpose Pin の設定が必要なようだ。
Tang_Primer_25K_241_240303.png

GOWIN FPGA Designer の Project メニューから Configuration を選択する。
Configuration ダイアログが開いた。
Place & Route -> Dual-Purpose Pin をクリックした。
Use I2C as regular IO と Use CPU as regular IO にチェックを入れた。
Tang_Primer_25K_242_240303.png

再度、Run Place & Routte ボタンをクリックして、Place & Route を行った。
今度は成功した。
Tang_Primer_25K_243_240303.png

ログを示す。

Reading netlist file: "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/gwsynthesis/sdram.vg"
Parsing netlist file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/gwsynthesis/sdram.vg" completed
Processing netlist completed
Reading constraint file: "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram.cst"
Physical Constraint parsed completed
Running placement......
[10%] Placement Phase 0 completed
[20%] Placement Phase 1 completed
[30%] Placement Phase 2 completed
[50%] Placement Phase 3 completed
Running routing......
[60%] Routing Phase 0 completed
[70%] Routing Phase 1 completed
[80%] Routing Phase 2 completed
[90%] Routing Phase 3 completed
Running timing analysis......
[95%] Timing analysis completed
Placement and routing completed
Bitstream generation in progress......
Bitstream generation completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/pnr/sdram.pin.html" completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/pnr/sdram.rpt.html" completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/pnr/sdram.rpt.txt" completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/pnr/sdram.tr.html" completed
Sun Mar  3 21:18:25 2024


GOWIN FPGA Designer の Process タブをクリックし、Process ウインドウを表示した。
Place & Route -> Place & Route Report を表示した。
Resource -> Resource Usage Summary を表示した。
Logic は 934 個使用した。800 個の LUT と 134 個の ALU, 9 SDPB の BSRAM を使用している。
Tang_Primer_25K_244_240303.png

Place & Route -> Timing Analyzer Report をクリックした。
Timing Summaries -> Clock Summary などを表示した。
Max Frequency Summay を見ると、clk133m の Actual Fmax は 126.565 MHz だった。タイミング制約エラーが出ている。
Tang_Primer_25K_245_240303.png

Setup Paths Table にエラーがある。これは、clk133m がタイミング制約を満たさないことと関連がありそうだ。
Tang_Primer_25K_246_240303.png
  1. 2024年03月04日 05:20 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0

Tang Primer 25K の SDRAM モジュールを使ってみる1

Tang Primer 25K の SDRAM モジュールを使ってみたい。
TangPrimer-25K-exampleLicheeTang25k_SDRAM がリンクされているので、これをやってみようと思う。

GOWIN FPGA Designer を起動して、TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/sdram.gprj を読み込んで、sdram プロジェクトを開いた。
Tang_Primer_25K_231_240303.png

Tang Primer 25K Dock の回路図の Tang_Primer_25K_Dock_60033_Schematic.pdf や SDRAM ボードの回路図の Tang_sdram_xsds_V1.2_Schematic.pdf を見て、sdram.cst と見比べると、回路図通りにピン・アサインされているようだ。
Tang_Primer_25K_232_240303.png

sdram.sdc を見ると、50 MHz クロックと 133.333 MHz が定義されていて、False Path も設定されているようだ。
Tang_Primer_25K_233_240303.png

Select Device ダイアログで FPGA の種類を GW5A-LV25MG121NC/10 に設定した。
Tang_Primer_25K_234_240303.png

GOWIN FPGA Designer に GW5A-LV25MG121NC/10 が設定された。
Tang_Primer_25K_235_240303.png

Run Synthesis ボタンをクリックして、論理合成を行った。
エラーが発生した。
Syntax error のようだった。
Tang_Primer_25K_236_240303.png

もしかして、Systemverilog が有効になっていないんじゃないか?
GOWIN FPGA Designer の Project メニューから Configuration を選択した。
Configuration ダイアログが表示された。
Synthesize -> General をクリックした。
Verilog Language を System Verilog 2012 に変更した。
OK ボタンをクリックした。
Tang_Primer_25K_237_240303.png

もう一度、Run Synthesis ボタンをクリックして、論理合成を行ったところ、成功した。
Tang_Primer_25K_238_240303.png

論理合成のログを示す。

GowinSynthesis start
Running parser ...
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/gowin_pll/PLL.v'
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_tasks.svh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":116)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":116)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/top.sv'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/print.svh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/top.sv":24)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/top.sv'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/top.sv":24)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/uart_tx_V2.v'
Compiling module 'top'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/top.sv":1)
Extracting RAM for identifier 'print_seq'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/print.svh":6)
Compiling module 'uart_tx_V2(clk_freq=133333000)'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/uart_tx_V2.v":1)
WARN  (EX3791) : Expression size 14 truncated to fit in target size 13("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/uart_tx_V2.v":49)
Compiling module 'PLL100'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/gowin_pll/PLL.v":10)
Compiling module 'SDRAM_CTRL'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":5)
Extracting RAM for identifier 'opened_row_adr'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":120)
Extracting RAM for identifier 'wr_buf'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":206)
Extracting RAM for identifier 'rd_buf'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":213)
Extracting RAM for identifier 'cmd_buf'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":225)
WARN  (EX3791) : Expression size 32 truncated to fit in target size 10("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":310)
WARN  (EX3791) : Expression size 32 truncated to fit in target size 10("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/src/sdram_ctrl.sv":340)
NOTE  (EX0101) : Current top module is "top"
[5%] Running netlist conversion ...
Running device independent optimization ...
[10%] Optimizing Phase 0 completed
[15%] Optimizing Phase 1 completed
[25%] Optimizing Phase 2 completed
Running inference ...
[30%] Inferring Phase 0 completed
[40%] Inferring Phase 1 completed
[50%] Inferring Phase 2 completed
[55%] Inferring Phase 3 completed
Running technical mapping ...
[60%] Tech-Mapping Phase 0 completed
[65%] Tech-Mapping Phase 1 completed
[75%] Tech-Mapping Phase 2 completed
[80%] Tech-Mapping Phase 3 completed
[90%] Tech-Mapping Phase 4 completed
[95%] Generate netlist file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/gwsynthesis/sdram.vg" completed
[100%] Generate report file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/LicheeTang25k_SDRAM/sdram/impl/gwsynthesis/sdram_syn.rpt.html" completed
GowinSynthesis finish

  1. 2024年03月03日 17:50 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0
»