• 沒有找到結果。

第三章 系統架構

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 若未準備好 則印出錯誤訊息

在這設定其電路目標垃址

相關文件