新聞中心

EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > Xilinx MIG IP核的研究及大容量數(shù)據(jù)緩沖區(qū)的實(shí)現(xiàn)

Xilinx MIG IP核的研究及大容量數(shù)據(jù)緩沖區(qū)的實(shí)現(xiàn)

作者:王紅兵 強(qiáng)景 周珍龍 時(shí)間:2016-07-28 來(lái)源:電子產(chǎn)品世界 收藏
編者按:為了使DDR3 SDRAM更方便、多樣地用于工程開(kāi)發(fā)中,本文對(duì)XILINX公司DDR3 SDRAM提供的MIG核進(jìn)行了分析研究,并在此基礎(chǔ)上實(shí)現(xiàn)了大容量數(shù)據(jù)緩沖區(qū)的邏輯設(shè)計(jì)。通過(guò)對(duì)系統(tǒng)中各模塊的作用及相互間關(guān)系的研究,發(fā)現(xiàn)該控制器256位接口對(duì)工程開(kāi)發(fā)十分不便,通過(guò)創(chuàng)建FIFO控制系統(tǒng)和讀寫(xiě)接口FIFO的方式,將接口轉(zhuǎn)換為64位。該方案對(duì)控制核重新構(gòu)建并上板測(cè)試,均符合高速數(shù)據(jù)傳輸緩存的要求,使DDR3成為一個(gè)大容量且可控的高速FIFO。

摘要:為了使更方便、多樣地用于工程開(kāi)發(fā)中,本文對(duì)XILINX公司提供的進(jìn)行了分析研究,并在此基礎(chǔ)上實(shí)現(xiàn)了大容量數(shù)據(jù)緩沖區(qū)的邏輯設(shè)計(jì)。通過(guò)對(duì)系統(tǒng)中各模塊的作用及相互間關(guān)系的研究,發(fā)現(xiàn)該控制器256位接口對(duì)工程開(kāi)發(fā)十分不便,通過(guò)創(chuàng)建控制系統(tǒng)和讀寫(xiě)接口的方式,將接口轉(zhuǎn)換為64位。該方案對(duì)控制核重新構(gòu)建并上板測(cè)試,均符合高速數(shù)據(jù)傳輸緩存的要求,使DDR3成為一個(gè)大容量且可控的高速。

本文引用地址:http://butianyuan.cn/article/201607/294696.htm

引言

  隨著電子行業(yè)的飛速發(fā)展,人們對(duì)于設(shè)備處理速度的期望也越來(lái)越高。其中,DDR3的出現(xiàn)給整個(gè)行業(yè)帶來(lái)了不可限量的跨越,這使得我們?cè)诠こ讨袑?duì)DDR3更加青睞。DDR3(double-data-rate three synchronous dynamic random access memory)是應(yīng)用在計(jì)算機(jī)及電子產(chǎn)品領(lǐng)域的一種高帶寬并行數(shù)據(jù)存儲(chǔ)設(shè)備,廣泛應(yīng)用于工程設(shè)計(jì)中。

  Xilinx公司為DDR3提供了IP核和方便友好的用戶(hù)接口,推進(jìn)了DDR3在FPGA中的使用進(jìn)程。尤其對(duì)于高速數(shù)據(jù)的傳輸和處理,F(xiàn)PGA內(nèi)FIFO遠(yuǎn)不能滿(mǎn)足性能上的要求。這就使得將DDR3設(shè)計(jì)成大容量數(shù)據(jù)緩沖區(qū)成為工程中的必要需求。然而由于需求的不同,對(duì)核接口的要求也會(huì)隨之改變。Xilinx官方核的接口是256位,但實(shí)際需求中64位的居多,本文將從邏輯上對(duì)該核進(jìn)行重建。

1 的分析及重構(gòu)

