在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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文件。可以把init_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
    +關注

    關注

    1640

    文章

    21903

    瀏覽量

    611456
  • DDR3
    +關注

    關注

    2

    文章

    279

    瀏覽量

    42808
  • MicroBlaze
    +關注

    關注

    3

    文章

    68

    瀏覽量

    21796

原文標題:Virtex7 Microblaze下DDR3測試

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

收藏 人收藏

    評論

    相關推薦

    DDR3 SDRAM配置教程

    DDR3 SDRAM(Double-Data-Rate ThreeSynchronous Dynamic Random Access Memory)是DDR SDRAM的第三代產品,相較于DDR2,
    的頭像 發表于 04-10 09:42 ?852次閱讀
    <b class='flag-5'>DDR3</b> SDRAM配置教程

    Xilinx DDR3 資料

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

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

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

    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

    ddr3的讀寫分離方法有哪些?

    DDR3是目前DDR的主流產品,DDR3的讀寫分離作為DDR最基本也是最常用的部分,本文主要闡述DDR3讀寫分離的方法。最開始的
    的頭像 發表于 11-06 13:44 ?9005次閱讀
    <b class='flag-5'>ddr3</b>的讀寫分離方法有哪些?

    ddr4和ddr3內存的區別,可以通用嗎

    雖然新一代電腦/智能手機用上了DDR4內存,但以往的產品大多還是用的DDR3內存,因此DDR3依舊是主流,DDR4今后將逐漸取代DDR3,成
    發表于 11-08 15:42 ?3.2w次閱讀

    基于FPGA的DDR3 SDRAM控制器用戶接口設計

    為了滿足高速圖像數據采集系統中對高帶寬和大容量的要求,利用Virtex-7 系列FPGA 外接DDR3 SDRAM 的設計方法,提出了一種基于Verilog-HDL 語言的DDR3 SDRAM
    發表于 11-17 14:14 ?3756次閱讀
    基于FPGA的<b class='flag-5'>DDR3</b> SDRAM控制器用戶接口設計

    基于FPGA的DDR3用戶接口設計技術詳解

    本文詳細介紹了在Xilinx Virtex-6系列FPGA中使用MIG3.7 IP核實現高速率DDR3芯片控制的設計思想和設計方案。針對高速實時數字信號處理中大容量采樣數據通過DDR3存儲和讀取
    發表于 11-17 14:26 ?2.5w次閱讀
    基于FPGA的<b class='flag-5'>DDR3</b>用戶接口設計技術詳解

    安捷倫科技推DDR3協議調試和測試套件,具備最齊全的行業功能

    近日,安捷倫科技公司推出目標應用為板級或嵌入式存儲器應用的DDR3協議調試和測試套件,由硬件和軟件的組成。據說該套件是業界首個功能最齊全的DDR3測試工具,包含業界最快的(2.0-Gt
    發表于 08-30 10:06 ?1070次閱讀

    關于Virtex7DDR3測試例程詳解

    這篇文章我們講一下Virtex7DDR3測試例程,Vivado也提供了一個DDR的examp
    的頭像 發表于 05-02 09:05 ?3619次閱讀
    關于<b class='flag-5'>Virtex7</b><b class='flag-5'>上</b><b class='flag-5'>DDR3</b>的<b class='flag-5'>測試</b><b class='flag-5'>例程</b>詳解

    基于AXI總線的DDR3讀寫測試

    本文開源一個FPGA項目:基于AXI總線的DDR3讀寫。之前的一篇文章介紹了DDR3簡單用戶接口的讀寫方式:《DDR3讀寫測試》,如果在某些項目中,我們需要把
    的頭像 發表于 09-01 16:20 ?5458次閱讀
    基于AXI總線的<b class='flag-5'>DDR3</b>讀寫<b class='flag-5'>測試</b>

    基于FPGA的DDR3讀寫測試

    本文介紹一個FPGA開源項目:DDR3讀寫。該工程基于MIG控制器IP核對FPGA DDR3實現讀寫操作。
    的頭像 發表于 09-01 16:23 ?2143次閱讀
    基于FPGA的<b class='flag-5'>DDR3</b>讀寫<b class='flag-5'>測試</b>

    闡述DDR3讀寫分離的方法

    DDR3是2007年推出的,預計2022年DDR3的市場份額將降至8%或以下。但原理都是一樣的,DDR3的讀寫分離作為DDR最基本也是最常用的部分,本文主要闡述
    的頭像 發表于 10-18 16:03 ?1309次閱讀
    闡述<b class='flag-5'>DDR3</b>讀寫分離的方法
    主站蜘蛛池模板: 欧美一卡2卡三卡4卡5卡免费观看 | 另类性欧美喷潮videofree | 侵犯希崎中文字幕在线 | 成人国产精品高清在线观看 | 成人欧美精品一区二区不卡 | 一区二区影视 | sao虎在线精品永久 se94se欧美 | 亚洲资源在线视频 | 午夜爱爱毛片xxxx视频免费看 | 黄色h视频 | 狂野欧美性色xo影院 | 日本国产视频 | 亚洲欧美色一区二区三区 | 久久狠色噜噜狠狠狠狠97 | 亚洲成综合人影院在院播放 | 欧美三级不卡在线观线看高清 | 又黄又涩的视频 | 宅男666在线永久免费观看 | 久久影院午夜伦手机不四虎卡 | 午夜激情福利网 | 伊人网址 | 黄色一级毛片看一级毛片 | 国产精品免费看久久久 | 国产亚洲高清在线精品不卡 | 好男人社区www的视频免费 | 天天爆操 | 99热这里只有精品一区二区三区 | 91成人免费 | 亚洲欧洲综合网 | 国产色产综合色产在线观看视频 | www.91大神| 欧洲无线区一二区 | 国产黄网站在线观看 | 超大乳抖乳露双乳视频 | 免费一级毛片清高播放 | 狠狠色噜噜狠狠狠狠2018 | 亚洲a免费| 99色99| 国模欢欢炮交啪啪150 | 婷婷激情综合 | 色综合狠狠操 |