<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Virtex7上DDR3的測試例程

FPGA技術江湖 ? 來源:FPGA技術江湖 ? 作者:FPGA技術江湖 ? 2022-08-16 10:28 ? 次閱讀

??這篇文章我們講一下Virtex7上DDR3的測試例程,Vivado也提供了一個DDR的example,但卻是純Verilog代碼,比較復雜,這里我們把DDR3的MIG的IP Core掛在Microblaze下,用很簡單的程序就可以進行DDR3的測試。

  1. 新建工程,FPGA選型為xc7v690tffg-1761。創建Block Design,命名為Microblaze_DDR3。

31ffb0b4-1cea-11ed-ba43-dac502259ad0.pngddr1
  1. 在bd文件中加入Mircoblaze。

3211f38c-1cea-11ed-ba43-dac502259ad0.pngddr2
  1. 點擊Run Block Automation

321b379e-1cea-11ed-ba43-dac502259ad0.pngddr3
  1. 按照默認配置,確定即可。

3228f974-1cea-11ed-ba43-dac502259ad0.pngddr4
  1. 出現下面的界面。

323a01ec-1cea-11ed-ba43-dac502259ad0.pngddr5
  1. 添加MIG的IP Core

32590344-1cea-11ed-ba43-dac502259ad0.pngddr6
  1. 開始配置DDR,選擇Create Design.

326c5a66-1cea-11ed-ba43-dac502259ad0.pngddr7
  1. 這一步是選擇Pin腳兼容的FPGA,我們不做選擇,直接Next。

3283ae82-1cea-11ed-ba43-dac502259ad0.pngddr8
  1. 選擇DDR3.

32933faa-1cea-11ed-ba43-dac502259ad0.pngddr9
  1. ①選擇DDR的工作頻率,我們這里讓DDR3的頻率為1600MHz,所以時鐘頻率是800MHz;
    ②選擇器件,根據實際情況來選擇即可;
    ③數據位寬,也是根據板卡上的實際位寬進行選擇;
    ④默認即可。

32a73d7a-1cea-11ed-ba43-dac502259ad0.pngddr10
  1. 選擇AXI總線的位寬,這里我們選擇512.

32c61ec0-1cea-11ed-ba43-dac502259ad0.pngddr11
  1. ①選擇輸入時鐘頻率,雖然DDR的工作時鐘是800MHz(在第10步中選擇),但我們可以輸入一個低頻時鐘,然后MIG的IP Core中會倍頻到所需頻率。
    ②MIG的IP Core默認會輸出一個200MHz的時鐘,如果還需要其他的時鐘輸出,可以在這里選擇。其他選擇默認即可。

32e3f6a2-1cea-11ed-ba43-dac502259ad0.pngddr12
  1. ①選擇輸入時鐘的方式,這里的輸入時鐘就是我們上一個頁面中的設置的200MHz的輸入時鐘,如果選擇差分或單端,則輸入通過FPGA的管腳輸入200MHz時鐘到MIG的IP Core;如果選擇No Buffer,則可以通過FPGA內部的MMCM輸出一個200MHz時鐘到MIG;這里我選擇了No Buffer;
    ②選擇參考時鐘的方式,參考時鐘頻率固定是200MHz,如果選擇如果選擇差分或單端,則輸入通過FPGA的管腳輸入200MHz時鐘到MIG的IP Core;如果選擇No Buffer,則可以通過FPGA內部的MMCM輸出一個200MHz時鐘到MIG;如果在前一個頁面中選擇了輸入時鐘頻率是200MHz,則這邊會出現一個Use System Clock的選項,因為此時兩個時鐘頻率是相同的嘛。這里我選擇了Use System Clock;
    ③設置輸入復位信號的極性,這個要特別注意,盡量選擇高有效,因為無論我們選擇高復位還是低復位,它的端口名都叫sys_rst,會讓人直觀就覺得是高復位。我第一次使用時,就沒注意到這個選項,默認為低,但在MIG的端口上看到sys_rst這個名字我以為是高有效,結果DDR一直不通。
    (備注:對于絕大多數的Xilinx的IP,如果是低有效的復位,端口名字中肯定是有N這個標志的)

