第三章 系統架構
3.3 系統整合與設計
3.3.2 使用 C 語言整合應用
使用Qsys 工具建立完 NoC 平台元件後,接下來要處理以 C 語言控制 Nios 部分,首先,必須使用Nios II 建立一個 Simple Socket Server (RGMII)的
Template,能夠接收 MATLAB 的棘波序列與將計算完後的權重向量傳回去,那 如何將所接收到的訓練向量從MAC Controller 放入至 On-Chip RAM 中呢?在 altera_avalon_tse.c 檔的 tse_mac_sTxWrite 函式中設定其相關參數,當 MAC Controller 接收到網路所傳送的資料後,透過下圖 3.29, 了解到了 MAC
Controller 在進行資料傳送前會設定初始傳送之參數 tse_mac_base、sgdma_txdev 與sgdma_rx_dev,即初始化設定了 TSE MAC Controller 的起始位址,以及 Transmit 與 Receive 的 SG-DMA 的起始位址。而其起始位址的資訊都是由 system.h 檔取得。經由初始後即可與如圖 3.30、圖 3.31 中使用
alt_avalon_sgdma_do_async_transfer 函式來進行資料傳送。
圖3.29 設定初始傳送之參數 tse_mac_base、sgdma_txdev、sgdma_rx_dev
圖3.30 alt_avalon_sgdma_do_async_transfer 函式來進行資料接收與傳送
38
圖3.31 alt_avalon_sgdma_do_async_transfer 函式來進行資料接收與傳送
由simple_socket_server.h 中可設定其硬體 FPGA 之 IP 位址、預設閘道、
遮照、與PORT 之參數,以利與 MATLAB 端建立連線。由下圖 3.32 將可清楚的 知道其設定之參數。 在這設定 IP 位址,其參數為 IPADDR0=140、
IPADDR1=122、IPADDR2=184、IPADDR3=1,設定閘道參數 GWADDR0=140、
GWADDR1=122、GWADDR=184、GWADDR=254,設定遮罩參數
MSKADDR0=255、 MSKADDR1= 255、MSKADDR2=255、MSKADDR3=0,最 後設定其連接埠參數SSS_PORT=30,將可完成 IP 相關參數之設定。
圖3.32 IP Address 相關參數之設定
設定完後,即能在Socket 專案中使用 recv()與 send()函式接收與傳送資料,
而使用send()函數來向 TCP 連接的另一端發送數據,總共有四個參數要設定,
40 Data arrived?
Server send()
recv() Client
MATLAB Nios II
Socket Server
而整個Socket 流程建立後,必須做的事情有以下幾件,將所接收的資料放 入On-Chip RAM 中,使用 DMA Controller 以遞增位址將訓練向量傳送客製化邏
輯電路GHA 的單一位址中進行運算。最後將其所訓練出的兩個權重向量傳回至
MATLAB 中,待全部傳完後將關閉 Socket 連線,而建立連線後整個設計的運作 流程可以參考如下圖3.35。
圖 3.35 建立連線後此設計的運作流程圖
接下來該討論如何設定將所接收的訓練向量放入On-Chip RAM 中,在 Socket Server 這邊設定紀錄傳送和接收資料的位址,可以參考下圖 3.36,將紀錄
接收位址的變數rx_rd_pos、與紀錄傳送位址的變數 rx_wr_pos 分別指向到 rx_buffer,即是使用系統所提供的記憶體。
將所接收的訓練向量放入On-Chip RAM 中
使用DMA Controller 將訓練向量傳至電路 GHA 中
將訓練完後的權重向量傳回給MATLAB
關閉Socket 連線
42
圖3.36 設定紀錄傳送和接收資料的位址
再來尋找系統所提供On-Chip RAM 的起始位址,打開
CycloneIV_Socket_bsp 專案資料夾,在 system.h 檔裡定義了許多參數。
圖3.37 在 bsp 相關資料夾內尋找 system.h 參數檔
這邊尋找On-Chip RAM 參數設定,可以得知在這定義了 ONCHIP_RAM_BASE 起始垃址為 0x0。
圖3.38 取得定義的 ONCHIP_RAM_BASE 起始位址
因此把紀錄接收位址的變數rx_rd_pos、與紀錄傳送位址的變數 rx_wr_pos 分別指向到ONCHIP_RAM_BASE,再透過 recv 函數將接收的資料存放在
rx_wr_pos 中,即存放在 On-Chip RAM 中。
圖3.39 使用 recv 函數將接收的資料存放在 rx_wr_pos 中 設定指向到On-Chip RAM 的起始位址
設定將接收的資料存放在rx_wr_pos 中
44
而當網路所接收的訓練向量透過SG-DMA Controller 放入置 On-Chip RAM 後,接下來將討論如何再將On-Chip RAM 中的訓練向量傳送至 GHA 客製化電 路中進行運算,在這使用DMA Controller,而以下圖 3.40 為 C 語言所使用函式 之實例。得知所要使用的DMA Controller 名稱為 dma_0,因此使用在 dev 目錄下 的dma_0 來開啟 DMA,並測試其是否已準備好,若未準備好則印出錯誤訊息;
若已準備好,則將On-Chip RAM 中的資料透過專用通道傳送至 GHA 電路中,
並且等待DMA Controller 回傳資料傳送完畢之訊號。
圖3.40 設定 DMA Controller 目標位址為 GHA 電路位址
圖3.41 透過 Qsys 工具所新增的 DMA Controller
DMA Controller 若未準備好 則印出錯誤訊息
在這設定其電路目標垃址