日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Qsys的DDR2内存驱动

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Qsys的DDR2内存驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

基于Qsys的DDR2內存驅動

1、建立Qsys系統

1.1、時鐘

1.2、NIOS II

1.3、系統ID

1.4、片上RAM

1.5、JTAG調試器

1.6、DDR2控制器

1.7、連接

2.2、頂層代碼

2.3、引腳分配

2.4、NIOS程序編寫測試


基于Qsys的DDR2內存驅動

按照正常步驟建立Quartus工程,新建一個頂層的Verilog文件用于調用Qsys系統。

此處有一個疑問:板卡上的芯片型號為EP4CGX75CF23I7,但參考板卡給的例程,發現其選用的芯片型號為EP4CGX75CF23C8,所以此程序也使用C8型號的芯片。

1、建立Qsys系統

了解DDR的基本知識,參考的是小梅哥電子的AC6102開發板的視頻及PDF文檔教程。建立Qsys的系統參考的是小梅哥AC6102和黑金電子的AX530教程。

1.1、時鐘

設置輸入時鐘為100MHz。

1.2、NIOS II

選擇NIOS II/f類型的軟核,設置復位向量地址(程序代碼存放的位置)和異常向量地址(程序運行的地址),因為DDR2存儲器上電工作前需要對前幾個地址的進行反復的數據讀寫操作,用來協商一個最佳的數據傳輸速率,所有需要設置一段偏移地址,設置地址偏移的大小參考Intel官方的文檔,此處設置為0x100,同樣異常地址的偏移量為0x120。

經過實際測試,發現不額外設置那0x100的偏移量,系統照樣可以正常運行。

設置系統的Cache大小,可以使用默認大小,最下面的紅框應取消勾選,因為使用的DDR2的位寬為128bits(64bits+雙速率數據接口),所以需要“使處理器中的最高有效地址位繞過數據緩存”。

其余的部分均采用默認設置。

1.3、系統ID

此模塊是用來給當前的Qsys系統一個唯一的編號,因為有些SOPC系統中可能會出現多個NIOS II處理器的情況。此處隨意設置一個數值即可。

1.4、片上RAM

此處需要片上RAM,為了在系統建立初期驗證,排除系統中除去DDR2控制器之外的錯誤給系統造成影響。

1.5、JTAG調試器

直接采用默認設置即可

1.6、DDR2控制器

設置部分與第一章中的配置界面相同,按照同樣的參數設置。需要改變的是輸入時鐘為clk的100MHz。

應該注意復位信號的連接。

1.7、連接

參考下圖中的連接,重新分配基地址,分配中斷號。

2.2、頂層代碼

頂層代碼代碼,用于調用Qsys核

module DDR2_Systems (clk, rst_n, key_in,mem_odt, mem_clk, mem_clk_n,mem_cs_n, mem_cke, mem_addr,mem_ba, mem_ras_n, mem_cas_n,mem_we_n, mem_dq, mem_dqs,mem_dm,led );input clk; input rst_n; input key_in;output reg [3:0] led;output [1:0] mem_odt; inout [1:0] mem_clk; inout [1:0] mem_clk_n; output [1:0] mem_cs_n; output [1:0] mem_cke; output [13:0] mem_addr; output [1:0] mem_ba; output mem_ras_n; output mem_cas_n; output mem_we_n; inout [63:0] mem_dq; inout [7:0] mem_dqs; output [7:0] mem_dm;nios_ddr2 u0 (.clk_clk (clk), // clk.clk.ddr2_local_refresh_ack (), // ddr2.local_refresh_ack.ddr2_local_init_done (), // .local_init_done.ddr2_reset_phy_clk_n (), // .reset_phy_clk_n.mem_mem_odt (mem_odt), // mem.mem_odt.mem_mem_clk (mem_clk), // .mem_clk.mem_mem_clk_n (mem_clk_n), // .mem_clk_n.mem_mem_cs_n (mem_cs_n), // .mem_cs_n.mem_mem_cke (mem_cke), // .mem_cke.mem_mem_addr (mem_addr), // .mem_addr.mem_mem_ba (mem_ba), // .mem_ba.mem_mem_ras_n (mem_ras_n), // .mem_ras_n.mem_mem_cas_n (mem_cas_n), // .mem_cas_n.mem_mem_we_n (mem_we_n), // .mem_we_n.mem_mem_dq (mem_dq), // .mem_dq.mem_mem_dqs (mem_dqs), // .mem_dqs.mem_mem_dm (mem_dm), // .mem_dm.rst_n_reset_n (rst_n) // rst_n.reset_n );endmodule

2.3、引腳分配

此次使用的PCIE板卡上有兩個晶振,一個為100MHz,一個為25Mhz,注意引腳分配的時候注意不要分配錯。

在給DDR2信號分配引腳的時候,不僅要分配引腳的號,還要選擇引腳的電平標準,電流大小。還需要設置輸出信號的分組,否則會在編譯時出現錯誤。最好的方式是一次配置完成后export出一個tcl腳本文件,以后配置起來就方便很多了。

2.4、NIOS程序編寫測試

打開Eclipse的NIOS開發環境,選擇正確的sopcinfo文件,新建一個基于memtest_small模板的工程,直接編譯,無需更改任何代碼,然后下載運行。

此時程序已經成功運行起來了,按照提示的步驟進行測試。

可以看到測試均通過,說明DDR2已經成功得被驅動了。

總結

以上是生活随笔為你收集整理的基于Qsys的DDR2内存驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。