周 亮, 王 娟, 胡暢華, 楊明武, 高挺挺
(合肥工業(yè)大學(xué)電子科學(xué)與應(yīng)用物理學(xué)院,安徽合肥 230009)
隨著處理器性能的不斷提高,半導(dǎo)體技術(shù)與超大規(guī)模集成電路的飛速發(fā)展,越來(lái)越多的應(yīng)用將需要更大容量、更高速率的存儲(chǔ)器來(lái)滿足其數(shù)據(jù)存儲(chǔ)的需求,因此高性價(jià)比的DDR2存儲(chǔ)器將得到越來(lái)越廣泛的應(yīng)用,與其相對(duì)應(yīng)的控制器以其靈活的適應(yīng)性、高可靠性、良好的可復(fù)用性必將成為硬件設(shè)計(jì)的主流。
本文結(jié)合FPGA與ASIC 2種設(shè)計(jì)的長(zhǎng)處,提出了一種基于Verilog HDL硬件描述語(yǔ)言的DDR2 SDRAM的控制器設(shè)計(jì)方法,并且攻克了控制器結(jié)構(gòu)復(fù)雜性與流片后芯片驗(yàn)證測(cè)試2個(gè)難題。
DDR2是由JEDEC定義全新的下一代DDR內(nèi)存技術(shù)標(biāo)準(zhǔn),是DDR內(nèi)存的換代產(chǎn)品。DDR2能夠在100 MHz的發(fā)信頻率基礎(chǔ)上提供每插腳最少400 MB/s的帶寬,而且其接口運(yùn)行于1.8 V電壓上,從而進(jìn)一步降低發(fā)熱量,以便提高頻率。此外,DDR2將融入CAS、OCD、ODT 等新性能指標(biāo)和中斷指令,提升內(nèi)存帶寬的利用率。
相對(duì)于標(biāo)準(zhǔn)DDR技術(shù),雖然DDR2和DDR一樣,采用了在時(shí)鐘的上升沿和下降沿同時(shí)進(jìn)行數(shù)據(jù)傳輸?shù)幕痉绞?但是最大的區(qū)別在于,DDR2內(nèi)存可進(jìn)行4 bit預(yù)讀取,2倍于標(biāo)準(zhǔn)DDR內(nèi)存的2 bit預(yù)讀取,這就意味著,DDR2擁有2倍于DDR的預(yù)讀數(shù)據(jù)的能力。
DDR2 SDRAM控制器的總體結(jié)構(gòu)如圖1所示,DDR2 SDRAM和DDR SDRAM的接口不同的是多了1個(gè)ODT(On Die Termination)接口,能隨意修改的是用戶CPU和DDR2 SDRAM控制器之間的接口,用戶可以根據(jù)不同的需要來(lái)選擇不同的接口。控制器與存儲(chǔ)器之間的引腳可分為4個(gè)部分:①時(shí)鐘引腳,包括 clk和 clk-n,這是一對(duì)差分信號(hào);②命令引腳,包括cke、cs-n、ras-n、cas-n和 we-n;③地址線,包括 address和bank;④數(shù)據(jù)線,包括dq,dqs,ODT[1,2]。
圖1 DDR2 SDRAM控制器總體結(jié)構(gòu)
把DDR2 SDRAM控制器具體展開,控制器的內(nèi)部結(jié)構(gòu)如圖2所示,本設(shè)計(jì)的控制器可分為5個(gè)部分:I2C模塊、控制模塊、命令產(chǎn)生模塊、數(shù)據(jù)通道模塊及時(shí)鐘產(chǎn)生模塊。其中控制模塊比較復(fù)雜,又劃分為4個(gè)小模塊。
圖2 控制器的內(nèi)部結(jié)構(gòu)
(1)I2C模塊。I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在本設(shè)計(jì)中,需要通過(guò)I2C模塊傳送的數(shù)據(jù)主要用于初始化時(shí)用戶必須向DDR2傳輸?shù)母鱾€(gè)參數(shù),通過(guò)I2C模塊傳輸?shù)膮?shù)除了平常的初始化參數(shù)外(比如Burst Length,Burst Type,Cas Latency,DLL Enable,Additive Latency,OCD等等),對(duì)DDR2還要傳輸測(cè)試數(shù)據(jù)、測(cè)試數(shù)據(jù)的地址及一些對(duì)測(cè)試數(shù)據(jù)的讀寫命令,用來(lái)校準(zhǔn)存儲(chǔ)器內(nèi)部DLL,使讀寫數(shù)據(jù)的精確度提高。
(2)時(shí)鐘產(chǎn)生模塊。本設(shè)計(jì)中時(shí)鐘模塊需要產(chǎn)生3個(gè)不同的時(shí)鐘:clk、clk-n、clk2x,其中 clk及從用戶端過(guò)來(lái)的時(shí)鐘的頻率、相位都一致;clkn是clk的反時(shí)鐘;clk-2x是clk的2倍時(shí)鐘。時(shí)鐘clk和clk-2x供控制器本身使用,而時(shí)鐘clk和clk-n則供DDR2 SDRAM使用。時(shí)鐘產(chǎn)生模塊其實(shí)就是一個(gè)PLL(Phase Locked Loop),對(duì)于本設(shè)計(jì)所需的3個(gè)時(shí)鐘完全可以通過(guò)設(shè)置分頻器和鑒相器來(lái)實(shí)現(xiàn)。
(3)控制模塊??刂颇K如圖2所示,控制模塊的設(shè)計(jì)相對(duì)其它模塊來(lái)說(shuō)要復(fù)雜一些,本設(shè)計(jì)把它分成4個(gè)小模塊。第1個(gè)小模塊是初始化狀態(tài)機(jī)。當(dāng)用戶要使用存儲(chǔ)器時(shí),首先必須通過(guò)CMD命令線先發(fā)一個(gè)初始化命令,控制器接收到初始化命令時(shí)要裝換成一系列存儲(chǔ)器能讀懂的命令,對(duì)于DDR2 SDRAM來(lái)說(shuō),初始化的步驟狀態(tài)轉(zhuǎn)換形式如圖3所示。
圖3 DDR2 SDRAM初始化狀態(tài)轉(zhuǎn)換
第2個(gè)小模塊是命令計(jì)數(shù)器,主要作用是讓控制器以DDR2 SDRAM能讀懂的方式發(fā)送命令。
在初始化時(shí),用戶只通過(guò)CMD命令線發(fā)送一個(gè)進(jìn)行初始化的命令,而控制器則要把這個(gè)命令分解成幾個(gè)存儲(chǔ)器能讀懂的命令,而且這些命令必須符合一定的時(shí)序,來(lái)保證存儲(chǔ)器能正確進(jìn)行初始化。
第3個(gè)小模塊是狀態(tài)信號(hào)產(chǎn)生器,如圖4所示。如果用戶發(fā)送寫命令,控制器接收后就由idle狀態(tài)轉(zhuǎn)換到ACTIVE狀態(tài),經(jīng)過(guò)計(jì)數(shù)器計(jì)數(shù)的時(shí)間等待后,再轉(zhuǎn)到Write狀態(tài),再經(jīng)過(guò)計(jì)數(shù)器計(jì)數(shù)等待后才寫完畢,最后再到idle狀態(tài)。讀操作也是同樣道理。這樣就可以用Verilog語(yǔ)言的狀態(tài)機(jī)形式設(shè)計(jì)出此模塊[2-4]。
圖4 控制器讀寫命令的狀態(tài)轉(zhuǎn)化
第4個(gè)小模塊是刷新計(jì)數(shù)器,SDRAM是一種電容存儲(chǔ)器,所以對(duì)于SDRAM必須定時(shí)地刷新來(lái)保證存儲(chǔ)數(shù)據(jù)的準(zhǔn)確性。本設(shè)計(jì)對(duì)于刷新計(jì)數(shù)器的設(shè)計(jì),使用Verilog語(yǔ)言描述LFSR(線性反饋移位寄存器)計(jì)數(shù)器的設(shè)計(jì)方法。
(4)命令產(chǎn)生模塊。命令產(chǎn)生模塊是控制器直接與存儲(chǔ)器之間命令通信的模塊,即由此模塊直接產(chǎn)生存儲(chǔ)器所需要的 cke、cs-n、ras-n、cas-n、we-n 5根命令線。除此模塊還要產(chǎn)生讀寫時(shí)所需的行列地址(address)和簇地址(bank),此外控制器還將產(chǎn)生ODT信號(hào)。
命令產(chǎn)生模塊的設(shè)計(jì)主要通過(guò)控制模塊的狀態(tài)來(lái)設(shè)計(jì),根據(jù)控制模塊的狀態(tài)傳輸不同來(lái)產(chǎn)生不同的存儲(chǔ)器能讀懂的命令信號(hào)。
(5)數(shù)據(jù)通道模塊。數(shù)據(jù)通道模塊為存儲(chǔ)器與用戶端提供數(shù)據(jù)接口,數(shù)據(jù)通道模塊主要完成讀寫功能。
從最外層的引腳來(lái)看,dq和dqs均是雙向接口,控制器的讀、寫數(shù)據(jù)都是通過(guò)dq來(lái)傳輸?shù)?。寫命令時(shí)dqout-en起作用,把 dqout傳給dq。讀命令時(shí)dqout-en不起作用,所以dq上的數(shù)據(jù)就傳給dqin為用戶提供數(shù)據(jù)。用戶端的數(shù)據(jù)寬度是存儲(chǔ)器數(shù)據(jù)寬度的2倍,這是因?yàn)镈DR2 SDRAM數(shù)據(jù)接口在時(shí)鐘的2個(gè)邊沿均觸發(fā)數(shù)據(jù)[5]。數(shù)據(jù)通道模塊主要通過(guò)控制模塊的狀態(tài)來(lái)設(shè)計(jì),根據(jù)控制模塊的狀態(tài)傳輸不同,來(lái)配合產(chǎn)生dqm、dqs和dq。
本設(shè)計(jì)中控制器的功能仿真通過(guò)利用Verilog語(yǔ)言寫“testbench”的方法,以Mentor公司的Modelsim作為仿真工具,通過(guò)檢查波形來(lái)完成。在本設(shè)計(jì)中“testbench”既要產(chǎn)生激勵(lì)又需響應(yīng)輸出。把“testbench”、控制器 、DDR2 SDRAM 的仿真代碼一起在Modelsim上編譯,產(chǎn)生如圖5、圖6所示的讀寫波形圖[5,6]。
當(dāng)CMD發(fā)出命令以及第1個(gè)數(shù)據(jù),控制器收到后,由命令引腳產(chǎn)生寫命令傳給DDR2 SDRAM,接著產(chǎn)生握手信號(hào)ready通知用戶端可以繼續(xù)發(fā)送數(shù)據(jù),而控制器把接收到的數(shù)據(jù)通過(guò)dq端口傳給DDR2 SDRAM,收到后把數(shù)據(jù)通過(guò)dq端口讀出來(lái)傳到用戶端口。從2幅波形圖中可以清楚地看到,本控制器的設(shè)計(jì)能很好地完成數(shù)據(jù)的讀寫功能。
本設(shè)計(jì)使用Synopsys公司的DC(Design Compiler)為綜合的工具,它根據(jù)設(shè)計(jì)描述和約束條件自動(dòng)綜合出一個(gè)優(yōu)化了的門級(jí)電路。DC綜合過(guò)程包括3個(gè)步驟:translation+logic optimization+mapping,其中與transition對(duì)應(yīng)命令為read-verilog,與 logic optimization和 mapping對(duì)應(yīng)的是compile。Translation就是把硬件描述語(yǔ)言用門電路來(lái)實(shí)現(xiàn),從而構(gòu)成初始未優(yōu)化的電路。Logic optimization和 mapping就是對(duì)已有的電路進(jìn)行分析,去掉冗余的電路單元,并對(duì)不滿足時(shí)序的路徑進(jìn)行優(yōu)化,最后將優(yōu)化好的電路映射到生產(chǎn)商的單元庫(kù)中[7,8]。DC腳本是一組dc命令的集合,一般地,DC腳本普遍用TCL(Tool Command Language)腳本語(yǔ)言來(lái)描述。
FPGA,即現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array,簡(jiǎn)稱FPGA),控制器在ALTERA 公司的Cyclone系列EP1C12F256C6上實(shí)現(xiàn)驗(yàn)證,綜合后,使用了1 208個(gè)邏輯單元,占用資源10.07%;使用了122個(gè)引腳,占用資源60.5%;使用了2個(gè)PLL,占用資源100%;其最高主頻因?yàn)镕PGA器件本身緣故只達(dá)到了171 M,但功能完全正確。
本設(shè)計(jì)在 TSMC(臺(tái)積電)流片,以FPGA板配合高速PCB板對(duì)芯片進(jìn)行測(cè)試,而且頻率在流片測(cè)試時(shí)能上到400 MHz,能完全適合對(duì)DDR2 SDRAM控制器的控制。
圖5 寫數(shù)據(jù)狀態(tài)的波形
圖6 讀數(shù)據(jù)狀態(tài)的波形
本文在詳細(xì)研究了DDR2 SDRAM的主要原理和結(jié)構(gòu)的基礎(chǔ)上,針對(duì)目前內(nèi)存技術(shù)迅猛發(fā)展的趨勢(shì),提出了一種適用于DDR2 SDRAM的控制器的設(shè)計(jì),并基于Verilog硬件描述語(yǔ)言實(shí)現(xiàn)控制器,在通過(guò)一系列的邏輯仿真、綜合、FPGA硬件驗(yàn)證后得以實(shí)現(xiàn)。
本文結(jié)合FPGA與ASIC 2種設(shè)計(jì)的長(zhǎng)處,以FPGA設(shè)計(jì)作為ASIC設(shè)計(jì)的硬件驗(yàn)證工具,使ASCI設(shè)計(jì)的流片成功率大為增加,降低了多次流片的概率,從而減少了成本,解決了控制器結(jié)構(gòu)復(fù)雜以及流片后芯片驗(yàn)證的難題。
[1] 杜慧敏,李宥謀,趙全良.基于 Verilog的 FPGA設(shè)計(jì)基礎(chǔ)[M].西安:西安電子科技大學(xué)出版社,2006:56-78.
[2] 簡(jiǎn)弘倫.精通Verilog HDL[M].北京:電子工業(yè)出版社,2005:100-162.
[3] 劉寶琴,羅 嶸,王德生.數(shù)字電路與系統(tǒng)[M].北京:清華大學(xué)出版社,2007:163-180.
[4] 趙 剛.數(shù)字電路與系統(tǒng)課程精粹與題解[M].成都:四川大學(xué)出版社,2008:90-109.
[5] 華清遠(yuǎn)見嵌入式培訓(xùn)中心.FPGA應(yīng)用開發(fā)入門與典型實(shí)例[M].北京:人民郵電出版社,2008:122-137.
[6] Wolf W.FPGA-based sy stem design[M].Beijing:China M achine Press,2005:109-118.
[7] Scheffer L,Lavagno L.集成電路系統(tǒng)設(shè)計(jì)、驗(yàn)證與測(cè)試[M].陳力穎,王 猛,譯.北京:科學(xué)出版社,2008:25-36.
[8] Baker R J,Li H W,Boyce D E.CMOS電路設(shè)計(jì):布局與仿真[M].陳中建,譯.北京:機(jī)械工業(yè)出版社,2006:102-156.