干貨來(lái)了,用DDR搬磚,只需要會(huì)用IP就好,Xilinx官方Y(jié)YDS!
一、MIG IP核配置
工具 :VIVADO 2018.3
FPGA : XC7K325FFG900-2
DDR3 : MT41J256M16XX-125
配置時(shí)鐘部分,建議詳看第二篇《DDR各時(shí)鐘頻率分析》
(1)選中“MIG”進(jìn)入配置界面
(2)選擇Create Design來(lái)創(chuàng)建設(shè)計(jì)
①選擇Create Design來(lái)創(chuàng)建設(shè)計(jì)
②自定義名字
③選擇1個(gè)控制器就好
④是否使用AXI4接口,為了簡(jiǎn)化理解,不勾選
(3)是否選擇兼容其他器件(不需要,直接NEXT)
(4)存儲(chǔ)器選擇,還用說(shuō)嗎,DDR3走起
(5)重點(diǎn)來(lái)了,時(shí)鐘配置、DDR選型
①Clock Period,即DDR芯片物理側(cè)的IO時(shí)鐘頻率,稱之為核心頻率
②物理側(cè)到控制器時(shí)鐘的比例,可選4:1或2:1;決定了ui_clk的頻率;
如圖配置的話,ui_clk = 800M /4 =200Mhz
③選擇DDR3的類型,Components指的是DDR3的型號(hào)是元件類,筆記本那種的插條類是SODIMMs。
④選擇DDR3的型號(hào)
⑤數(shù)據(jù)位寬,由DDR型號(hào)決定,但是當(dāng)FPGA掛了多片DDR時(shí),位寬相應(yīng)增加;
(6)配置系統(tǒng)時(shí)鐘
系統(tǒng)時(shí)鐘輸入,建議200M,后面參考時(shí)鐘可以直接使用系統(tǒng)時(shí)鐘。
(7)參考時(shí)鐘、復(fù)位
①系統(tǒng)時(shí)鐘選擇NO BUFFER,因?yàn)橄到y(tǒng)時(shí)鐘為200M,所以參考時(shí)鐘直接使用系統(tǒng)時(shí)鐘就好。 參考時(shí)鐘必須是200Mhz!
②復(fù)位是高電平有效還是低電平有效,筆者第一次玩DDR,仿真的時(shí)候初始化一直不成功,就是復(fù)位信號(hào)搞反了 = =||
③是否使用XADC,會(huì)輸出器件的溫度,如果其他模塊要用XADC,那么這里就不使能。
(8)下一頁(yè),50歐電阻,根據(jù)硬件而定,不用管,直接NEXT
(9)新設(shè)計(jì) or 管腳已固定?
如果硬件已經(jīng)定了,那么就選下面管腳已固定,然后讀取約束文件,設(shè)置管腳就好。
①管腳讀取配置好了,點(diǎn)②確定再next進(jìn)入下一頁(yè)。
但是,我們這里只是為了講解DDR應(yīng)用,沒(méi)有硬件,選第一種新設(shè)計(jì)模式。
(10)后面依次NEXT就好了,最后生成。
(11)IP核生成完畢,打開(kāi)veo文件查看例化文件。
(12)所有不會(huì)使用的IP,我們都打開(kāi)Example Design來(lái)了解使用。
IP核配置完成,讀寫(xiě)測(cè)試下篇再講,下面重點(diǎn)講解各端口信號(hào)。
二、端口信號(hào)定義
對(duì)于mig與DDR3的讀寫(xiě)原理我們不需要了解太多,交給mig就可以了。我們需要做的是控制好用戶接口,寫(xiě)出正確的用戶邏輯,控制好讀寫(xiě)時(shí)序。想要寫(xiě)好User logic,我們就必須清楚每一個(gè)用戶控制接口的含義:
2.1全部端口的注釋詳解
2.2端口信號(hào)分類
2.2.1使用DDR只需要設(shè)計(jì)這幾個(gè)信號(hào)
app_cmd (你總要先確認(rèn)你想要寫(xiě)還是想要讀吧)
操作命令,其實(shí)你只需要用到3'b000(寫(xiě)入)和3'b001(讀出)
要和操作地址同時(shí)出現(xiàn)才有效。
2. app_addr (往哪兒寫(xiě),從哪兒讀?)
操作地址,按照結(jié)構(gòu)從高位到低位是 rank + bank + row + column
3. app_en (確認(rèn)地址線上的地址有效,不能初始值都一直有效吧)
操作地址app_addr的使能,只有它拉高的時(shí)候,對(duì)應(yīng)的app_addr才是有效的
4. app_wdf_data (要寫(xiě)的話,你得有料不是)
寫(xiě)入的數(shù)據(jù)接口
5. app_wdf_wren (那也不能什么料都往里倒不是)
寫(xiě)入的數(shù)據(jù)接口app_wdf_data的使能,
只有它拉高的時(shí)候,對(duì)應(yīng)的app_wdf_data才是有效的
6. app_wdf_end (要你作甚,一句app_wdf_end = app_wdf_wren 搞定)
理論上應(yīng)該有點(diǎn)用,但是實(shí)際你只要讓它跟app_wdf_wren一樣就行了
emm...大神這段解釋很傳神,我直接copy過(guò)來(lái)了
2.2.2 IP核的輸出信號(hào)
app_rdy (想要DDR幫你干活,也得讓人家準(zhǔn)備好了不是?)
app_rdy表示UI已經(jīng)準(zhǔn)備好接收命令了,意思就是說(shuō)必須要等app_rdy信號(hào)拉高了之后,app_en和app_cmd等才能開(kāi)工干活= =
而且,這個(gè)不受你控制。等著吧
2. app_wdf_rdy (想要往DDR寫(xiě)數(shù)據(jù)?不好意思,等我準(zhǔn)備好了再說(shuō))
app_wdy_rdy信號(hào)表示寫(xiě)數(shù)據(jù)FIFO已經(jīng)準(zhǔn)備好接收數(shù)據(jù)了,數(shù)據(jù)在app_wdf_rdy = 1’b1且 app_wdf_wren = 1’b1時(shí)被寫(xiě)入。
同理,這個(gè)rdy不也受你控制。等著吧
3. init_calib_complete(DDR讀寫(xiě)不對(duì)?先檢查初始化成功了沒(méi)好吧)
init_calib_complete拉高表明DDR已經(jīng)校準(zhǔn)成功初始化完成了!
拿去搬磚吧!
4. ui_clk(看好了,邏輯使用的時(shí)鐘擱這輸出呢)
在第二篇《DDR的時(shí)鐘分析》里我們也講過(guò),ui_clk就是邏輯使用的時(shí)鐘;由配置界面“Clock Period”與“4:1 / 2:1模式”確定的;如:核心頻率為400M;選擇了4:1模式,那么ui_clk = 400 / 4 =100 M;
記住,你的邏輯代碼工作在ui_clk這個(gè)時(shí)鐘域!
2.2.3 DDR讀數(shù)據(jù)信號(hào)歸類
再來(lái)對(duì)DDR的信號(hào)規(guī)個(gè)類吧,哎,這寫(xiě)的真是羅里吧嗦
app_rdy
app_en
app_cmd
app_addr
在app_rdy為高 且 app_en 為高時(shí),讓app_cmd = 3’b001,同時(shí)我們給出讀數(shù)據(jù)的地址app_addr,那么等段時(shí)間延遲后,我們就能讀出想要的數(shù)據(jù)了:(結(jié)合后文時(shí)序圖更容易理解)
app_rd_data
app_rd_data_valid
這就是我們讀出的數(shù)據(jù)了。
2.2.4 DDR寫(xiě)數(shù)據(jù)信號(hào)歸類
①前提條件
app_rdy
app_wdf_rdy
app_en
②地址和命令
app_cmd
app_addr
③寫(xiě)數(shù)據(jù)
app_wdf_wren
app_wdf_data
app_wdf_end
app_wdf_mask :一般不用,直接置0
想要寫(xiě)數(shù)據(jù)到DDR?必須在①前提條件全部為高時(shí),給出②地址和命令(app_cmd = 3’b000),然后給出③寫(xiě)數(shù)據(jù)的信號(hào),就成功寫(xiě)入數(shù)據(jù)到DDR了;
注意:①②時(shí)序嚴(yán)格對(duì)齊!③相對(duì)①②可以提前1拍,或最多延遲2拍,但是最好跟①②對(duì)齊,不容易出錯(cuò)。(結(jié)合后文時(shí)序圖更容易理解)
三、時(shí)序圖
玩接口嘛,大部分根據(jù)時(shí)序圖來(lái)就是了,挺簡(jiǎn)單的
3.1 UI控制時(shí)序圖
如圖所示:
必須要app_rdy拉高時(shí),你所給的(使能app_en、命令app_cmd、地址app_addr)才會(huì)被接受。
★app_rdy :前提條件,不管是讀還是寫(xiě),都必須在app_rdy為高的時(shí)候進(jìn)行操作。
3.2寫(xiě)操作時(shí)序圖
正如前文信號(hào)歸類所說(shuō):
寫(xiě)入DDR必須在前提條件(app_rdy & app_wdf_rdy)全部為高時(shí),給出地址和命令(app_cmd = 3’b000),然后給出寫(xiě)數(shù)據(jù)的信號(hào)(使能與數(shù)據(jù)),就成功寫(xiě)入數(shù)據(jù)到DDR了;
注意:地址和命令必須時(shí)序嚴(yán)格對(duì)齊!寫(xiě)數(shù)據(jù)信號(hào)相對(duì)來(lái)說(shuō)有三種情況:①嚴(yán)格對(duì)齊;②可以提前1拍;③最多延遲2拍;但是最好全部時(shí)序?qū)R,不容易出錯(cuò)。
3.3讀操作時(shí)序圖
讀操作就簡(jiǎn)單了,在前提條件app_rdy為高時(shí),給出命令(app_cmd = 3’b001)與地址(app_addr),等段時(shí)間延遲,數(shù)據(jù)就讀出來(lái)了,以valid信號(hào)表示數(shù)據(jù)有效。
下一篇我們就開(kāi)始用DDR來(lái)搬磚了,測(cè)試下讀寫(xiě),初步掌握使用~
四、參考資料
《UG586》 官方文檔不多說(shuō),YYDS!
《Xilinx平臺(tái)DDR3設(shè)計(jì)教程之仿真篇》 一系列文章,筆者就是看過(guò)后才初步熟悉了DDR3的使用,推薦給大家。
審核編輯:湯梓紅
-
DDR3
+關(guān)注
關(guān)注
2文章
274瀏覽量
42162 -
IP核
+關(guān)注
關(guān)注
4文章
326瀏覽量
49382
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論