3309eb50-1cea-11ed-ba43-dac502259ad0.pngddr13
  1. 這個頁面不需要操作。

333576f8-1cea-11ed-ba43-dac502259ad0.pngddr14
  1. 下面開始分配管腳,我比較習慣于選第二個,無論是第一次分配還是后面再重新分配。

  2. 在這一頁,可以根據原理圖一一分配管腳;如果有現成的xdc/ucf文件,可以直接通過Read XDC/UCF讀入,然后再選擇Validate驗證管腳分配是否正確。

3347fdd2-1cea-11ed-ba43-dac502259ad0.pngddr16

如果Validate成功,則會提示下面的界面。

3359c710-1cea-11ed-ba43-dac502259ad0.pngddr17
  1. 如果在第13步中,選擇了差分或單端輸入,則這里會出現下面第一個圖;如果選擇了No buffer,則這里會出現第二個圖。很容易理解,如果選擇了通過外部管腳輸入時鐘,那這里就是讓選擇具體的管腳。并不是所有的MRCC或者SRCC管腳都可以選的,只能選擇跟DDR管腳同一片區域的(比如DDR放在了Bank31 32 33,那么這里的時鐘輸入管腳就不能選擇Bank15)。

33712888-1cea-11ed-ba43-dac502259ad0.pngddr18

如果不選擇復位信號管腳,就可以通過FPGA內部邏輯來輸入復位。

33a43ca0-1cea-11ed-ba43-dac502259ad0.pngddr19

后面一路Next就完成了MIG IP Core的配置了。

  1. 在bd文件中,加入AXI Interconnect、UARTLite和Interrupt(如果不加中斷模塊,Microblaze的程序跑不起來),串口用來打印信息。然后再添加各輸入輸出端口,把內部的線連接起來,如下圖所示。

33b475e8-1cea-11ed-ba43-dac502259ad0.pngddr20

但這個圖里的線太多,看著不直觀,我們把Microblaze模塊、mdm_1、rst_clk_wiz和local_memory模塊(上圖中紅框中的4個模塊)放到一個子模塊中,取名mb_min_sys,如下圖。

33dd0512-1cea-11ed-ba43-dac502259ad0.pngddr21
  1. 創建頂層的top文件,并在top文件中例化bd文件??梢园裪nit_calib_complete和mmcm_locked這兩個信號抓出來,在下載程序后,這兩個信號必須都是高,不然DDR就工作不正常,肯定是中間某個環節配置有問題。具體top.v文件內容見附錄

  2. 將工程綜合、實現、生成bit文件,并導出Hardware。

340673fc-1cea-11ed-ba43-dac502259ad0.pngddr22
  1. 打開sdk,新建Application Project,并按下面的步驟依次操作。

34339b52-1cea-11ed-ba43-dac502259ad0.pngddr2334467718-1cea-11ed-ba43-dac502259ad0.pngddr24

再選擇模板為HelloWorld,最后Finish。

345ae6a8-1cea-11ed-ba43-dac502259ad0.pngddr25
  1. 修改helloworld.c,見附錄,重新編譯,如果提示overflowed則把lscript.ld文件中的size改大。

346bc662-1cea-11ed-ba43-dac502259ad0.pngddr26

運行程序后,可以看到串口打印信息如下:

347f117c-1cea-11ed-ba43-dac502259ad0.pngddr27

附錄

