<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201607/294696.htm

          引言

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

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

          1 的分析及重構

          1.1 的結構

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

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

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

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

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

          1.2 大容量DDR3緩存設計

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

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

          1.2.1 接口FIFO設計

            在該設計中,寫FIFO接口和讀FIFO接口主要完成數(shù)據(jù)位寬的轉換以及數(shù)據(jù)的跨時鐘域處理;FIFO控制器主要完成對寫FIFO接口和讀FIFO的控制,按照DDR3控制器用戶接口時序?qū)τ脩艚涌谶M行讀寫操作;DDR3 SDRAM控制器則主要完成對DDR3 SDRAM的初始化,將復雜的讀寫時序轉化為簡單的用戶讀寫時序。

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

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

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

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

          1.2.2 FIFO控制器

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

            ddr3_ctrl_s0:復位或異常情況下,默認等待狀態(tài)。當DDR3控制器完成初始化后,即phy_init_done有效時,跳轉到ddr3_ctrl _s1狀態(tài)。

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

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

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

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

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

          1.2.3 時鐘模塊設計

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

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

          2 運行和測試

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

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

          3 結束語

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

          參考文獻:

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

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

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

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

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

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

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



          關鍵詞: MIG核 FIFO DDR3 SDRAM 201608

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();