Quartus Qsys + Nios II + SDRAM 進階使用

環境設置

OS: Windows 10

Software: Intel Quartus Prime Lite 18.0

Platform: Cyclone V GT 5CGTFD9E5F35C7

基本上跟 Quartus Qsys + Nios II 入門使用 的步驟一樣

只有 Platform Designer 部分需要更改


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


新增 DDR3 SDRAM Controller with UniPhy IP


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


PHY Setting 頁面設定


Speed Grade: 7 (配合板子)

Memory clock frequency: 400 MHz

PLL reference clock frequency: 100 MHz

Memory Preset: MT41J64M16LA-15E


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


Memory Parameter 頁面設定


Total Interface Width: 8

Memory Initialization Option > Memory CAS latency setting: 8

Output drive strength setting: RZQ/4

ODT Rtt nominal value: RZQ/4

Memory Write CAS latency setting: 6

Dynamic ODT(RTT/WR) value: RZQ/4


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


Memory Timing 和 Board Setting 保持不動 


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


Controller Setting 頁面設定


打勾 Generate power-of-2 data bus widths for Qsys or SOPC Builder

Maximum Avalon-MM burst lenght: 16

取消打勾 Enable Avalon-MM byte-enable signals

Local-to-Memory Address Mapping: CHIP-ROW-BANK-COL

Command Queue Look-Ahead Depth: 4

(手冊範例是給6,但會出現 warning,所以改成4)

打勾 Enable Configuration and Status Register Interface


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


Diagnostics 頁面設定保持不動


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


點 Finish 完成設定,重新命名該 ip 為 uniphy_ddr3


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


新增 On-Chip Memory (RAM or ROM) Intel FPGA IP


這裡總共需要新增兩個


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


第一個

Slave S1 data width: 32

Total Memory Size: 65536


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


第二個

Slave S1 data width: 32

Total Memory Size: 4096

點 Finish 完成設定
然後重新命名為 dma_read_memory


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

點擊 System > Assign Base Address 

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


新增 NIOS II Processor IP


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


Main 頁面設定


Nios II Core 選擇 Nios II/e 

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


Vector 頁面設定

Reset Vector > Reset vector offset 改成 20
Exception Vector > Exception vector offset 改成 40

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

點 Finish 完成設定
重新命名為 cpu

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


新增 JTAG UART IP


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


Write FIFO > Buffer depth (bytes): 64

Write FIFO > IRQ threshold: 8

Read FIFO > Buffer depth (bytes): 64

Read FIFO > IRQ threshold: 8

打勾 Prepare Interactive windows > INTERACTIVE_INPUT_OUTPUT

點 Finish 完成設定

重新命名為 jtag_uart


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


新增 PIO (Parallel I/O) Intel FPGA IP


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


Width: 8

Direction: Output

點 Finish 完成設定

重新命名為 LED_pio


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


新增 DMA Controller IP


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


Advanced 頁面設定


取消打勾 byte, halfword, doubleword, quadword

點 Finish 完成設定

重新命名為 dma


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


IP 元件新增到目前為止算是完成

接著就要進行一些設定和連線


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


設定 Clock crossing adapter type


切換到 Interconnect Requirement 

Clock crossing adapter type: Auto


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


將 IP 連線


回到 System Content 頁面

照著連接

連接方式;在對應訊號線上點右鍵,游標移到第一個 Connection 上,即可展開所有可連線的列表,然後把該連起來的點下去,就會打勾並連起來了

bus 連接


*註: jtag_debug_module 對應到我的版本的名字是 debug_reset_request

*由於名字可能會隨著時間改變,所以如果找不到完全一樣的,記得其命名規則是 "元件.訊號線",所以先找到前面的元件是叫什麼名字,然後找到跟後面的訊號線最像的名字,或是上網找一下自己看到的訊號線名字是什麼名字,自行判斷應該是對應到範例上的哪條線


Reset 連接


基本上就是,clk 元件的 clk 要連接到 SDRAM Controller 所有的 Clock Input 的訊號上

除了 SDRAM Controller 元件的都是接 SDRAM Controller 的 afi_clk

和 clk 元件的 clk_rst 要連接到所有  Reset  的訊號上


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


Overlapping 錯誤解決


照理來說下方會出現很多 Error

如果是有關於 overlapping address

就在 System 目錄底下點 Assign Base Address


如果是有關於 overlapping IRQ

就在 System 目錄底下點 Assign Interrupt Numbers


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


Export 欄位命名


在對應訊號線的 Export 欄位點兩下

即會自動命名

以下訊號線須在 Export 欄位命名


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


Reset Vector Memory 和 Exception Vector Memory 設定


雙擊 Nios II Processor IP

打開 Nios II 的編輯頁面

切到 Vector 的頁面

Reset Vector Memory 和 Exception Vector Memory 都設為 on_chip_memory.s1


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


做好了,就點 Generate

確定沒有 Error


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


Nios II Software Build Tools for Eclipse


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


設定編譯參數後

一樣先跑 Hello World 程式 (記得要先用 Programmer 將程式燒到板子上)

確定沒問題後

在進行 DDR3 Memory 讀寫測試

主要會用到 IOWR() 和 IORD() 這兩個函式

(還有其他函式可以自行 Google)

(記得要 #include "io.h")

UNIPHY_DDR3_BASE 指的是 SDRAM 所對應到的起始記憶體位置

紅色部分請注意

這部份是跟前面再 Platform Designer 將 SDRAM Controller 重新命名後

一樣的名字

所以如果是取不同名字的

請自己在變換

還有 LED_PIO_BASE 指的就是 LED 的所對應到的起始位置

也是同樣的道理


hello_world.c


#include <stdio.h>

#include "system.h"

#include "io.h"


#include "sys/alt_dma.h"

#include "sys/alt_cache.h"

#include "altera_avalon_dma_regs.h"


int main()

{

  printf("Hello from Nios II!\n");


  unsigned int i = 5;

  unsigned int j = 0;


  //Write Value into DDR3

  IOWR(UNIPHY_DDR3_BASE,0,i);


  //Read Value out from DDR3

  j = IORD(UNIPHY_DDR3_BASE,0);


  //Write to LED

  IOWR(LED_PIO_BASE,0, j);


  return 0;


}


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


問題解決


Connected system ID hash not found

在 Eclipse 介面中要 Run as > Nios II Hardware 的時候

跑出了介面

並且顯示

Connected system ID hash not found

這個是因為這次實驗我們沒有像上次加入 System ID 確認的 IP

所以如果偷懶不想加的話

就把下圖的這兩個選項打勾就好

Apply 然後 run 就可以執行了



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


小筆記區

Regenerate the BSP: In Eclipse, right-click the BSP project, pick Nios II > Generate BSP (NOT from the top menu’s Nios II, there is no such option there!).

SOPC file is generated by Platform Designer.

Rebuild: Project > Clean… and clean all, with the rebuild option set.


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


參考資料

ALTMEMPHY Design Tutorials, External Memory Interface Handbook

helloworld:基於Qsys的第一個Nios II系統設計

(原創) 如何在DE2用軟體存取SDRAM? (IC Design) (DE2) (Nios II)

[求助] niosII中下载提示Connected system ID hash not found

Altera NIOS II jots

留言

這個網誌中的熱門文章

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

Quartus Qsys + Nios II 入門使用