Chapter 2 FPGA 入門 Hello World 程式 - 點亮 LED

看到這個網頁似乎是蠻簡單的, 來試試 FPGA 的 Hello World 來點亮 LED - Get Started on FPGA Programming, 照著這個一步步來 (雖然我的板子跟他的不同, 改過去應該不會太難)

2.1 硬體準備

2.2 安裝 intel Altera IDE Quartus 於 Ubuntu 18.04:

  • 原先安裝在 Windows 10, 但是 USB Blaster driver 無法更新, 就放棄, 改裝在 VM 的 Ubuntu 18.04
  • intel Altera 的官網下載 Quartus Prime Lite 免費版
    • 其它版本 (Standard 及 Pro) 都需要付費. 也得先註冊取得帳號、密碼才能下載.
  • 完整版的檔案非常大, 因此我只單獨下載 3 個檔案
    • Quartus II Software (includes Nios II EDS)
    • ModelSim-Altera Edition (includes Starter Edition)
    • Devices: 一定要安裝至少一個 device family, 我安裝我使用的 Cyclone IV 板子
      • Arria II device support : Cyclone II, Cyclone III, Cyclone IV device support (includes all variations)
    • Intel® FPGA Software Installation and Licensing 文件
  • 下載後, 執行 ./QuartusLiteSetup-20.1.1.720-linux.run 來安裝
    • 安裝算簡單, 只是要注意 ModelSim 安裝的目錄 (default 是 ~/intelFPGA, 我改成 ~/intelFPGA_lite) 得和 Quartus 的安裝目錄是同一個 (~/intelFPGA_lite)
    • 同時也安裝了 device, Cyclone IV
  • 安裝完畢後, 執行檔位於 ./intelFPGA_lite/20.1/quartus/bin/quartus 下
$ # 執行 Quartus 程式
$ ./intelFPGA_lite/20.1/quartus/bin/quartus

2.2.1 安裝 Altera IDE Quartus 設定及遇到的問題

$ sudo apt install libcanberra-gtk-module libcanberra-gtk3-module
$
  • 執行 Processing - Start Compilation 後, 出現錯誤訊息 Altera Quartus Error (12007): Top-level design entity “……” is undefined:

  • 執行 Processing - Start Compilation 後, 出現錯誤訊息 Can’t launch ModelSim-altera simulation software: 得注意 2 點

    • 參考 intel 文章 “Can’t lunch ModelSim-altera simulation software”, 需要確定以下設定的目錄
      • Tools - Options - General - EDA Tool Options - ModelSim-Alt… : 我的設定是 /home/ubuntu/intelFPGA_lite/20.1/modelsim_ase/linuxaloem
    • 另外, 我一開始的設定 Assignment - Settings - EDA Tool Settings - EDA tools - Simulation - Run Tool Automatically - [x] Run gate-level simulation automatically after compilation 設成 enable, 把它 disable 後就可以
  • 關於 USB Blaster 的 driver 設定: 在安裝 Quartus 之後, ‘理論上’ USB Blaster 的驅動程式應該已經安裝完成, 而且, 進入 Tools - Programmer - Hardware Setup - Hardware Settings 也可以選得到 USB-Blaster (port 2-2.2), 但是, 在 Programmer - Start 後, Progress 會出現 failed, 安裝以下設定後才能順利運作, 也才發現, 在沒安裝前, Hardware Setup 下的 Hardware Frequency 是空的, 安裝後, 會顯示 6,000,000 Hz.

$ # 建立 /etc 下的檔案需要用 sudo
$ sudo vi /etc/udev/rules.d/51-usbblaster.rules     # 輸入以下內容

# USB Blaster
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6002", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6003", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"

2.3 安裝 device : 我們在安裝 Quartus 已經安裝過了, 如果需要重新安裝時, 選擇 Quartus menu Tools - Install devices…

2.4 建立新專案 : Quartus menu 選擇 File - New Project Wizard… 一步步執行

