工程原始碼 Altera DDR2控制器

2021-10-03 05:39:36 字數 2911 閱讀 2586

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位址、列位址的組合,。

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位址、列位址的組合,。

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個長度。

原始碼 otter工程結構

最近在搞資料同步相關的內容,需要對otter的 進行擴充套件,所以需要先熟悉一下otter的原始碼。首先我們整體來看下otter的工程結構。otter的工程結構比較複雜,需要花費一定的時間來理解各個部分的內容,僅僅通過官方文件無法準確的理解各個模組的內容,現分析如下 otter整體的工程結構如下 o...

Eureka原始碼系列 2 原始碼啟動入口

本文介紹如何搭建eureka原始碼的debug環境,網上有一些部落格抄來抄去,抄錯了都不知道。eureka server模組下有乙個測試類 eureka server src test j a com netflix eureka resources eurekaclientserverrestin...

iptables原始碼分析(2)

1.1 表的查詢 再回到iptc init 函式上來,它根據表名,從核心獲取對應的表的相關資訊,handle是乙個iptc handle t型別的指標,在libiptc.c中,有如下定義 transparent handle type.typedef struct iptc handle iptc ...