仵宗欽,王曉曼,劉 鵬,王 奇,張立媛
(1.長(zhǎng)春理工大學(xué)電子信息工程學(xué)院,長(zhǎng)春 130022;2.長(zhǎng)春理工大學(xué)空地激光通信技術(shù)國(guó)防重點(diǎn)學(xué)科實(shí)驗(yàn)室,長(zhǎng)春 130022)
在很多圖像處理系統(tǒng)中,不同模塊的工作頻率往往不同,比如系統(tǒng)前端圖像數(shù)據(jù)流要比后端圖像處理的工作頻率低,系統(tǒng)既要保證數(shù)據(jù)流源源不斷地輸入系統(tǒng)中,還要保證數(shù)據(jù)流完整地被后端處理模塊處理,為此,不同工作頻率模塊之間必須加入數(shù)據(jù)緩沖模塊,以達(dá)到速度匹配的目的。
目前數(shù)據(jù)緩沖的存儲(chǔ)體有各種種類,SDRAM是一種動(dòng)態(tài)隨機(jī)存儲(chǔ)器,它具有價(jià)格低廉、存儲(chǔ)容量大、工作頻率高等特點(diǎn)[1]。在眾多緩沖存儲(chǔ)體中是一個(gè)不錯(cuò)的選擇,尤其在圖像處理領(lǐng)域,但是SDRAM不像SRAM的控制那么簡(jiǎn)單,它的控制邏輯比較復(fù)雜,對(duì)時(shí)序的要求比較嚴(yán)格,因此有必要設(shè)計(jì)一個(gè)專門的SDRAM控制器,本文以FPGA為控制核心,利用其靈活性、并行性的特點(diǎn),設(shè)計(jì)了優(yōu)化的SDRAM控制器,使用戶能夠進(jìn)行簡(jiǎn)單的移植使用,提高通用性。
SDRAM控制器系統(tǒng)原理如圖1所示。系統(tǒng)包括時(shí)鐘管理器模塊、數(shù)據(jù)流模塊、SDRAM控制器模塊、外部SDRAM芯片。
圖1 SDRAM控制器系統(tǒng)原理圖
系統(tǒng)的工作過程為:外部系統(tǒng)采集到的數(shù)據(jù)流源源不斷地送到SDRAM控制器,SDRAM控制器中的時(shí)序控制、命令解析以及數(shù)據(jù)通路相互配合,通過系統(tǒng)控制接口完成對(duì)外部SDRAM芯片的控制[2],使得數(shù)據(jù)流完整地被緩存到SDRAM芯片中。數(shù)據(jù)流模塊的時(shí)鐘頻率工作在25 MHz,SDRAM控制器和外部SDRAM芯片的時(shí)鐘頻率工作在100 MHz,系統(tǒng)采用ALTERA公司生產(chǎn)的CYCLONE Ⅲ系列芯片EP3C5E144C8作為SDRAM緩存的控制和處理核心[3],該芯片內(nèi)部含有豐富的資源,通過內(nèi)部鎖相環(huán)PLL來產(chǎn)生不同的時(shí)鐘頻率,供各個(gè)模塊工作。
在控制器系統(tǒng)中時(shí)序控制部分是SDRAM控制器的核心,上電首先進(jìn)行初始化,主要完成芯片的準(zhǔn)備工作,包括輸入穩(wěn)定器、預(yù)充電、刷新周期和模式寄存器的設(shè)置;時(shí)序控制在不同的狀態(tài)需要發(fā)出命令請(qǐng)求信號(hào)cmd_req給命令解析模塊,解析模塊響應(yīng)命令后給時(shí)序控制模塊發(fā)送一個(gè)響應(yīng)信號(hào)cmd_ack;另外SDRAM需要不停地進(jìn)行刷新才能保持?jǐn)?shù)據(jù)不丟失,刷新周期最大不超過64 ms,因此時(shí)序控制模塊需要隔一定的時(shí)間發(fā)送刷新請(qǐng)求信號(hào)ref_req,同樣命令解析模塊響應(yīng)刷新請(qǐng)求后反饋回一個(gè)響應(yīng)信號(hào)ref_ack。
在SDRAM內(nèi)部集成了邏輯控制單元,通過模式寄存器的設(shè)置來控制。每次上電芯片首先對(duì)這個(gè)邏輯控制進(jìn)行初始化,初始化的過程如圖2所示。
圖2 SDRAM上電初始化過程
在初始化過程中最關(guān)鍵的是模式寄存器的設(shè)置,它用來指定SDRAM的工作方式,包括突發(fā)方式、潛伏期和突發(fā)長(zhǎng)度等。突發(fā)(Burst)是指在同一行中相鄰的存儲(chǔ)單元連續(xù)進(jìn)行數(shù)據(jù)傳輸?shù)姆绞?,連續(xù)傳輸所涉及到存儲(chǔ)單元(列)的數(shù)量就是突發(fā)長(zhǎng)度,潛伏期是指在發(fā)出行地址和列地址后仍要經(jīng)過一定的時(shí)間才能有數(shù)據(jù)輸出,從列地址有效與讀取命令發(fā)出到第一筆數(shù)據(jù)輸出的這段時(shí)間,被定義為CL(CAS Latency,CAS潛伏期),模式寄存器的設(shè)置通過A11~A10地址線進(jìn)行配置,其配置參數(shù)如圖3所示。
潛伏期只發(fā)生在讀數(shù)據(jù)的時(shí)候,發(fā)送讀取命令之后,數(shù)據(jù)不是立即出現(xiàn)在數(shù)據(jù)總線上,而是經(jīng)過一定的周期才出現(xiàn)在數(shù)據(jù)總線上,這個(gè)周期就是我們說的潛伏期CL[4,5],潛伏期只發(fā)生在讀取數(shù)據(jù)時(shí),在寫數(shù)據(jù)時(shí)無潛伏期CL,因此又稱讀取潛伏期,大小為時(shí)鐘周期的倍數(shù)。在讀取數(shù)據(jù)時(shí)為了提高讀取速度,芯片內(nèi)部設(shè)計(jì)了突發(fā)讀寫設(shè)置,突發(fā)讀寫只需指定突發(fā)長(zhǎng)度和起始列地址,尋址與數(shù)據(jù)的讀寫自動(dòng)進(jìn)行,只要控制好兩段突發(fā)讀寫命令的時(shí)間間隔即可做到連續(xù)的突發(fā)傳輸。而突發(fā)的長(zhǎng)度不是任意值,對(duì)應(yīng)圖像數(shù)據(jù)的緩存,我們一般把突發(fā)長(zhǎng)度設(shè)為全頁,以幀來進(jìn)行緩存。
圖3 模式寄存器配置參數(shù)
系統(tǒng)采用美國(guó)鎂光公司生產(chǎn)的SDRAM芯片MT48LC8M8A2TG,芯片主要分為3類信號(hào):數(shù)據(jù)信號(hào)、地址信號(hào)和控制信號(hào)。數(shù)據(jù)信號(hào)線為DQ15~DQ0,是雙向數(shù)據(jù)信號(hào),可配置輸出4位、8位、16位數(shù)據(jù),輸出數(shù)據(jù)是否有效由數(shù)據(jù)掩碼DQM控制;地址信號(hào)線分為行地址和列地址,它們分時(shí)復(fù)用一組地址總線,由A11~A0組成,讀寫操作時(shí),首先發(fā)送行地址有效,行地址為A11~A0,再發(fā)送列地址有效,列地址為A8~A0,另外2位L-BANK用于選擇不同的邏輯塊,共分4塊存儲(chǔ)容量相等的邏輯塊;控制信號(hào)是SDRAM的關(guān)鍵信號(hào),包括時(shí)鐘使能信號(hào)cke,芯片片選信號(hào)cs,行地址選通信號(hào)ras,列地址選通信號(hào)cas,寫允許信號(hào)we。常用操作指令見表1(表中H表示高電平,L表示低電平,X表示高低電平均沒影響)。
表1 SDRAM常用操作指令
時(shí)序控制部分使SDRAM按照一定的時(shí)序工作,主要包括SDRAM的初始化、讀寫控制和自動(dòng)刷新。為便于時(shí)序的控制,采用有限狀態(tài)機(jī)[6,7],如圖4所示。
需要注意的是在進(jìn)行讀寫操作之后必須進(jìn)行預(yù)充電,預(yù)充電的本質(zhì)是對(duì)所有存儲(chǔ)體進(jìn)行數(shù)據(jù)的重寫并復(fù)位行地址,對(duì)于那些長(zhǎng)時(shí)間沒有工作過的存儲(chǔ)體也要進(jìn)行預(yù)充電,以免因具有存儲(chǔ)作用的電容受干擾而影響實(shí)際值,預(yù)充電可通過輔助設(shè)置讓芯片每次進(jìn)行讀寫操作之后自動(dòng)進(jìn)入預(yù)充電狀態(tài),也可以通過專有命令來控制。
數(shù)據(jù)的讀寫遵循嚴(yán)格的時(shí)序,控制器的工作時(shí)鐘和SDRAM芯片的工作時(shí)鐘都為100 MHz,為了保證SDRAM在上升沿能穩(wěn)定地鎖存數(shù)據(jù),通常SDRAM芯片要進(jìn)行一定的相移(相對(duì)控制器的工作時(shí)鐘),使SDRAM在鎖存數(shù)據(jù)時(shí)有充分的采用余量和保持余量,本系統(tǒng)的時(shí)鐘周期為10 ns,相移設(shè)為3 ns。下面介紹突發(fā)讀寫的控制過程,突發(fā)讀寫狀態(tài)機(jī)如圖5所示。
圖4 SDRAM控制器狀態(tài)機(jī)圖
圖5 SDRAM突發(fā)讀寫狀態(tài)機(jī)圖
突發(fā)寫:首先選通行,使之處于有效狀態(tài),在這之前要進(jìn)行L-BANK選定和片選有效,也可和行選通同時(shí)操作,行地址12位,共有4096個(gè)行地址(212=4096);行選通之后有一個(gè)等待時(shí)間t[8,9],
RCD稱為行選通周期,為時(shí)鐘周期的倍數(shù),具體時(shí)間以實(shí)際芯片而定;確定了行地址,下一狀態(tài)就要選通列地址,列地址和行地址共用一組地址總線,此時(shí)設(shè)置A10=1,讀寫結(jié)束后則自動(dòng)進(jìn)入預(yù)充電狀態(tài);發(fā)出寫命令后無須等待,立即進(jìn)入突發(fā)寫模式,系統(tǒng)為頁突發(fā),一次讀寫512字節(jié)數(shù),在全頁寫滿時(shí),必須發(fā)出一個(gè)突發(fā)傳輸終止命令以結(jié)束寫操作,若不是頁突發(fā),可不發(fā)突發(fā)傳輸終止命令;最后進(jìn)行的就是寫回操作和預(yù)充電,寫回操作是為了讓數(shù)據(jù)能可靠地寫入,預(yù)充電是防止所有數(shù)據(jù)丟失。
突發(fā)讀操作和突發(fā)寫操作過程基本相同,不同的是在發(fā)出讀取命令后,數(shù)據(jù)并不是立即出現(xiàn)在數(shù)據(jù)總線上,需要經(jīng)過一個(gè)潛伏期后數(shù)據(jù)才能出現(xiàn)在數(shù)據(jù)總線上。另外,在讀寫過程中有不需要讀寫的數(shù)據(jù)可以通過DQM的設(shè)置進(jìn)行屏蔽。
SDRAM是一種動(dòng)態(tài)隨機(jī)存儲(chǔ)器,它需要不斷地刷新才能保持?jǐn)?shù)據(jù)的不丟失。刷新和預(yù)充電不同,預(yù)充電是不定期地對(duì)L-BANK中的行操作,而刷新有固定的周期,是對(duì)所有行刷新操作,來保證很久沒有重寫的存儲(chǔ)體中的數(shù)據(jù)完整。刷新分為自動(dòng)刷新和自刷新,自刷新主要用于低功耗模式下,無論哪種刷新,都是自動(dòng)的操作,無需外接操作。刷新周期是一定的,時(shí)間不能太長(zhǎng),目前,刷新周期公認(rèn)不超過64 ms。
要想SDRAM能穩(wěn)定地讀寫數(shù)據(jù),SDRAM的管腳信號(hào)必須滿足建立和保持時(shí)間。同樣從SDRAM進(jìn)入FPGA的數(shù)據(jù)信號(hào)也必須滿足FPGA的建立保持時(shí)間。時(shí)序分析模型如圖6所示。
圖6 SDRAM時(shí)序分析模型
結(jié)合技術(shù)手冊(cè)和PCB走線延時(shí),可以計(jì)算出建立和保持余量的最小值,通過調(diào)節(jié)鎖相環(huán)PLL輸出的SDRAM時(shí)鐘相移來達(dá)到充足的余量值,以保障讀寫SDRAM數(shù)據(jù)的準(zhǔn)確性。
本文采用Altera公司的CYCLONE Ⅲ系列芯片EP3C25Q240C8作為SDRAM控制器的主控核心,使用Altera公司的FPGA集成開發(fā)環(huán)境Quartus Ⅱ作為本系統(tǒng)的開發(fā)環(huán)境,該開發(fā)環(huán)境自帶仿真功能和在線邏輯分析儀,仿真驗(yàn)證時(shí)序的控制是否正確,在線邏輯分析儀觀察的是程序下載到芯片后芯片的實(shí)際工作狀態(tài),可驗(yàn)證所設(shè)計(jì)的系統(tǒng)是否真正可靠和穩(wěn)定。實(shí)驗(yàn)中SDRAM工作在頁突發(fā)模式下[10],一次寫入512個(gè)字節(jié),接著對(duì)寫入的數(shù)據(jù)進(jìn)行連續(xù)的讀操作,通過寫入與讀出的時(shí)間是否一致來驗(yàn)證設(shè)計(jì)的正確性,SDRAM仿真時(shí)序圖如圖7所示。
從圖7可以看出系統(tǒng)完成初始化后接著發(fā)送行選通命令,3個(gè)行選通周期后發(fā)送寫命令,同時(shí)數(shù)據(jù)總線上出現(xiàn)要寫的數(shù)據(jù)0~511。從圖中可以看出時(shí)序完全正確,為進(jìn)一步分析數(shù)據(jù)是否真正寫入SDRAM,系統(tǒng)利用在線邏輯分析儀采樣得到的圖形如圖8所示。
從圖8可以看出系統(tǒng)發(fā)出讀取命令后,經(jīng)過潛伏期,數(shù)據(jù)從SDRAM中讀出到數(shù)據(jù)總線上,讀出的數(shù)據(jù)為0~511,結(jié)合圖7可以看出,讀出的數(shù)據(jù)與寫入的數(shù)據(jù)完全一致,驗(yàn)證了系統(tǒng)設(shè)計(jì)完全正確。
圖7 SDRAM仿真時(shí)序圖
圖8 SDRAM在線邏輯分析儀采樣圖形
整個(gè)系統(tǒng)采用分模塊化的思想,把復(fù)雜的SDRAM控制時(shí)序分成不同的模塊進(jìn)行控制,各個(gè)模塊分工明確,相互聯(lián)系,優(yōu)化了SDRAM控制器的設(shè)計(jì)。本文介紹了SDRAM的初始化、基本內(nèi)部操作、工作時(shí)序、讀寫控制邏輯及自動(dòng)刷新,并給出了相應(yīng)模塊需要注意的地方,充分利用了QuartusⅡ自動(dòng)的仿真功能和在線邏輯分析儀,驗(yàn)證了本系統(tǒng)設(shè)計(jì)的正確性。該控制器提高了系統(tǒng)的靈活性,通用性強(qiáng),可應(yīng)用于不同的高性能系統(tǒng)中。
[1] 項(xiàng)力領(lǐng),劉智,楊陽,胡智慧.單片SDRAM的數(shù)據(jù)讀寫乒乓操作設(shè)計(jì)[J].長(zhǎng)春理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,05∶140-143.
[2] 陳雨,陳科,安濤. 高速圖像處理系統(tǒng)中DDR2-SDRAM接口的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,12∶104-107,110.
[3] ALTERA CORPORATION. Cyclone Device Handbook[EB/OL]. (2008-08-28). [2013-03-15]. http∶//www.altera.com/
[4] SDRAM性能標(biāo)準(zhǔn)[J].電子科技,2001, 06∶45.
[5] 孟曉東.基于FPGA的DDR3控制器設(shè)計(jì)與驗(yàn)證[D].國(guó)防科學(xué)技術(shù)大學(xué),2012.
[6] 劉小平,何云斌,董懷國(guó).基于VerilogHDL的有限狀態(tài)機(jī)設(shè)計(jì)與描述[J].計(jì)算機(jī)工程與設(shè)計(jì),2008, 04∶958-960.
[7] 衛(wèi)一然,甄國(guó)涌,單彥虎. FPGA設(shè)計(jì)中狀態(tài)機(jī)穩(wěn)定問題的研究[J].電視技術(shù),2012, 23∶47-49.
[8] 石振明,王成,陳蜀宇. 基于FPGA的DDR SDRAM控制器設(shè)計(jì)[J]. 微處理機(jī),2008, 06∶22-24.
[9] 楊海濤,蘇濤,巫幪.基于FPGA的SDRAM控制器的設(shè)計(jì)和實(shí)現(xiàn)[J]. 電子科技,2007, 01∶8-12.
[10] 徐永剛.基于FPGA與DDR2-SDRAM的高速數(shù)據(jù)緩沖器的設(shè)計(jì)與實(shí)現(xiàn)[D]. 南京郵電大學(xué),2012.