唐 瑞,葉李萍,王經坤,姚遠程
(1.西南科技大學信息工程學院,四川 綿陽 621010;2.西華師范大學商學院,四川 南充 637000)
第三代雙倍數據傳輸速率同步動態(tài)隨機存儲器(double-data-rate three synchronous dynamic random access memory,DDR3 SDRAM)自面世以來,以其相對于DDR2更高的運行效能與更低的電壓功耗等優(yōu)勢,迅速在諸多領域中取代了DDR2,成為新一代高速、大容量數據緩存器中的較好選擇[1]。通常Xilinx官方提供的DDR3 IP核中默認只有一套讀寫通道,讀寫共用同一套地址[2]。本設計是在DDR3上,切割出兩套獨立讀寫通道,基于時分復用(time division multiplexing,TDM)原則,使每一套讀寫接口互不影響。在第一套接口中向DDR3寫入數據的同時,該設計實現(xiàn)了向第二套接口中寫入或者讀出數據,增強了DDR3的靈活性,提高了DDR3的使用效率。
隨著高速圖像處理技術的飛速發(fā)展,在實現(xiàn)圖像算法的過程中,往往需要實時處理大量的數據,所以必須采用高速數據緩存器DDR3作為實時數據緩存工具。目前,各大FPGA廠商都提供了對DDR3讀寫控制的IP核。但該IP核僅支持一套讀寫接口[3],無法同時進行讀寫。這是由于DDR3本身的特性所決定的。為了彌補這一缺點,需要設計一種從用戶接口到DDR3的橋接電路。該電路使用時分復用的設計理念,能充分提高DDR3的讀寫效率;同時,結合外部的緩存器先入先出隊列(first input first output,FIFO),可同時實現(xiàn)對DDR3的讀寫操作。
本文使用Xilinx公司提供的IP核,生成控制DDR3的控制器核(memory interface generator,MIG),并與用戶接口[4]。本設計在該控制器的基礎上,通過時分復用原則,將一套不獨立的讀寫通道搭建為雙獨立的讀寫通道,能滿足用戶同時讀寫的要求。
整個硬件模塊分為4大部分:用戶接口模塊,時分復用橋接電路模塊,Xilinx公司所提供的DDR3控制器以及DDR3芯片。其中,用戶接口模塊作為面向用戶的接口,包含兩套獨立的讀寫接口。此模塊是發(fā)起讀寫操作的源頭。時分復用橋接電路模塊可實現(xiàn)雙讀寫端口向單讀寫端口的轉換。此模塊內部包含4個FIFO,用于DDR3讀寫雙通道的數據臨時緩存。DDR3控制器由IP核MIG生成,能完成對DDR3寫入數據和讀出數據的操作,是DDR3的主要控制器,但其僅有一套非獨立讀寫通道。DDR3高速數據緩存器屬于外部硬件器件,可實現(xiàn)數據存儲功能。整個系統(tǒng)硬件設計結構如圖1所示。

圖1 系統(tǒng)硬件設計結構圖Fig.1 Structure of system hardware design
用戶接口包括兩套獨立的讀寫接口port1和port2,可實現(xiàn)用戶數據、用戶配置信息與橋接電路模塊之間的交互。在每套讀寫接口中均有配置端口和數據端口。配置端口包括用戶需要讀(寫)的數據長度,讀(寫)操作的起始地址,讀(寫)命令信號的觸發(fā),讀(寫)操作完成反饋信號;數據端口包括寫入的數據信號,寫入數據有效信號,讀出數據有效信號與讀出的數據信號。port1與port2兩套讀寫接口完全一致,皆包含以上信息。本設計所采用的同步時鐘是由DDR3控制器核輸出的用戶時鐘。該同步時鐘為200 MHz。
2.3.1時分復用狀態(tài)機設計
本文采取時分復用的思想,通過數據切換器,使兩套讀寫接口分時地與DDR3控制器接口相連接。每組讀寫接口負責讀和寫兩種任務。所以,總的狀態(tài)可以分為4種:port1寫數據任務,port1讀數據任務,port2寫數據任務,port2讀數據任務。由用戶接口模塊配置的指令決定執(zhí)行哪些指令。用戶可以同時下達多個指令任務,由時分復用輪循機制輪流執(zhí)行任務,以達到同時讀寫的效果[5]。
為了讓4個任務在執(zhí)行時避免因建立沖突而相互獨立,需要定義4個狀態(tài)。每個狀態(tài)對應執(zhí)行一個任務。狀態(tài)機在空閑狀態(tài)中經過條件判斷結構,確定跳轉到用戶下達的任務狀態(tài);進入任務狀態(tài)后,開始任務執(zhí)行計時;任務計時計滿后,無論該任務是否執(zhí)行完畢,都通過一個額外的結束狀態(tài)跳轉到空閑狀態(tài),以完成循環(huán)。時分復用狀態(tài)機設計如圖2所示。