1.1 的結(jié)構(gòu)

  控制器的主要功能是實(shí)現(xiàn)對(duì)DDR3 SDRAM存儲(chǔ)器的初始化。此外,DDR3 SDRAM控制器還可以將DDR3 SDRAM接口的上下時(shí)鐘沿?cái)?shù)據(jù)轉(zhuǎn)變成單時(shí)鐘沿用戶(hù)數(shù)據(jù),同時(shí)還可以產(chǎn)生周期性的刷新指令,完成對(duì)DDR3 SDRAM存儲(chǔ)器的動(dòng)態(tài)刷新,從而保證數(shù)據(jù)的完整性。DDR3 SDRAM控制器的結(jié)構(gòu)框圖如圖1所示,其主要包括四個(gè)部分,分別是基礎(chǔ)模塊(infrastructure)、用戶(hù)界接口模塊(user interface)、物理層模塊(physical layer)和存儲(chǔ)器控制模塊(memory controller)。

  基礎(chǔ)模塊首先接收通過(guò)FPGA全局時(shí)鐘網(wǎng)絡(luò)的外部200MHz差分時(shí)鐘,然后通過(guò)混合模式,時(shí)鐘管理器(MMCM)產(chǎn)生用戶(hù)接口時(shí)鐘、控制模塊使用的時(shí)鐘以及DDR3存儲(chǔ)器的時(shí)鐘。除此之外,該模塊還生成了一個(gè)可以全局復(fù)位整個(gè)DDR3 SDRAM控制器IP核的復(fù)位信號(hào)。該模塊還包括一個(gè)延時(shí)控制單元,用來(lái)同步校準(zhǔn)設(shè)計(jì)中的延時(shí)單元,以減少功耗。

  用戶(hù)接口模塊的主要功能是連續(xù)地輸入或輸出數(shù)據(jù)和控制命令,完成對(duì)用戶(hù)數(shù)據(jù)、控制命令以及地址等信息的接收和緩存,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)的緩沖和同步效果。

  物理層模塊通過(guò)物理引腳與片外DDR3 SDRAM直接進(jìn)行數(shù)據(jù)通信,它可以對(duì)片外DDR3 SDRAM存儲(chǔ)器發(fā)出的數(shù)據(jù)進(jìn)行捕獲,同時(shí)產(chǎn)生片外DDR3 SDRAM存儲(chǔ)器所需要的控制信號(hào),通過(guò)緩存把數(shù)據(jù)、命令以及地址等信號(hào)發(fā)送給片外DDR3 SDRAM,從而保證了數(shù)據(jù)信號(hào)、命令信號(hào)與地址信號(hào)的同步。

  控制模塊的主要功能是實(shí)現(xiàn)對(duì)DDR3 SDRAM存儲(chǔ)器的初始化操作。DDR3 SDRAM上電之后,首先經(jīng)過(guò)200μs的穩(wěn)定期,然后等到500μs后,把時(shí)鐘使能信號(hào)CKE拉高,保持至少10ns,然后開(kāi)始ODT過(guò)程,對(duì)擴(kuò)展模式寄存器和模式寄存器進(jìn)行配置,使能DLL并對(duì)DLL復(fù)位。如果信號(hào)phy_initial_done拉高,那么表示DDR3存儲(chǔ)器初始化完成,校準(zhǔn)結(jié)束。初始化結(jié)束后,DDR3控制器根據(jù)DDR3 SDRAM存儲(chǔ)器的用戶(hù)讀寫(xiě)操作時(shí)序要求,自動(dòng)生成所需命令以及控制信號(hào),發(fā)送給DDR3 SDRAM存儲(chǔ)器。當(dāng)發(fā)送完命令信號(hào)之后,給用戶(hù)發(fā)送一個(gè)命令應(yīng)答信號(hào),設(shè)計(jì)人員可以根據(jù)這個(gè)命令應(yīng)答信號(hào)判斷是否可以發(fā)送下一條指令。整個(gè)過(guò)程中,DDR3控制器自動(dòng)完成自刷新、激活以及預(yù)充電等命令的發(fā)送和相應(yīng)操作的執(zhí)行,這個(gè)過(guò)程完全不需要用戶(hù)干涉DDR3 SDRAM存儲(chǔ)器。

