基于FPGA的DDR3 SDRAM控制器用戶接口設(shè)計(jì)
摘要:為了滿足高速圖像數(shù)據(jù)采集系統(tǒng)中對(duì)高帶寬和大容量的要求,利用Virtex-7 系列FPGA 外接DDR3 SDRAM 的設(shè)計(jì)方法,提出了一種基于Verilog-HDL 語言的DDR3 SDRAM 控制器用戶接口設(shè)計(jì)方案。該控制器用戶接口已經(jīng)在Xilinx 公司的VC707 開發(fā)板上通過了功能驗(yàn)證,并成功的被應(yīng)用到高速圖像數(shù)據(jù)采集系統(tǒng)中。含有該用戶接口的控制器具有比一般的控制器接口帶寬利用率高、可移植性強(qiáng)和成本低的優(yōu)點(diǎn),可以根據(jù)設(shè)計(jì)人員的需要被靈活地應(yīng)用到不同的工程。
本文引用地址:http://m.butianyuan.cn/article/201807/383565.htm隨著現(xiàn)代科學(xué)技術(shù)的高速發(fā)展,在工業(yè)生產(chǎn)和科學(xué)研究上,如衛(wèi)星通信、高速圖像處理等領(lǐng)域,普遍存在對(duì)數(shù)據(jù)進(jìn)行高速大容量、實(shí)時(shí)性強(qiáng)和高帶寬的處理要求[1,2]。高速數(shù)據(jù)采集系統(tǒng)作為各個(gè)系統(tǒng)中比較核心的部分,對(duì)數(shù)據(jù)處理的速度、實(shí)時(shí)性、穩(wěn)定性以及功耗等要求都越來越高。
目前,在能夠同時(shí)滿足高帶寬和大容量要求的存儲(chǔ)器方案中,比較成熟的有DDR,DDR2,DDR3等,其中DDR3 具有更高的帶寬和更低的功耗,因此成為高速實(shí)時(shí)數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)中的首選方案[3]。由于DDR3 內(nèi)存不能夠直接識(shí)別處理器的訪問請(qǐng)求,所以有必要通過設(shè)計(jì)一款控制器去控制DDR3的正常讀寫操作。
Virtex-7 系列FPGA 與Virtex-6 系列FPGA 相比,系統(tǒng)性能提高了一倍,功耗降低了一半,存儲(chǔ)器帶寬提升了2 倍,并且內(nèi)有獨(dú)特的IP核mig_v1. 7,可用來解決使用DDR3 存儲(chǔ)器時(shí)的一些復(fù)雜問題。因此本文在介紹DDR3 的工作原理的基礎(chǔ)上,結(jié)合IP 核MIG_v1. 7,給出了一種利用Verilog-HDL 語言設(shè)計(jì)DDR3-SDRAM 控制器用戶接口的方法,并且提出了一種在高速圖像數(shù)據(jù)采集系統(tǒng)中DDR3 存儲(chǔ)器的應(yīng)用方案,同時(shí)在Virtex-7 系列的FPGA 上實(shí)現(xiàn)。
1 DDR3-SDRAM 的技術(shù)特點(diǎn)
本文采用的DDR3-SDRAM 為Micron 公司的MT8JTF12864HZ-1G6G1 內(nèi)存條。該DDR3 內(nèi)存條的存儲(chǔ)空間為1 GB,由8 片容量為128 MB 的內(nèi)存芯片構(gòu)成。每個(gè)芯片的數(shù)據(jù)位寬為8 位,行地址線復(fù)用14 根,列地址線復(fù)用10 根,Bank 數(shù)量為8 個(gè),因此每個(gè)內(nèi)存芯片的容量為16 384 mes; 1 024 mes; 8 mes; 8,即128 MB。8 片組成在一起就構(gòu)成了MT8JTF12864HZ-1G6G1 的64 位數(shù)據(jù)位寬,容量為1 GB。
DDR3 的控制命令信號(hào)主要有芯片選擇信號(hào)CS、行地址選擇信號(hào)RAS、列地址選擇信號(hào)CAS 和WE 寫使能信號(hào),DDR3 的各種操作指令實(shí)質(zhì)上都是通過這四個(gè)信號(hào)的組合決定的,如表1 所示。其中H 表示高電平,L 表示低電平。
表1 DDR3-SDRAM 的操作指令
DDR3 的Mode Register 有四個(gè),分別為MR0、MR1、MR2 和MR3,當(dāng)四個(gè)控制命令信號(hào)均為低電平時(shí),即可通過Bank 選擇位對(duì)模式寄存器進(jìn)行選擇; Refresh 操作分為Auto Refresh 與Self Refresh 兩種,其中不論是何種Refresh 方式,都不需要外部提供行地址信息,因?yàn)檫@是一個(gè)內(nèi)部的自動(dòng)操作;DDR3 在進(jìn)行讀寫操作時(shí),內(nèi)存會(huì)給出一個(gè)與數(shù)據(jù)同步的DQS 信號(hào),用來在一個(gè)時(shí)鐘周期內(nèi)準(zhǔn)確地區(qū)分出每個(gè)傳輸周期,提高了接收方接收數(shù)據(jù)的準(zhǔn)確度。
與上一代存儲(chǔ)器件相比,DDR3 的內(nèi)存模式有了很大的改進(jìn): 邏輯Bank 數(shù)量由DDR2 的4 個(gè)增加為8 個(gè); 突發(fā)長度增加為8 bit,任何突發(fā)中斷操作都將在DDR3 內(nèi)存中予以禁止,且不予支持; 取而代之的是更為靈活的突發(fā)傳輸控制; 其核心工作電壓由DDR2 的1. 8 V 降至1. 5 V[4],能夠在達(dá)到高帶寬的同時(shí),大幅度的降低其功耗; DDR3 采用FLY_BY 總線,參考電壓分離,增加了ZQ 校準(zhǔn)功能,從而大大的提高了存儲(chǔ)信號(hào)的完整性; 并且DDR3 為綠色封裝,不含任何有害物質(zhì),減少了對(duì)空氣的污染。
2 DDR3-SDRAM控制器用戶接口的設(shè)計(jì)
DDR3 控制器的設(shè)計(jì)采用了Xilinx 推出的IP 核MIG_v1. 7 + 用戶接口模塊的設(shè)計(jì)方法,其中本次設(shè)計(jì)主要是對(duì)用戶接口模塊進(jìn)行闡述。圖1 為DDR3控制器的總體實(shí)現(xiàn)方案。
圖1 DDR3 控制器的總體實(shí)現(xiàn)方案
2. 1 用戶接口模塊的設(shè)計(jì)
用戶接口模塊為整個(gè)DDR3 控制器系統(tǒng)的核心模塊,其中主要包括寫數(shù)據(jù)通路和讀數(shù)據(jù)通路兩個(gè)部分,圖2 為DDR3 控制器的用戶接口設(shè)計(jì)的實(shí)現(xiàn)方案。
圖2 DDR3 控制器的用戶接口設(shè)計(jì)
在寫數(shù)據(jù)通路的輸入端,addr _ rdy、wr _ rdy 和init_done 為DDR3 IP 核反饋給寫數(shù)據(jù)控制模塊的信號(hào), init_done 為高電平時(shí)指DDR3 已經(jīng)完成初始化操作,addr_rdy 為高電平時(shí)表示DDR3 準(zhǔn)備好接收寫數(shù)據(jù)地址和寫數(shù)據(jù)命令,wr_rdy 為高電平時(shí)表示DDR3 準(zhǔn)備好接收寫數(shù)據(jù); wr_cmd 為寫數(shù)據(jù)命令信號(hào)。在寫數(shù)據(jù)通路的輸出端,cmd_en 為輸入到DDR3 IP 核的命令和地址的使能信號(hào),wr_en 和wr_end 為輸入到DDR3 IP 核的寫數(shù)據(jù)控制信號(hào),跟有效寫數(shù)據(jù)信號(hào)對(duì)齊。
在用戶接口的設(shè)計(jì)中采用back_to_back 的讀寫設(shè)計(jì)模式,將addr_rdy、cmd_en、cmd 和addr 作為地址總線,將wr_rdy、wr_en、wr_end 和wr_data 作為數(shù)據(jù)總線,兩條總線是相互獨(dú)立的,兩個(gè)反饋信號(hào)addr_rdy 和wr_rdy 也是相對(duì)獨(dú)立的。在寫數(shù)據(jù)開始的時(shí)候,要保證地址總線提前數(shù)據(jù)總線一個(gè)周期使能,在addr_rdy 和wr_rdy 沒有反壓的理想情況下,寫數(shù)據(jù)要比寫地址和寫命令推遲一個(gè)周期發(fā)出,當(dāng)addr_rdy 和wr_rdy 有反壓時(shí),寫數(shù)據(jù)和寫地址可以不滿足相差一個(gè)周期被發(fā)出的。
讀數(shù)據(jù)通路與寫數(shù)據(jù)通路的設(shè)計(jì)原理相似,其中rd_valid 為讀數(shù)據(jù)有效信號(hào), rd_data 為讀數(shù)據(jù)信號(hào)。在讀數(shù)據(jù)通路中將addr_rdy、cmd_en、cmd 和addr 作為地址總線,rd_valid 和rd_data 作為讀數(shù)據(jù)總線。
2. 2 用戶接口的時(shí)鐘模塊設(shè)計(jì)
從外界輸入200 MHz 的延遲參考時(shí)鐘、200MHz 的差分輸入時(shí)鐘,這些輸入信號(hào)經(jīng)過時(shí)鐘和系統(tǒng)復(fù)位模塊后能夠生成整個(gè)DDR3 控制器和DDR3工作的全部時(shí)鐘,包括用戶接口的工作時(shí)鐘、DDR3 IP 核的工作時(shí)鐘和DDR3 讀寫數(shù)據(jù)的時(shí)鐘等。這種設(shè)計(jì)方法,具有簡化控制器的設(shè)計(jì)結(jié)構(gòu),便于對(duì)時(shí)鐘進(jìn)行管理的優(yōu)點(diǎn)[5]。圖3 為時(shí)鐘模塊的實(shí)現(xiàn)模型。
圖3 時(shí)鐘和系統(tǒng)復(fù)位模塊
3 DDR3-SDRAM控制器用戶接口的仿真
DDR3-SDRAM 的工作必須按照一定的規(guī)則進(jìn)行,必須符合相應(yīng)的狀態(tài)機(jī)轉(zhuǎn)換要求,圖4 給出了DDR3 存儲(chǔ)器工作的狀態(tài)機(jī),該狀態(tài)機(jī)描述了DDR3各個(gè)狀態(tài)的轉(zhuǎn)換以及轉(zhuǎn)換時(shí)所涉及的一些命令。DDR3 控制器的設(shè)計(jì)實(shí)質(zhì)上是圍繞著該狀態(tài)機(jī)的進(jìn)行設(shè)計(jì)的,以確保內(nèi)存模塊上的每個(gè)DDR3 都能正常的進(jìn)行工作。
圖4 DDR3 存儲(chǔ)器的狀態(tài)機(jī)
3. 1 用戶接口設(shè)計(jì)模塊的Chipscope 仿真結(jié)果分析
在本次設(shè)計(jì)中,硬件仿真采用將含有此用戶接口模塊的控制器下載到Virtex-7 系列FPGA 上,通過Chipscope 在線實(shí)時(shí)地觀察用戶接口內(nèi)部的信號(hào)。和圖6 中addr 每隔一個(gè)時(shí)鐘周期加1 的現(xiàn)象。
3. 2 用戶接口設(shè)計(jì)模塊的Modelsim 仿真結(jié)果分析
在本次設(shè)計(jì)中,軟件仿真采用ISE 14. 3 與Modelsim10.0a 相結(jié)合的方法。
圖5 為在理想情況下,用戶接口的輸入信號(hào)addr_rdy 和wr_rdy 在無反壓時(shí)候的內(nèi)部信號(hào)觀測圖,在此狀態(tài)下,cmd_en 比wr_en 和wr_end 提前一個(gè)周期被拉高,有效地址與相應(yīng)的有效數(shù)據(jù)之間一直保持著一個(gè)周期的時(shí)間延遲。圖6 為用戶接口在addr_rdy 和wr_rdy 信號(hào)有反壓情況下的內(nèi)部信號(hào)觀測圖,在此狀態(tài)下,初始時(shí)刻cmd_en 比wr_en 和wr_end 提前一個(gè)周期被拉高,有效地址與相應(yīng)的有效數(shù)據(jù)之間相差一個(gè)周期的時(shí)間延遲,但是隨著addr_rdy 和wr_rdy 被拉低之后,有效地址與相應(yīng)的有效數(shù)據(jù)之間不再滿足相差一個(gè)周期的時(shí)間延遲。因?yàn)樵诒敬卧O(shè)計(jì)中采用的是back-to-back 模式,地址總線與數(shù)據(jù)總線相互獨(dú)立,所以即使有效地址與相應(yīng)的有效數(shù)據(jù)之間不再滿足相差一個(gè)周期的時(shí)間延遲,也不會(huì)影響數(shù)據(jù)的傳輸。在此模式下,數(shù)據(jù)與地址的傳輸比較靈活,控制起來比較方便,也有效的避免了數(shù)據(jù)的丟失。
圖5 addr_rdy 信號(hào)和wr_rdy 信號(hào)無反壓的內(nèi)部信號(hào)觀測圖
圖6 addr_rdy 信號(hào)和wr_rdy 信號(hào)有反壓的內(nèi)部信號(hào)觀測圖
圖7 寫數(shù)據(jù)的Modelsim 仿真圖
由于DDR3 采用的突發(fā)傳輸長度BL = 8,讀寫地址值以8 為單位連續(xù)增加,這樣addr 的低3 位將一直為0,所以在利用Chipscope 對(duì)地址進(jìn)行觀測時(shí),是從addr 的第4 位開始觀測的,即出現(xiàn)圖5。
由于此次設(shè)計(jì)采用的內(nèi)存核心頻率為200MHz,又因?yàn)椴捎玫腄DR3 的內(nèi)存總線位數(shù)為64位,DDR3 一次可以預(yù)讀取8 位,根據(jù)內(nèi)存帶寬= 內(nèi)存核心頻率mes; 內(nèi)存總線位數(shù)× 倍增系數(shù),所以在不考慮刷新和激活等操作所占用的帶寬下,DDR3 的內(nèi)存帶寬可以達(dá)到12. 5 GB,傳輸速率可達(dá)到1 600MB /s。在如此快的傳輸速率下,利用Chipscope 難以觀測由DDR3 控制器寫入到DDR3 內(nèi)部的數(shù)據(jù)。所以在本次設(shè)計(jì)中,采用在ISE14. 3 里面對(duì)DDR3控制器的工程添加DDR3 模型,利用Modelsim 對(duì)DDR3 控制器和DDR3 模型進(jìn)行聯(lián)合仿真的方法對(duì)由控制器寫入到DDR3 內(nèi)部的數(shù)據(jù)進(jìn)行觀測。
從圖7 中可以看出,在一個(gè)時(shí)鐘周期內(nèi)dq 的同步信號(hào)qds_n 和dqs_p 變化了8 次,也就是說,在一個(gè)時(shí)鐘周期內(nèi)寫數(shù)據(jù)以64 bit 為單位被寫入了8次。由用戶接口傳輸過來的數(shù)據(jù)經(jīng)過DDR3 IP 核之后,能夠準(zhǔn)確的被寫入到DDR3 里面。當(dāng)進(jìn)行讀數(shù)據(jù)的時(shí)候,也是以64 bit 為單位,在一個(gè)時(shí)鐘周期內(nèi)讀8 個(gè)64 bit 的數(shù)據(jù)。
3. 3 DDR3 控制器用戶接口在高速圖像數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
含有該用戶接口的DDR3 控制器已經(jīng)成功的被應(yīng)用到某高速圖像數(shù)據(jù)采集系統(tǒng)中,圖8 為該高速圖像數(shù)據(jù)采集系統(tǒng)采集到的圖片。
圖8 高速圖像數(shù)據(jù)采集結(jié)果圖
該圖像采集系統(tǒng)設(shè)置CMOS 相機(jī)工作在采用8bit 位寬的雙通道模式下,幀頻為250 幀/s,其分辨率為2 040 × 1 024。采集系統(tǒng)將接收到的圖像數(shù)據(jù)經(jīng)過DDR3 緩存之后,通過千兆以太網(wǎng)接口傳輸至PC 機(jī),再將寫入PC 機(jī)內(nèi)的數(shù)據(jù)以圖片的形式顯示出來。圖8 為采集系統(tǒng)連續(xù)采集到的兩幀圖片,從圖中可以看出兩幀圖片的時(shí)間間隔為4 ms,滿足幀數(shù)要求,并且圖像清晰完整,達(dá)到了預(yù)期的標(biāo)準(zhǔn)。
4 結(jié)論
本次設(shè)計(jì)的硬件平臺(tái)為Xilinx 公司的Virtex-7 FPGA VC707 評(píng)估套件。7 系列的FPGA 具有比6系列和5 系列的FPGA 尺寸小、成本低、高性價(jià)比和大容量以及超高端連接帶寬等優(yōu)點(diǎn)。
該內(nèi)存控制器的用戶接口設(shè)計(jì)能夠?qū)DR3 內(nèi)存模塊進(jìn)行很好的管理,同時(shí)完成用戶發(fā)送的各種請(qǐng)求,并且最大限度的提高了訪問內(nèi)存的速度和帶寬,避免了數(shù)據(jù)的丟失,并成功的應(yīng)用到某高速圖像采集系統(tǒng)中。在此用戶接口的基礎(chǔ)上設(shè)計(jì)的內(nèi)存控制器能夠與市場上大多數(shù)主流內(nèi)存進(jìn)行兼容,可移植性強(qiáng),大大降低了開發(fā)成本。
評(píng)論