Page 1:
On “Directory, Name, Top-Level Entity [Page 1 of 5]”, fill in blanks as the following 
“What is the working directory for this project”
C:/Projects/Altera/MyProj 
(You have to create the folder before you can select the above folder)
“What is the name of this project”
MyProj
“What is the name of top-level design entity for this project?”
MyProj
Click on “Next”
Page 2:
On “Add Files [page 2 of 5]”
Click “Next” as we’ll add files later on
Page 3:
On “Family & Device Settings [Page 3 of 5]”
In “Family:” dropdown list, select “Cyclone II”
In “Available devices:” table, select “EP2C5T144C8”
Click “Next”
Page 4:
On “EDA Tool Settings [page 4 of 5]”
Click “Next”
Page 5:
On “Summary [page 5 of 5]”
Click “Finish”

2.5 建立新檔案 : Quartus menu 選擇 File - New… 後, 再選擇 Design Files - VHDL File 點選 OK 即可, 會出現 Vdhl1.vhd 這個檔案, 可以自行改名稱後儲存.

2.6 輸入 VHDL 檔案內容

-- MyProj "Hello, FPGA"
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MyProj is
 Port (PB   : in  STD_lOGIC;  -- pin 144
       LED0 : out STD_lOGIC;  -- pin 3
       LED1 : out STD_lOGIC;  -- pin 7
       LED2 : out STD_lOGIC); -- pin 9
end MyProj;
architecture Behavioral of MyProj is
begin
 LED0 <= PB;
end Behavioral;

2.7 VHDL 檔案內容建立完成後, 進入 Quartus menu 的 Processing - Start Compilation 來編譯程式, 編譯結果沒有 error, 但有不少 warning, 不妨礙.

2.8 確認腳位, Quartus menu 選取 Assignment - Pin Planner, 會出現類似下圖, 這次需要設定 Location, 我們這次用到 LED0 跟 PB (push button 按鍵的意思), 需要設定這 2 個 Node 的 location

  • 回去看 步驟 0 的 QMTech 線路圖,
    • 板子上的 LED0 是可以控制的, 接到 E4 腳位 (另一個 LED 是 power 的 LED 無法控制)
    • 板子上有 3 個按鍵, SW1 / SW2 分別接到 KEY0 的 pin W13, 及 KEY1 的 pin Y13, SW3 接到 nCONFIG (待確定是不是 reset 鍵). 我們接到 W13
    • 可以看到下圖的 Location, 我們分別設定 LED0 / PB 到 PIN_E4, PIN_W13

2.9 再編譯一次, Processing - Start Compilation

2.10 燒錄: Quartus menu 選擇 Tools - Programmer

9.1 選擇 Hardware Setup…, 確定 Available hardware items 有找到 USB-Blaster 後, 選取 Close
9.2 選擇 Add Device… 後, 選 Cyclone IV E 的 EP4CE15F23
9.3 選擇 Add File…” 後, 到 output_files 目錄下, 選取 QMTechCycloneIV_EP4CE15F23CBN.sof (或是你設定的名稱)
9.4 記得 下圖中的 Program/Configure 要打勾☑️
9.5 接著, 按下圖的 Start, 就可以將程式上傳到 QMtech 的開發板, 按開發板上的 SW1, 就可以控制 LED0 的亮或暗 - project 成功 !

2.11 Bonus 1 : 轉檔, 從 VHDL 檔案轉成 Verilog 格式, 程式下載點 http://doolittle.icarus.com/~larry/vhd2vl/

# 轉檔
$ tar — extract — file vhd2vl-2.5.tar.gz
$ ./vhd2vl MyProj.vhd > MyProj.v
# note that Verilog file’s extension is .v

2.12 Bonus 2 : 後來才發現 intel 有個 youtube - How to begin a simple FGPA design 比較完整 (也比較複雜了點, 其實省略一些還是可以動作), 我的文章只有文字, 可以配合這 youtube 會更清楚