2015年4月27日 星期一

Terasic DE5-NET Altera Stratix V FPGA PCIe 使用(一)

因為某些需求
花了一個禮拜研究怎麼使用 DE5 FPGA
希望可以使用到上面的 DRAM 跟 PCIe 界面
雖然說實驗的平台是 DE5
不過應該對於 DE4, DE2 150i 等等有 PCIe 的 FPGA 都或多或少適用
標題裡面有個(一),因為我應該不會想一次打完

1. 前言


首先當然我們不可能自己寫 PCIe 的硬體
所以要使用 Altera 的 IP
在 FPGA 上面架設 Qsys 系統

driver 部份也用現成的 Altera Linux PCIe Driver

接下來的例子會把資料透過 PCIe 傳到 DE5 的 DDR3 DRAM 上面
而且現在的電腦系統裡面天生具有 DMA 的功能
只要透過 OS 內建的函數,在電腦裡宣告一塊記憶體
要寫入資料的時候
透過 PCIe 告訴 FPGA 裡面的 DMA 要把這個資料移動到 FPGA 內部這樣就行了
讀取的時候也類似
一般都是透過這個方式傳輸資料,因為速度差很多

2. Qsys

綜合上面的說明,可以想像我們大約需要這些元件
  • Clock,每個數位系統應都有吧...
  • DMA 數個
  • PCIe 控制器
  • PCIe 控制器設定用元件,很奇怪的東西,但是就是要
  • DRAM 控制器
其實都是很無聊的設定
大多數照著 spec 接一下就好了

2.1 Clock

開啟 Qsys 的時候 default 就會有一個了
沒意外的話 default 就是 50MHz 的 clock
應該是不用動,不過可以改名字

2.2 PCIe 控制器

因為我們用 DE5,所以用這個 module
Avalon-MM Stratix V Hard IP for PCI Express

首先上面這些設定都是跟速度有關的
我們這樣設定以產生 PCIe Gen2 x8 的接線

接著
BAR 就是電腦端會看到好幾個不同大小的 memory mapped IO
(如果成功 load driver 之後可以在 /proc/iomem 裡面看到)
只要從電腦把資料寫進 BAR 裡面
這個 IP 就會轉成 avalon bus 上面的 data request
下面的六個 ID 理論上都可以亂打
只要之後 driver 的設定有正確就行(實際上只有前面兩個要設定)
不過 vendor ID 是世界上有一個單位統一註冊的,不建議用 0x1172 以外的值

最後下面這樣設定
Enable hard IP Status Bus 要打開
要不然控制器其會找不到腳位可以接

之後 driver 中我們會看到我們設定 DMA buffer 是 4096KB
所以有 size of address page = 4096KB 這樣的設定
不過 number of address pages 為什麼不能選 1 啊
最下面那個設定不太清楚是什麼意思,不過調 2*31bit 就對了

2.3 PCIe 控制器設定用元件

  • Altera PCIe Reconfig Driver
  • Transceiver Reconfiguration Controller
不知道為什麼,總之我們需要這兩個元件
根據文件或是 Qsys 視窗顯示的訊息
我們要把 interface number 設定到正確的值
(真的有寫說要 10 個,慢慢找 XD)
另外,對於不是 Stratix V 的 IP,好像不需要這兩個


果然懶的打了,剩下的下次吧
下面還有這些

順便測試一下新的 css

Hello
    world

2.4 DRAM 控制器

2.5 DMA

3. Qsys 連接

4. 將 Qsys 系統放到 Quartus 上面

5. Kernel Driver

6. Use user space API

沒有留言:

張貼留言