硬件平臺:ZC706開發(fā)板
軟件工具:XPS & SDK 14.4
MIG(Memory Interface Generator)的基本配置:
AXI接口: 200MHz, 32bit
Memory接口: 800MHz, 64bit
Step 1: 創(chuàng)建工程
啟動XPS 14.4,。用器件XC7Z045(FFG900, -2)創(chuàng)建一個新的工程。創(chuàng)建工程時不要選擇‘AXI Reset Module’。
Step 2: 配置Zynq
按照labfiles里面的Zynq-PS-DDR-Configuration.png配置PS DDR3的參數(shù),。
將CPU的頻率設(shè)置為733MHz
取消‘Enable Programmable Clock and reset to PL’
取消‘Enable PL Interrupts to PS and vice versa’
取消所有外設(shè),,僅僅保留UART,。UART1使用MIO 48..49
Step 3: 配置Clock Generator
CLKIN:Frequency=200000000
CLKOUT0:Frequency=800000000, Phase=337.5, Group=PLLE0, Buffered=FALSE
CLKOUT1:Frequency=800000000, Phase=0, Group=PLLE0, Buffered=FALSE
CLKOUT2:Frequency=50000000, Phase=10, Group=PLLE0, Buffered=FALSE
CLKOUT3:Frequency=200000000, Phase=0, Group=PLLE0, Buffered=TRUE
CLKOUT4:Frequency=200000000, Phase=0, Group=PLLE0, Buffered=TRUE
注意: CLKOUT2是為axi_7series_ddrx_0::sync_pulse提供時鐘的,,必須是CL
Step 4: 配置MIG
從IP Catalog 里面添加 ‘AXI 7 Series Memory Controller(DDR2/DDr3)’ 到當前設(shè)計
配置PHY to Controller Clock Ratio為4:1
配置Memory Type=SODIMMS; Memory Part=MT8JTF12864HZ-1G6
更改AR/AW/B/R/W 寄存器的狀態(tài)為‘AUTOMATIC’
確認RTT為RZQ/4
選中‘DCI Cascading’
從labfiles\zc706_ddr3_sodimm_pinout.ucf中導入DDR3的管腳配置
將axi_7series_ddrx_0的內(nèi)存大小修改為1GB
在所有axi_7series_ddrx_0:: (IO_IF)memory_0端口(除了parity)上單擊右鍵,,選擇Make external,。
Step 5: 建立IP之間的連接
axi_7series_ddrx_0::clk_ref <-> clock_generator_0::CLKOUT3
axi_7series_ddrx_0::mem_refclk <-> clock_generator_0::CLKOUT1
axi_7series_ddrx_0::freq_refclk <-> clock_generator_0::CLKOUT0
axi_7series_ddrx_0:: pll_lock <-> clock_generator_0::LOCKED
axi_7series_ddrx_0::sync_pulse <-> clock_generator_0::CLKOUT2
axi_7series_ddrx_0:: S_AXI::clk <-> clock_generator_0::CLKOUT4
processing_system7_0::M_AXI_GP0::M_AXI_GP0_ACLK <-> clock_generator_0::CLKOUT4
axi_interconnect_1::INTERCONNECT_ACLK <-> clock_generator_0::CLKOUT4
axi_interconnect_1::INTERCONNECT_aresetn <-> clock_generator_0::LOCKED (Done in column Net)
在‘clock_generator_0::RST ‘上單擊右鍵,選擇Make external。將External Port下面的‘clock_generator_0_RST_pin’名字更改為 ‘RESET’類匹配相應的ucf約束
Step 6:GUI之外的更改
關(guān)閉當前工程,。
用文本編輯器打開system.mhs,,找到CLKOUT2并添加DUTY_CYCLE
PARAMETER C_CLKOUT2_FREQ = 31250000
PARAMETER C_CLKOUT2_PHASE = 10
PARAMETER C_CLKOUT2_DUTY_CYCLE = 0.0625
PARAMETER C_CLKOUT2_GROUP = PLLE0
PARAMETER C_CLKOUT2_BUF = FALSE
用labfiles\ system.ucf替換‘data’目錄下的同名文件
Step 7:生成BitStream
重新打開工程,電機Generate BitStream生成.bit文件,,然后Export Design to SDK,。
在SDK里面,可以用模板“Memory Tests”創(chuàng)建一個工程,,測試確認MIG工作正常,。
Zynq PL側(cè)的DDR PHY的最高速率為1866Mbps。如果配置MIG的’PHY to Controller Clock Ratio’為4:1,,MIG的AXI端口的最高工作頻率只能到233.33MHz,。如果PL里面的IP對
以下面的MIG配置為例:
AXI接口: 250MHz, 32bit
Memory接口: 500MHz, 64bit
在上面的基礎(chǔ)上,,要做以下修改:
Step 3: 配置Clock Generator:
CLKIN:Frequency=200000000
CLKOUT0:Frequency=500000000, Phase=337.5, Group=PLLE0, Buffered=FALSE
CLKOUT1:Frequency=500000000, Phase=0, Group=PLLE0, Buffered=FALSE
CLKOUT2:Frequency=31250000, Phase=10, Group=PLLE0, Buffered=FALSE
CLKOUT3:Frequency=200000000, Phase=0, Group=PLLE0, Buffered=TRUE
CLKOUT4:Frequency=250000000, Phase=0, Group=PLLE0, Buffered=TRUE
Step 4: 配置MIG
配置PHY to Controller Clock Ratio為2:1
在Ports Tab頁面單擊右鍵,,使能Net列的顯示。將axi_7series_ddrx_0:: (IO_IF)memory_0下所有的net的名字刪除掉前綴‘axi_7series_ddrx_0_
在新的配置下,,CPU通過MIG訪問擴展DDR3內(nèi)存的吞吐量會得到一定的提升,。通過分析Timing Analyzer發(fā)現(xiàn),MIG的工作頻率在250MHz的基礎(chǔ)上還有小幅的提升空間,。