Nios II - Platform Designer 建立 Custom Component

建立好一個 Nios II System 之後

我們就可以利用 Nios II Software Build Tool 在上面開發 C Program 了

不過建立 Custom Component 的好處就是可以讓某些運算改由硬體來做

藉此提升效能


基本上參考手冊都把流程講完了

(Nios II Custom Instruction User Guide)

所以這裡只整理一些重點

跟自己在實作過程中碰到的問題


然後手冊雖然很長

但真的要有耐心一步一步照著做!

尤其是在 Platform Designer 建立 Custom Component 的地方


=================================================


Hardware 部分


下表列出了幾種 Custom Instruction


Combinational => 該 Custom Component 為組合 (Combinational) 電路
Multicycle => 該 Custom Component 為時序 (Sequential) 電路
其中根據運算的 Cycle Count 是否固定,又可分為 fixed 或 variable
fixed 表示從 start 送出後,固定某個 Cycle 數後就算好結果並回傳 (因此 done 訊號為非必要)
variable 表示從 start 送出後,當 done 回傳為 1 時即可算好結果並回傳 (因此 done 訊號為必要)
Extended => 讓該 Custom Component 可以做多個 Operation
用 n 來決定對該 Custom Component 下什麼指令


=================================================

Software 部分

建立好硬體部分後
就可以開啟 Software Build Tool

首先在手冊裡頭有提到自訂指令的函式宣告
例如這是回傳型態為 float 的函式

不過我們不需要這麼辛苦去 call 這些 function
因為在 <system.h> 裡頭都幫我們定義好了


接下來要在 code 中加入 #include <system.h>
然後先按 Build Project
之後打開 <system.h> 查看自訂指令的 macro
大概會類似這樣


此時指需要在 code 裡面加入 ALT_CI_PE_GROUP_INSTRUCTION_0(指令 index, dataa 資料)
就可以使用該 Custom Component 進行運算了!


=================================================


實作注意 部分


1. Interface 要選 nios_custom_instruction_slave
2. Interface 只要留下 nios_custom_instruction_slave
3. clk 和 rst 訊號都是接到 nios_custom_instruction_slave 上的 clk 和 rst,而不是另外獨立的介面


4. n 的部分,手冊有寫到,在完成運算前, n port 的 data 會穩定輸出該值


5. 如果函式有牽扯到 float 型態的資料,請記得不是直接把 float 數值(例如 5.0)傳進去,而是要傳入 IEEE-754 的資料格式(例如 32'h40a00000)

=================================================


Reference:

留言

這個網誌中的熱門文章

Formal Verification(正規驗證)介紹和如何使用 SVA(System Verilog Assertion) 做驗證

Quartus Qsys + Nios II 入門使用

Algorithm - Sorting (Insertion Sort) 插入排序法