1.2 大容量DDR3緩存設(shè)計(jì)

  在本系統(tǒng)設(shè)計(jì)中,DDR3 SDRAM的主要功能是用于大容量數(shù)據(jù)緩存,考慮到FPGA不僅處理速度高,而且靈活性和可配置性好,故使用Xilinx公司FPGA提供的DDR3 SDRAM緩存控制器IP核可以輕松實(shí)現(xiàn)FPGA與外部存儲(chǔ)器之間的接口設(shè)計(jì)。根據(jù)FIFO的基本原理,采用Xilinx公司的FPGA和Micron公司容量為1GB的DDR3內(nèi)存MT4JSF12864HZ設(shè)計(jì)實(shí)現(xiàn)了一種大容量虛擬FIFO緩存。

  該大容量虛擬FIFO緩存設(shè)計(jì)主要由上行FIFO、FIFO控制器、寫(xiě)接口FIFO、讀接口DDR3 SDRAM控制器、時(shí)鐘模塊以及外部的DDR3 SDRAM存儲(chǔ)器六部分構(gòu)成。其整體結(jié)構(gòu)框圖如圖2所示。DDR3 SDRAM緩存接口的設(shè)計(jì)主要集中在FPGA內(nèi)部邏輯設(shè)計(jì),具體的設(shè)計(jì)主要包括DDR3控制器設(shè)計(jì)、讀寫(xiě)FIFO接口設(shè)計(jì)、FIFO控制器設(shè)計(jì)以及時(shí)鐘模塊設(shè)計(jì)。

1.2.1 接口FIFO設(shè)計(jì)

  在該設(shè)計(jì)中,寫(xiě)FIFO接口和讀FIFO接口主要完成數(shù)據(jù)位寬的轉(zhuǎn)換以及數(shù)據(jù)的跨時(shí)鐘域處理;FIFO控制器主要完成對(duì)寫(xiě)FIFO接口和讀FIFO的控制,按照DDR3控制器用戶(hù)接口時(shí)序?qū)τ脩?hù)接口進(jìn)行讀寫(xiě)操作;DDR3 SDRAM控制器則主要完成對(duì)DDR3 SDRAM的初始化,將復(fù)雜的讀寫(xiě)時(shí)序轉(zhuǎn)化為簡(jiǎn)單的用戶(hù)讀寫(xiě)時(shí)序。

  寫(xiě)FIFO接口和讀FIFO接口主要功能是實(shí)現(xiàn)FPGA與DDR3 SDRAM之間的數(shù)據(jù)傳輸。由于FPGA與DDR3 SDRAM分別屬于不同的時(shí)鐘域,故在設(shè)計(jì)中需要采用兩個(gè)異步FIFO處理數(shù)據(jù)跨時(shí)鐘域傳輸?shù)膯?wèn)題。此外,由于PCI Express總線接口的數(shù)據(jù)位寬為64位,而DDR3 SDRAM控制器提供的用戶(hù)接口數(shù)據(jù)位寬為256位,因此,還需要通過(guò)這兩個(gè)FIFO完成數(shù)據(jù)位寬的轉(zhuǎn)換。

  當(dāng)信號(hào)從一個(gè)時(shí)鐘域傳遞到另外一個(gè)時(shí)鐘域時(shí),使用異步FIFO可以解決傳輸過(guò)程中出現(xiàn)的亞穩(wěn)態(tài)問(wèn)題。在ISE 14.2開(kāi)發(fā)平臺(tái)下設(shè)計(jì)FIFO的方法有兩種,一種是設(shè)計(jì)者自己設(shè)計(jì)FIFO的控制邏輯,然后通過(guò)CORE Generator生成DPRAM,最后將兩者連接起來(lái)構(gòu)成一個(gè)FIFO;另一種是利用CORE Generator工具自動(dòng)生成一個(gè)FIFO的IP核,然后在設(shè)計(jì)中實(shí)例化即可使用。第一種方法比較費(fèi)時(shí),而且有一定的難度,相對(duì)而言,第二種方法就簡(jiǎn)單很多,設(shè)計(jì)者可以不用關(guān)心FIFO實(shí)現(xiàn)的細(xì)節(jié),而專(zhuān)注于其頂層的功能和應(yīng)用。本設(shè)計(jì)直接調(diào)用Xilinx公司FPGA內(nèi)部IP核對(duì)FIFO進(jìn)行設(shè)計(jì)。

  寫(xiě)FIFO接口包含一個(gè)異步FIFO和一個(gè)同步FIFO,異步FIFO寫(xiě)入數(shù)據(jù)位寬是64位,讀出數(shù)據(jù)位寬是256位,其寫(xiě)時(shí)鐘為250MHz的PCI-E系統(tǒng)時(shí)鐘,讀時(shí)鐘為200MHz的DDR3用戶(hù)接口時(shí)鐘;同步FIFO寫(xiě)入和讀出數(shù)據(jù)位寬均為256位,其讀寫(xiě)時(shí)鐘為200MHz的DDR3用戶(hù)接口時(shí)鐘。寫(xiě)FIFO接口通過(guò)兩個(gè)FIFO進(jìn)行級(jí)聯(lián)的方式加深其處理數(shù)據(jù)的深度。寫(xiě)FIFO接口的FPGA內(nèi)部邏輯實(shí)現(xiàn)如圖3所示。

  讀FIFO接口則只包含一個(gè)異步FIFO,其寫(xiě)入數(shù)據(jù)位寬是256位,讀出數(shù)據(jù)位寬是64位,寫(xiě)時(shí)鐘為200MHz的DDR3用戶(hù)接口時(shí)鐘,讀時(shí)鐘為250MHz的PCI-E系統(tǒng)時(shí)鐘。讀FIFO接口的FPGA內(nèi)部邏輯實(shí)現(xiàn)如圖4所示。

