基于MIG控制器的DDR3读写控制详解
基于MIG控制器的DDR3讀寫控制詳解
目的:詳細(xì)介紹FPGA中基于MIG IP核控制的DDR3詳細(xì)控制及內(nèi)部邏輯
平臺:AX7350-Xilinx
軟件:Vivado 2017.4
1.MIG IP 核介紹
1.1 IP核架構(gòu)
由下圖我們可以看到MIG這個(gè)IP核的架構(gòu)如下,直觀可以看出,MIG主要有面向用戶端口和面向DDR端口,用戶通過使用MIG能夠通過用戶端口的信號,來完成對DDR SDRAM的訪問,達(dá)到簡化操作的目的。
1.2 IP核用戶端控制命令
首先我們需要了解與用戶命令相關(guān)的信號,并且了解命令能夠被正確接收的時(shí)序。在下面的接口列表中信號的I/O方向均是相對MIG IP核而言的。
1.3 仲裁模塊
本模塊的目的是為了來避免讀寫沖突的,在ddr進(jìn)行寫操作的同時(shí),也有可能有讀操作需要處理,這時(shí)候就會發(fā)生讀寫沖突,為了避免讀寫操作同時(shí)發(fā)生創(chuàng)建一個(gè)仲裁模塊,模塊的結(jié)構(gòu)和信號列表如下:
這里簡單介紹以下本模塊的工作方式,本模塊的狀態(tài)跳轉(zhuǎn)入下圖所示,在仲裁狀態(tài)ARBIT下若接收到讀請求,則進(jìn)入讀狀態(tài),若接收到寫請求,則進(jìn)入寫狀態(tài)。若讀寫請求同時(shí)出現(xiàn)則優(yōu)先響應(yīng)寫請求進(jìn)入寫狀態(tài),當(dāng)在讀寫狀態(tài)中接收到讀寫結(jié)束信號wr_done或者rd_done時(shí),狀態(tài)將回到仲裁狀態(tài)。
1.4 時(shí)鐘帶寬
在使用MIG IP控制DDR3讀寫數(shù)據(jù)的時(shí)候總會遇到關(guān)于MIG控制器的時(shí)鐘問題,幾個(gè)時(shí)鐘總是搞得人暈頭轉(zhuǎn)向,為了進(jìn)一步說明清楚其之間的相互關(guān)系,繪制了上圖所示的時(shí)鐘模塊圖(其中各時(shí)鐘具體參數(shù)是根據(jù)黑金AX7350(XILINX 7035)系列FPGA開發(fā)板配置,不同的硬件平臺其具體參數(shù)不同,但是時(shí)鐘結(jié)構(gòu)類似)。
如上圖所示,MIG控制器一共可以分為三個(gè)部分:第一個(gè)是USER模塊,在這里可以理解為top模塊;第二個(gè)是MIG控制器,由于DDR3控制過程過去繁瑣,xilinx提供了一個(gè)可以讀寫DDR3的核,這個(gè)核也就是MIG控制器;第三個(gè)模塊也就是DDR3物理存儲芯片。
首先DDR3作為物理存儲介質(zhì),一定是需要時(shí)鐘的,所以MIG給了DDR3一個(gè)時(shí)鐘,也就是圖中的clk_ddr3。那么MIG也不可能平白無故的能產(chǎn)生時(shí)鐘,所以它也需要一個(gè)外部輸入時(shí)鐘,也就是圖中的clk_input,是由用戶端輸送給MIG控制器內(nèi)部的時(shí)鐘分頻模塊。MIG內(nèi)部的時(shí)鐘模塊將輸入的時(shí)鐘分成兩路輸出,一路clk_ddr3接到物理DDR3芯片中,另一路clk_user輸送到user模塊中的DDR_CTRL中。一般情況下,clk_ddr3:clk_user=4:1,如圖中所示,clk_ddr3取值為800M,那么clk_user的值為200M。
關(guān)于DDR3的帶寬計(jì)算
如上圖時(shí)鐘模塊可知,clk_ddr3=800M,DDR3的物理接口為32bit,按照4:1的比例計(jì)算的話,用戶端的接口寬度2432=256bit,其中2指的是時(shí)鐘上下沿雙沿讀取數(shù)據(jù),4指的是4:1的比例。
所以:
DDR3帶寬=1600M*32bit
仿真
每次涉及到仿真官方提供的IP時(shí),都要詬病一下Altera做的多難用,Xilinx做的多人性化。Xilinx針對IP的仿真,只需要在生成IP后,點(diǎn)擊個(gè)Open Example Design即可,而腦殘的Altera非要給你整得特別復(fù)雜,非得你運(yùn)行個(gè)tcl腳本(這還算簡單的呢),才能啟動仿真,不能和Xilinx學(xué)學(xué)嗎?
對于ZYNQ 7035的MIG IP核,啟動仿真后,初始化完成大約在55us左右,要耐心等待啊,初始化完成是第一步,初始化完成了,才能有后續(xù),不然的話,老老實(shí)實(shí)先讓初始化拉高再說吧。
總結(jié)
以上是生活随笔為你收集整理的基于MIG控制器的DDR3读写控制详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivado开发编译流程
- 下一篇: verilog中wire和reg的区别,