圖2 時分復用狀態(tài)機設計圖Fig.2 Design of the TDM state machine
圖2中,IDEL為空閑狀態(tài)。在該狀態(tài)中,可實現(xiàn)4種任務命令檢測,并對用戶已下達的多個任務指令進行執(zhí)行順序的劃分。任務執(zhí)行順序的劃分采用了1個2 bit位寬的單向計數器flag來實現(xiàn)。flag值為1,對應port1寫數據任務;flag值為2,對應port1讀數據任務;flag值為3,對應port2寫數據任務;flag值為0,對應port2讀數據任務。規(guī)定flag在任務執(zhí)行計時滿8個時鐘周期之后,不管任務是否完成,都跳轉到空閑狀態(tài),flag自動單向加1。flag的不同值代表著對不同任務指令情況進行檢測。當flag為1時,若檢測到用戶下達過port1寫數據任務,而此時又是在port1寫狀態(tài)中,則執(zhí)行該任務;若沒有檢測到用戶下達過port1寫數據任務,則返回,flag自動單向加1,并進行下一個任務狀態(tài)檢測[6]。
2.3.2實現(xiàn)時間片的劃分
用戶下達的不同指令任務信息會存儲在不同的對應寄存器中。當上電復位時,該寄存器值為0。當用戶發(fā)送讀(寫)指令任務(上升沿脈沖觸發(fā))時,該寄存器值置1,完成任務下達。當任務執(zhí)行一段時間后,如通過地址長度檢測到該任務被執(zhí)行完成,則該命令寄存器被清零,完成任務。
為了實現(xiàn)用戶發(fā)布的指令任務能同時進行,設計中若單個任務耗時長于8個時鐘單位,則該任務不能被一次性執(zhí)行完畢,而是采用任務執(zhí)行計時的機制。通過定義一個任務執(zhí)行時間計數器,無論任務是否執(zhí)行完畢,只要該計數器達到閾值,便立即跳出執(zhí)行狀態(tài)并回到IDEL,flag加1,自動檢測執(zhí)行其他隊列任務。這樣使用輪循的時分復用機制,能滿足同時讀寫的目標。該過程完成了對DDR3執(zhí)行各種任務時間片的切分。設計中所設置的兩組接口讀寫數據任務定時閾值為8個時鐘周期,同步時鐘為200 MHz[7]。
在經過多次循環(huán)后,用戶發(fā)布的所有任務被執(zhí)行完畢。在此過程中,讀寫數據個數計數器對任務中讀寫的數據總量進行計數。系統(tǒng)每讀寫一個數據,則與任務相對應的讀寫數據個數計數器便累加一次。當累計值達到用戶配置的讀寫數據個數(用戶配置讀寫數據長度,通過讀寫數據長度來換算出具體的讀寫數據個數)時,判定本次任務執(zhí)行完畢,從而將該任務對應的寄存器中的任務信號置0。
系統(tǒng)檢測到讀(寫)命令后,即跳轉到相應的狀態(tài)執(zhí)行任務。每個不同的任務狀態(tài)映射為對DDR3控制器讀(寫)操作的不同配置。在進入不同狀態(tài)的同時,對應任務起始地址端口的地址值被寄存在相應的地址寄存器中。4個這樣的地址寄存器通過任務狀態(tài)控制的數據選擇器連接到DDR3控制器的地址端口。在DDR3和對應FIFO準備完畢的前提下,每次對App_wdf_data端口讀(寫)一個數據,地址寄存器便自增8。由于該端口位寬為512 bit,而DDR3存儲單元位寬只有64 bit,即相當于一次存取了8個DDR3單元數據。當地址寄存器計數至用戶配置的地址緩存長度時,讀(寫)數據個數計數器同時記滿,任務執(zhí)行完畢,解除任務指令,任務寄存器有效信號置0。
用戶接口電路中使用了4個FIFO作為數據緩存。待寫入DDR3的數據被緩存在寫數據FIFO中。寫數據FIFO輸入位寬為256 bit,輸出位寬為512 bit,以便與DDR3控制器對接。待讀取的數據被緩存在讀數據FIFO中。讀數據FIFO的輸入位寬為512 bit,輸出位寬為256 bit,以便與用戶接口對接。當讀寫FIFO出現(xiàn)任何讀空或因寫滿而導致其未準備好時,整個系統(tǒng)的任務都將暫停執(zhí)行,直到FIFO恢復正常才可繼續(xù)執(zhí)行。
系統(tǒng)采用Xilinx的SUME開發(fā)板作為實現(xiàn)平臺。FPGA采用Vertex7系列的XC7VX690TFFG1761。在Xilinx的VIVADO集成開發(fā)環(huán)境中,根據以上硬件設計方法,采用VerilogHDL建模實現(xiàn)系統(tǒng)功能。編寫用戶模塊產生數據和控制信息源,通過綜合布局、布線生成比特流文件;然后將比特流文件下載到FPGA板卡上,借助集成在VIVADO中的在線邏輯分析儀工具Debug,實現(xiàn)對測試信號的抓取分析[8]。
經實際上板測試,若同時往port1與port2寫入一定長度的數據:分析Debug工具抓取到的結果,基本實現(xiàn)了同時向DDR3的port1與port2寫入數據,數據和有效信號都能同時從用戶接口模塊送入時分復用橋接電路。但從抓取DDR3核的寫入數據端口可以看到,實際上數據是被輪流寫入port1與port2的,地址在兩個接口間輪流切換,直至寫完用戶規(guī)定的地址長度。同樣地,同時對寫入數據進行讀取,分別從port1里讀取剛才寫入port1的數據,從port2里讀出剛才寫入port2的數據。此時可以看出,雖從總體上是兩個端口同時在讀數據,但實際放大后是分時間片讀數據。port1和port2接口交替讀取,提高了DDR3實際使用效率,沒有閑置狀態(tài)。
為了驗證數據的正確性,定義了一個累加數據源,同時向port1與port2寫入一定大小的數據;分別利用Debug工具抓取用戶接口模塊的寫入數據與DDR3核接口的寫入數據,對比其是否相同,以確定數據是否成功寫入。從板級測試可以確認,在按照規(guī)定時序送入port1與port2的累加數時,從0開始累加,并隨著數據有效信號每次加1,一直寫到規(guī)定長度。因此,從地址對應的數據來看,寫入DDR3數據驗證成功。而在寫入數據完成之后,port_wr_done信號拉高,告知用戶已經準備好讀取數據。用戶接口此時送入讀取指令,在port1和port2中同時讀取剛才寫入的數據。從Debug的信息來看,port1與port2能同時讀取數據,且數據為從0開始依次累加,與寫入數據一致,所以DDR3讀取驗證成功。此外,用戶每次下達任務時都能在DDR3的任意地址范圍內選擇讀、寫數據的地址,比如選擇性讀取幾段而非全部數據,以此來測試本設計的靈活性。板級測試表明,DDR3能按要求靈活選擇寫入或讀出地址,各功能可正常使用。
基于Xilinx公司提供的DDR3 IP核控制器MIG,完成了在DDR3上切割為雙獨立讀寫通道的用戶接口。兩套接口互不干擾,能同時完成讀寫操作[9]。設計了一種時分復用橋接電路,將DDR3 IP核MIG提供的一套控制接口搭建為兩套獨立的用戶讀寫接口,通過數據切換器使兩套用戶讀寫接口按時間片分時與DDR3控制器接口相連。通過Virtex-7 XC7V690T板級測試,證明了該DDR3雙讀寫通道控制器能高速、穩(wěn)定、有效地工作,能滿足用戶同時進行兩套接口的讀寫操作;用戶接口操作時鐘達到200 MHz,DDR3內部數據存儲時鐘達到800 MHz。此雙通道DDR3緩存器適用于各種需要大量高速緩存數據的系統(tǒng)的研發(fā)工作,突破了傳統(tǒng)DDR3僅有一套非獨立讀寫接口的局限,提高了DDR3的靈活性與工作效率。
參考文獻:
[1] 唐瑞,姚遠程,秦明偉.高速圖像模擬源的研究與實現(xiàn)[J].自動化儀表,2017,38(8):40-44.
[2] 嚴振杰,俞磊,周鵬成.AP1000無線通信系統(tǒng)電磁兼容性試驗設計[J].自動化儀表,2017,38(2):82-85.
[3] 董旭明,李志斌.計算機視覺在并聯(lián)機器人運動學標定中的應用[J].自動化儀表,2016,37(5):16-19.
[4] WANG B P,DU J S,BI X.High bandwidth memory interface design based on DDR3 SDRAM and FPGA[C]//International Soc Design Conference,Gyeongju,2016.
[5] 高勝.高速采樣數據存儲控制器的設計與實現(xiàn)[D].成都:電子科技大學,2016.
[6] ANIL L,SIDDHARTH V,MICHAEL P.A Case Study:Power measurement and optimization of DDR3 DIMM in servers[C]//2015 IEEE Electrical Design of Advanced Packaging and Systems Symposium,Bangalore,2015.
[7] HITESH S,MERVIN J,DAVID S.DDR3 Interconnect optimization-signal integrity and timing analysis perspective[C]//2015 International Conference on Control,Electronics,Renewable Energy and Communications,Bandung,2015.
[8] 畢然.基于DDR3的CMOS高速圖像采集系統(tǒng)的FPGA設計與實現(xiàn)[D].哈爾濱: 哈爾濱理工大學,2015.
[9] JANESKV J,RIZZO N D,HOUSSAMEDDINE D.Device performance in a fully functional 800MHz DDR3 spin torque magnetic random access memory[C]//Memory Workshop (IMW),2015 5th IEEE International,Taipei,2015.