1.2.2 FIFO控制器

  FIFO控制器的主要功能是實(shí)現(xiàn)對(duì)寫(xiě)FIFO接口、讀FIFO接口與DDR3 SDRAM之間數(shù)據(jù)交互的控制。由于DDR3 SDRAM內(nèi)存工作時(shí)鐘頻率為400MHz,此時(shí)其理論傳輸帶寬為51.2Gbps,遠(yuǎn)遠(yuǎn)高于讀FIFO接口和寫(xiě)FIFO接口的數(shù)據(jù)傳輸帶寬,故FIFO控制器需要根據(jù)讀寫(xiě)FIFO所緩存的數(shù)據(jù)量,對(duì)DDR3 SDRAM總線進(jìn)行分時(shí)復(fù)用。DDR3讀寫(xiě)控制狀態(tài)機(jī)設(shè)計(jì)如圖5所示。下面就將對(duì)各狀態(tài)含義與跳轉(zhuǎn)條件做簡(jiǎn)要說(shuō)明:

  ddr3_ctrl_s0:復(fù)位或異常情況下,默認(rèn)等待狀態(tài)。當(dāng)DDR3控制器完成初始化后,即phy_init_done有效時(shí),跳轉(zhuǎn)到ddr3_ctrl _s1狀態(tài)。

  ddr3_ctrl _s1:當(dāng)DDR3內(nèi)存不滿(mǎn)且DDR3寫(xiě)接口的FIFO非空時(shí),如果命令地址FIFO準(zhǔn)備好接收命令且寫(xiě)數(shù)據(jù)FIFO準(zhǔn)備好接收數(shù)據(jù),則跳轉(zhuǎn)到ddr3_ctrl _s2狀態(tài),同時(shí)將app_wdf_wren置為有效,將DDR3寫(xiě)FIFO接口的讀使能置為有效;當(dāng)DDR3內(nèi)存不空且DDR3讀接口FIFO不滿(mǎn)時(shí),如果命令地址FIFO準(zhǔn)備好接收命令,則跳轉(zhuǎn)到ddr3_ctrl _s4狀態(tài);其他情況狀態(tài)不跳轉(zhuǎn)。

  ddr3_ctrl _s2:當(dāng)寫(xiě)入數(shù)據(jù)FIFO準(zhǔn)備好接收數(shù)據(jù)時(shí),跳轉(zhuǎn)到ddr3_ctrl _s3狀態(tài),同時(shí)將app_wdf_end置為有效,指示當(dāng)前是最后一個(gè)有效數(shù)據(jù),在給出寫(xiě)命令和地址的同時(shí)將使能置為有效;其他情況狀態(tài)不跳轉(zhuǎn)。

  ddr3_ctrl _s3:當(dāng)命令地址FIFO準(zhǔn)備好接收命令且寫(xiě)數(shù)據(jù)FIFO準(zhǔn)備好接收數(shù)據(jù)時(shí),如果寫(xiě)入次數(shù)等于32,此時(shí)剛好寫(xiě)滿(mǎn)一行,則跳轉(zhuǎn)到ddr3_ctrl _s1狀態(tài),同時(shí)將app_en、app_wdf_wren和DDR3寫(xiě)FIFO接口的讀使能置為無(wú)效;如果寫(xiě)入次數(shù)小于32,即沒(méi)有寫(xiě)滿(mǎn)一行數(shù)據(jù),則跳轉(zhuǎn)到ddr3_ctrl_s2狀態(tài),同時(shí)將app_wdf_wren和DDR3上行FIFO讀使能置為有效。當(dāng)命令地址FIFO沒(méi)有準(zhǔn)備好接收命令但寫(xiě)數(shù)據(jù)FIFO準(zhǔn)備好接收數(shù)據(jù)時(shí),將app_wdf_wren和DDR3寫(xiě)FIFO接口的讀使能置為無(wú)效,同時(shí)將app_wdf_end置為無(wú)效,狀態(tài)不跳轉(zhuǎn)。

  ddr3_ctrl _s4:狀態(tài)跳轉(zhuǎn)到ddr3_ctrl _s5,在給出讀命令和地址的同時(shí)將使能置為有效。

  ddr3_ctrl _s5:當(dāng)命令地址FIFO準(zhǔn)備好接收命令,如果讀出次數(shù)等于32,此時(shí)剛好讀完一行數(shù)據(jù),狀態(tài)跳轉(zhuǎn)到ddr3_ctrl _s1;如果讀出次數(shù)小于32,即沒(méi)有讀完一行數(shù)據(jù),則跳轉(zhuǎn)到ddr3_ctrl_s4狀態(tài);其他情況時(shí)將app_en置為無(wú)效,狀態(tài)不跳轉(zhuǎn)。

