Altera DDR2控制器學習筆記


Altera DDR2控制器使用IP的方式實現,一般很少自己寫控制器代碼。

  ddr22 ddr22_inst
    (
      .aux_full_rate_clk (mem_aux_full_rate_clk),
      .aux_half_rate_clk (mem_aux_half_rate_clk),
      .global_reset_n (global_reset_n),
      .local_address (mem_local_addr),
      .local_be (mem_local_be),
      .local_burstbegin (local_burstbegin_sig),
      .local_init_done (),
      .local_rdata (mem_local_rdata),
      .local_rdata_valid (mem_local_rdata_valid),
      .local_read_req (mem_local_read_req),
      .local_ready (mem_local_ready),
      .local_refresh_ack (),
      .local_size (mem_local_size),
      .local_wdata (mem_local_wdata),
      .local_write_req (mem_local_write_req),
      .mem_addr (mem_addr[12 : 0]),
      .mem_ba (mem_ba),
      .mem_cas_n (mem_cas_n),
      .mem_cke (mem_cke),
      .mem_clk (mem_clk),
      .mem_clk_n (mem_clk_n),
      .mem_cs_n (cs_n),
      .mem_dm (mem_dm[1 : 0]),
      .mem_dq (mem_dq),
      .mem_dqs (mem_dqs[1 : 0]),
      .mem_odt (mem_odt),
      .mem_ras_n (mem_ras_n),
      .mem_we_n (mem_we_n),
      .phy_clk (phy_clk),
      .pll_ref_clk (clock_source),
      .reset_phy_clk_n (reset_phy_clk_n),
      .reset_request_n (),
      .soft_reset_n (tie_high)
    );

  以mem開頭的一堆信號,是直接導出為頂層引腳,去連接PCB板上的DDR2芯片的。

以local開頭的一堆信號,是ddr2控制器導出給用戶的接口信號,用戶要向ddr2存儲器中寫入數據或者從ddr2中讀出數據,只需要操作local接口即可。

local信號,可以分為以下幾組:


 

控制組

local_init_done:DDR2控制器初始化完成標志信號,DDR2控制器上電需要經過一系列的初始化操作,包括DDR2芯片的初始化和DDR接口的時序校准,整個過程耗時較長。待該信號拉高之后,local接口上才能進行讀寫操作。

local_refresh_ack:ddr2控制器對ddr2芯片執行刷新操作后的應答信號,一般用戶讀寫時,不用關心該信號。


 

用戶寫接口

local_address :用戶希望將數據寫入到的DDR2存儲器的地址,該地址為DDR2芯片片選、行地址、bank地址、列地址的組合,{CS、ROW、BA、COL}。
local_be:寫入時候的字節使能,例如對於DDR2是16位硬件接口,則用戶數據接口為32位,為4個字節,所以local_be的位寬為4,每一位對應一個字節,如果寫入時候用戶端32位的數據中有一個字節不希望被寫入,則對應的be位設置為0即可。

local_size:用戶接口的突發長度,指定每次用戶發起一次寫入請求會寫入多個數據。該長度最大值在DDR IP的配置界面可以配置,如下圖所示。注意該值是控制器的最大突發長度設定值,不等於DDR2芯片支持的最大突發長度,DDR2芯片最大只支持8個長度。
local_burstbegin:用戶接口的突發啟動信號,該信號每一個高脈沖會啟動一次突發傳輸,每次傳輸長度為local_size指定的長度
local_ready:ddr控制器就緒標志信號,該信號有效則表明當前數據被成功寫入了ddr2控制器中,為0則表示ddr控制器無法接受當前操作,用戶需要保持當前地址、數據和控制信號不變直到ready信號再次拉高
local_wdata:用戶需要寫如到ddr中的數據,位寬為ddr芯片數據線位寬的2倍
local_write_req::寫數據請求信號為1則local_wdata端口上的數據允許被寫入ddr控制器,(具體能否成功寫入,還得看local_ready的狀態)


local_address:用戶希望從DDR2存儲器讀取數據的地址,該地址為DDR2芯片片選、行地址、bank地址、列地址的組合,{CS、ROW、BA、COL}。
local_be:讀出時候的字節使能,例如對於DDR2是16位硬件接口,則用戶數據接口為32位,為4個字節,所以local_be的位寬為4,每一位對應一個字節,如果讀出時候用戶端32位的數據中有一個字節不希望被讀出,則對應的be位設置為0即可。
local_burstbegin:用戶接口的突發啟動信號,該信號每一個高脈沖會啟動一次突發傳輸,每次傳輸長度為local_size指定的長度
local_rdata:讀取到的數據內容,位寬為ddr芯片數據線位寬的2倍
local_rdata_valid:讀取數據有效標志信號,當該信號有效時,表明local_rdata上的數據是讀到的有效內容
local_read_req:讀請求信號
local_size:用戶接口的突發長度,指定每次用戶發起一次讀取請求會讀出多少個數據。該長度最大值在DDR IP的配置界面可以配置,如下圖所示。注意該值是控制器的最大突發長度設定值,不等於DDR2芯片支持的最大突發長度,DDR2芯片最大只支持8個長度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM