花了一個禮拜研究怎麼使用 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 要打開
要不然控制器其會找不到腳位可以接
最下面那個設定不太清楚是什麼意思,不過調 2*31bit 就對了
2.3 PCIe 控制器設定用元件
- Altera PCIe Reconfig Driver
- Transceiver Reconfiguration Controller
根據文件或是 Qsys 視窗顯示的訊息
我們要把 interface number 設定到正確的值
(真的有寫說要 10 個,慢慢找 XD)
另外,對於不是 Stratix V 的 IP,好像不需要這兩個
另外,對於不是 Stratix V 的 IP,好像不需要這兩個
果然懶的打了,剩下的下次吧
下面還有這些
順便測試一下新的 css
順便測試一下新的 css
Hello
world
沒有留言:
張貼留言