1.2.3 時(shí)鐘模塊設(shè)計(jì)

  在本系統(tǒng)的時(shí)鐘模塊設(shè)計(jì)中,時(shí)鐘模塊的具體結(jié)構(gòu)如圖6所示。它包括一個(gè)IBUFGDS(差分信號(hào)輸入緩沖)、一個(gè)MMCM(混合模式時(shí)鐘管理器)和兩個(gè)BUFG(全局時(shí)鐘輸出緩沖)。在進(jìn)行設(shè)計(jì)的時(shí)候,需要用戶(hù)提供給DDR3 SDRAM控制器兩個(gè)時(shí)鐘,這兩個(gè)時(shí)鐘分別是DDR3 SDRAM存儲(chǔ)器工作的系統(tǒng)時(shí)鐘(ddr3_sys_clk)和時(shí)延單元的參考時(shí)鐘(ddr3_clk_ref)。由于DDR3 SDRAM要滿(mǎn)足系統(tǒng)的傳輸帶寬要求,設(shè)計(jì)的時(shí)候需要其工作時(shí)鐘頻率為400MHz,因此,DDR3控制器上以工作時(shí)鐘頻率運(yùn)行的系統(tǒng)時(shí)鐘頻率為400MHz,提供給時(shí)延單元的參考時(shí)鐘頻率為200MHz。

  考慮到系統(tǒng)提供的是來(lái)自全局時(shí)鐘網(wǎng)絡(luò)的200MHz差分時(shí)鐘,但是在DRR3控制器定制的時(shí)候,在MIG設(shè)置界面選擇的時(shí)鐘輸入形式是單端輸入,因此,首先需要將輸入的全局差分時(shí)鐘連接到IBUFGDS(差分信號(hào)輸入緩沖)上,然后再通過(guò)一個(gè)MMCM倍頻出DDR3 SDRAM控制器所需要的兩個(gè)時(shí)鐘。該時(shí)鐘模塊的FPGA內(nèi)部邏輯實(shí)現(xiàn)如圖7所示。