//top.v
`timescale1ns/1ps

moduletop
(
inputclk_n,
inputclk_p,
inputUART_rxd,
outputUART_txd,
output[15:0]ddr3_addr,
output[2:0]ddr3_ba,
outputddr3_cas_n,
output[0:0]ddr3_ck_n,
output[0:0]ddr3_ck_p,
output[0:0]ddr3_cke,
output[0:0]ddr3_cs_n,
output[7:0]ddr3_dm,
inout[63:0]ddr3_dq,
inout[7:0]ddr3_dqs_n,
inout[7:0]ddr3_dqs_p,
output[0:0]ddr3_odt,
outputddr3_ras_n,
outputddr3_reset_n,
outputddr3_we_n
);

wireaxi4_clk;
wireaxil_clk;
regaxi4_rstn;
wireaxil_rstn;
wireinit_calib_complete;
wiremmcm_locked;
wireddr_rst;

always@(posedgeaxi4_clk)
begin
axi4_rstn<=?axil_rstn;
??end?

??reg?[8:0]?cnt;
??always?@?(?posedge?axil_clk?)
??begin
??????if(~axil_rstn)
??????????cnt?<=?'d0;
??????else?if(cnt=='d256)
??????????cnt?<=?cnt?;
??????else?
??????????cnt?<=?cnt?+?1'b1;
??end?

??assign?ddr_rst?=?(cnt=='d256)?1'b0:1'b1;

??MicroBlaze_DDR3?MicroBlaze_DDR3_i
???????(.UART_rxd???????????????????(UART_rxd?????????????),
????????.UART_txd???????????????????(UART_txd?????????????),
????????.axil_clk???????????????????(axil_clk?????????????),
????????.axi4_clk???????????????????(axi4_clk?????????????),
????????.axi4_rstn??????????????????(axi4_rstn????????????),
????????.clk_in_clk_n???????????????(clk_n????????????????),
????????.clk_in_clk_p???????????????(clk_p????????????????),
????????.ddr3_addr??????????????????(ddr3_addr????????????),
????????.ddr3_ba????????????????????(ddr3_ba??????????????),
????????.ddr3_cas_n?????????????????(ddr3_cas_n???????????),
????????.ddr3_ck_n??????????????????(ddr3_ck_n????????????),
????????.ddr3_ck_p??????????????????(ddr3_ck_p????????????),
????????.ddr3_cke???????????????????(ddr3_cke?????????????),
????????.ddr3_cs_n??????????????????(ddr3_cs_n????????????),
????????.ddr3_dm????????????????????(ddr3_dm??????????????),
????????.ddr3_dq????????????????????(ddr3_dq??????????????),
????????.ddr3_dqs_n?????????????????(ddr3_dqs_n???????????),
????????.ddr3_dqs_p?????????????????(ddr3_dqs_p???????????),
????????.ddr3_odt???????????????????(ddr3_odt?????????????),
????????.ddr3_ras_n?????????????????(ddr3_ras_n???????????),
????????.ddr3_reset_n???????????????(ddr3_reset_n?????????),
????????.ddr3_we_n??????????????????(ddr3_we_n????????????),
????????.ddr_rst????????????????????(ddr_rst??????????????),
????????.init_calib_complete????????(init_calib_complete??),
????????.mmcm_locked????????????????(mmcm_locked??????????),
????????.reset??????????????????????(1'b0?????????????????),
????????.axil_rstn??????????????????(axil_rstn????????????)
??????);
endmodule
//helloworld.c
#include
#include"platform.h"
#include"xil_printf.h"


intmain()
{
init_platform();
print("-------ddr3test----------------------

");
unsignedint*DDR_MEM=(unsignedint*)XPAR_MIG_7SERIES_0_BASEADDR;
//writedatatoddr3
*DDR_MEM=0x12345678;
//readback
unsignedintvalue=*(unsignedint*)XPAR_MIG_7SERIES_0_BASEADDR;

xil_printf("value=0x%x
",value);

cleanup_platform();
return0;
}

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1608

    文章

    21367

    瀏覽量

    594616
  • DDR3
    +關注

    關注

    2

    文章

    272

    瀏覽量

    41895
  • MicroBlaze
    +關注

    關注

    3

    文章

    66

    瀏覽量

    21458

原文標題:Virtex7 Microblaze下DDR3測試

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DDR3布線參考

    DDR3DDR
    電子學習
    發布于 :2022年12月07日 22:57:54

    DDR3布線參考

    DDR3DDR
    電子學習
    發布于 :2022年12月07日 22:58:53

    DDR3內存測試

      江山科技最新推出JS-9500內存測試儀(SD/DDR/DDR2/DDR3)為領先業界的軟硬件測試系統,采用國際內存業界最先進
    發表于 02-10 22:50

    DDR3內存測試

      江山科技最新推出JS-9500內存測試儀(SD/DDR/DDR2/DDR3)為領先業界的軟硬件測試系統,采用國際內存業界最先進
    發表于 02-10 22:55

    DDR3內存測試

      江山科技最新推出JS-9500內存測試儀(SD/DDR/DDR2/DDR3)為領先業界的軟硬件測試系統,采用國際內存業界最先進
    發表于 08-17 23:00

    Xilinx DDR3 資料

    Achieving High Performance DDR3 Data Rates in Virtex-7 and Kintex-7 FPGAs。Xilinx官方DDR3資料。
    發表于 05-27 16:39

    請問如何修改GEL文件中DDR3 PLL配置?

    使用MCSDK提供的norwriter_evm6678l例程,按照論壇提供的方法,進行程序燒寫。而該例程的CCS啟動用到DDR3,需要使用gel文件,對
    發表于 08-06 07:33

    DDR3控制器和SSTL15_T_DCI在同一個bank中

    你好,我使用Virtex7的HP庫來實現DDR3控制器。我的控制器將以1600Mbps的速度運行,因此主控制器中的VRN和VRP應連接一個80Ω電阻,以實現更高的性能。實現addr / cmd信號
    發表于 03-25 11:04

    與Kintex 7DDR3內存接口

    嗨,我正在設計一個定制FPGA板&amp;我將使用帶有Kintex(XC7K160T-2FFG676C)FPGA的DDR3 RAM。我閱讀了xilinx&amp; amp; amp; amp
    發表于 04-17 07:54

    哪里可以找到Virtex7 PCIE_3_0的DRP地址映射?

    嗨,我需要Virtex7 PCIE_3_0的DRP地址映射。我在用戶指南pg25中找不到它我在哪里可以找到這些信息?
    發表于 04-22 10:07

    LVDS發送器IP可用于Virtex6和Virtex7 FPGA嗎

    嗨,LVDS發送器IP(基于OpenLDI,像素和控制數據轉換為LVDS信號)可用于Virtex6和Virtex7 FPGA嗎?謝謝克里希納
    發表于 06-17 14:52

    Virtex7的SERDES運行的最大頻率是多少?

    您好,Virtex7的SERDES運行的最大頻率是多少?請問,有人可以幫我這個嗎?在此先感謝,最好的問候
    發表于 07-30 17:20

    哪里可以找到幾個在virtex7實現的示例設計文件?

    你好 ,我在哪里可以找到幾個在virtex7實現的示例設計文件,以便在板獲得良好的實際操作?提前致謝
    發表于 08-11 06:06

    AD9625的開發板AD-FMCADC3-EBZ能否與Virtex7直接連接?

    模數轉換器AD9625的評估板AD-FMCADC3-EBZ能不能和賽靈思的Virtex7系列FPGA開發板連接,我看到他們都具備JESD204B接口,物理接口上能直接連嗎?還是說需要在使用轉換接口來連接?
    發表于 12-08 08:25

    關于Virtex7DDR3測試例程詳解

    這篇文章我們講一下Virtex7DDR3測試例程,Vivado也提供了一個DDR的example,但卻是純Verilog代碼,比較復雜,
    的頭像 發表于 05-02 09:05 ?3131次閱讀
    關于<b class='flag-5'>Virtex7</b>上<b class='flag-5'>DDR3</b>的<b class='flag-5'>測試</b><b class='flag-5'>例程</b>詳解
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>