2 運(yùn)行和測(cè)試

  本文測(cè)試所選芯片為XILINX V6系列FPGA,所選環(huán)境為ISE14.6。在該環(huán)境中創(chuàng)建支持DDR3的IP核,根據(jù)設(shè)計(jì)目的對(duì)核進(jìn)行修改。將程序燒寫(xiě)至FPGA后,可通過(guò)邏輯分析儀ChipScope來(lái)抓取內(nèi)部想要觀察的信號(hào)。下圖是實(shí)時(shí)抓取的FIFO數(shù)據(jù)。

  其中fifo_q_ddr3_us是256位的核接口信號(hào),fifo_data_ddr3_us和fifo_data_q_ds分別為改造后的對(duì)外接口,均為64位。由上述所抓取的fifo_data_ddr3_us的數(shù)據(jù)可以看到,數(shù)據(jù)最先到達(dá)該fifo,然后經(jīng)過(guò)緩存進(jìn)入256位fifo_q_ddr3_us,最后存入DDR3。讀出數(shù)據(jù)是從fifo_data_q_ds輸出。測(cè)試數(shù)據(jù)是遞增的,由上述信號(hào)可以看到,該改造達(dá)到了預(yù)期目的。

3 結(jié)束語(yǔ)

  本文通過(guò)基于FPGA DDR3 SDRANM IP核的邏輯重構(gòu),將256位寬的接口改造為64位接口,使得工程上數(shù)據(jù)接口更為通用。為后期工程開(kāi)發(fā)提供便捷可控的接口。隨著電子行業(yè)的飛速發(fā)展,對(duì)高速大容量緩存的需求也隨之增大。怎樣利用當(dāng)前的快速緩存技術(shù)于自己的設(shè)計(jì)中成為開(kāi)發(fā)中的一個(gè)門(mén)檻。本文正是結(jié)合實(shí)際需求給出了這一答案。

參考文獻(xiàn):

  [1]Virtex-6 FPGA Memory Interface Solutions (UG406). Xilinx Corporation,2010.

  [2]夏玉立, 雷宏, 黃瑤.用Xilinx FPGA實(shí)現(xiàn)DDR SDRAM控制器[J].微計(jì)算機(jī)信息. 2007(26).

  [3]陳雨, 陳科, 安濤.高速圖像處理系統(tǒng)中DDR2-SDRAM接口的設(shè)計(jì)[J].現(xiàn)代電子技術(shù). 2011,34(12).

  [4]任穎, 黃建國(guó).基于FPGA的DDR2 SDRAM控制器接口的簡(jiǎn)化設(shè)計(jì)方法及實(shí)現(xiàn)[J].電子質(zhì)量.2008(11):31-33.

  [5]Xilinx. Virtex-6 FPGA user guide[R]. USA: Xilinx,2008.

  [6]庾志衡, 葉俊明, 鄧迪文.基于FPGA與DDR2 SDRAM的大容量異步FIFO緩存設(shè)計(jì)[J].微型機(jī)與應(yīng)用.2011,30(6).

本文來(lái)源于中國(guó)科技期刊《電子產(chǎn)品世界》2016年第7期第43頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。



關(guān)鍵詞: MIG核 FIFO DDR3 SDRAM 201608

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