黃海生,黨 成,李 鑫,葉小艷
(西安郵電大學(xué) 電子工程學(xué)院,陜西 西安 710121)
以太網(wǎng)數(shù)據(jù)要通過(guò)E1線路傳輸就必須對(duì)以太網(wǎng)凈荷數(shù)據(jù)進(jìn)行幀封裝,才能從E1線路上恢復(fù)出以太網(wǎng)數(shù)據(jù)幀,完成以太網(wǎng)數(shù)據(jù)的交換。使用HDLC協(xié)議進(jìn)行以太網(wǎng)數(shù)據(jù)的二次封裝,以太網(wǎng)數(shù)據(jù)在進(jìn)行HDLC協(xié)議封裝的傳輸過(guò)程中,不同數(shù)據(jù)鏈路進(jìn)行數(shù)據(jù)交互時(shí)會(huì)出現(xiàn)亞穩(wěn)態(tài)和數(shù)據(jù)吞吐量差異的問(wèn)題。由于已有設(shè)計(jì)在以太網(wǎng)模塊內(nèi)部完成了跨時(shí)鐘域的處理,因此本文提出的電路旨在解決跨時(shí)鐘域數(shù)據(jù)通信時(shí)的吞吐量差異問(wèn)題。這個(gè)問(wèn)題的解決通常需要一個(gè)存儲(chǔ)模塊進(jìn)行緩存,而SDRAM由于具有較高的讀寫速率和精度、存儲(chǔ)容量大等優(yōu)點(diǎn),常用于數(shù)據(jù)緩存模塊中,所以本文設(shè)計(jì)在利用SDRAM基本的緩存特性基礎(chǔ)上,提出一種SDRAM控制器的新設(shè)計(jì)思路,運(yùn)用模塊化的設(shè)計(jì)方法,即雙緩存模塊IN_FIFO和OUT_FIFO的設(shè)計(jì),將8 bit的輸入數(shù)據(jù)轉(zhuǎn)換為32 bit的數(shù)據(jù)進(jìn)行讀寫處理,有效地提高數(shù)據(jù)的讀寫速率;同時(shí)增設(shè)CIR模塊,通過(guò)設(shè)置CIR寄存器來(lái)控制以太網(wǎng)模塊至HDLC模塊發(fā)送的數(shù)據(jù)吞吐量,從而將SDRAM接收的以太網(wǎng)幀數(shù)據(jù)發(fā)送限制在設(shè)定的速率上。
圖1所示為SDRAM控制器設(shè)計(jì)系統(tǒng)的背景框圖。圖中以太網(wǎng)幀接收模塊將接收的數(shù)據(jù)進(jìn)行一系列處理,在模塊內(nèi)部完成跨時(shí)鐘域處理后將數(shù)據(jù)輸出,與SDRAM模塊以相同的時(shí)鐘頻率進(jìn)行交互,由SDRAM將輸出的數(shù)據(jù)送入HDLC成幀電路模塊進(jìn)行封裝,得到HDLC幀數(shù)據(jù)后通過(guò)WAN接口發(fā)送,WAN接口能夠與Dallas Semiconductor/Maxim的E1成幀器、線路接口單元(LIU)和單片收發(fā)器(SCT)進(jìn)行無(wú)縫連接。本文提出的SDRAM控制器電路主要是為了使以太網(wǎng)幀和HDLC幀在完成速率同步后,能夠正確地對(duì)SDRAM進(jìn)行讀寫以實(shí)現(xiàn)數(shù)據(jù)緩存。
圖1 SDRAM控制器設(shè)計(jì)系統(tǒng)背景框圖
SDRAM控制器整體設(shè)計(jì)架構(gòu)如圖2所示。首先,將數(shù)據(jù)寫入讀緩存IN_FIFO模塊,IN_FIFO模塊輸出的讀請(qǐng)求信號(hào)RD_REQ經(jīng)仲裁模塊SDRAM_ARB仲裁后,得到SDRAM的寫指示信號(hào)WR_IND,并送入SDRAM控制模塊SDRAM_CTL中,得到SDRAM的寫使能信號(hào)(即IN_FIFO的讀使能信號(hào)),并將其送回IN_FIFO模塊控制數(shù)據(jù)的讀取。將讀出的數(shù)據(jù)送入SDRAM_CTL模塊,在SDRAM寫指示信號(hào)的控制下將數(shù)據(jù)通過(guò)總線SDATA送入SDRAM模塊中進(jìn)行處理,SDATA為inout類型。SDRAM輸出的數(shù)據(jù)也通過(guò)SDATA總線進(jìn)行傳輸。在OUT_FIFO寫使能信號(hào)控制下將數(shù)據(jù)SDATA寫入OUT_FIFO中,經(jīng)OUT_FIFO讀緩沖后輸出。
圖2 SDRAM控制器設(shè)計(jì)總體框圖
另外,REG_PRO模塊將數(shù)據(jù)隊(duì)列的最大和最小地址提供給FIFO_CTL模塊,進(jìn)而產(chǎn)生讀寫地址。CIR_CTL用來(lái)控制SDRAM發(fā)送數(shù)據(jù)的吞吐量,將其輸出的CIR_ACTIVE信號(hào)、OUT_FIFO輸出的寫請(qǐng)求信號(hào)WR_REQ以及FIFO_CTL輸出的幀指示信號(hào)FRM_IND送入仲裁模塊進(jìn)行仲裁,將得到的讀指示信號(hào)RD_IND送入SDRAM_CTL中,得到SDRAM的讀使能信號(hào)(即OUT_FIFO的寫使能信號(hào))并發(fā)送給OUT_FIFO模塊來(lái)控制數(shù)據(jù)SDATA的寫入。
CIR用于將SDRAM接收的數(shù)據(jù)發(fā)送限制在設(shè)定的速率上,CIR寄存器控制數(shù)據(jù)的吞吐量。CIR寄存器在0~52 Mb/s范圍內(nèi)可設(shè),間隔為500 Kb/s。本文設(shè)計(jì)中CIR_REG[7:0]值為8′h8F,最高位置1將使能約定信息速率控制器功能,CIR_REG[6:0]提供約定信息速率數(shù)值,該數(shù)值乘以500 Kb/s得到CIR值。若可用吞吐量為正,則輸出CIR_ACTIVE信號(hào)送給SDRAM_ARB模塊進(jìn)行仲裁處理,從而控制SDRAM讀指示信號(hào)的產(chǎn)生。CIR工作原理如下:
1)CIR模塊對(duì)每125 ms結(jié)束時(shí)累積的可用吞吐量進(jìn)行計(jì)數(shù)。
2)計(jì)算新的可用吞吐量,可用吞吐量=原有可用吞吐量-最近發(fā)送幀長(zhǎng)度(以字節(jié)形式表示)。
3)可用吞吐量每125 ms遞增CIR/8。
4)每250 ms可用吞吐量復(fù)位為CIR初始值。
5)CIR最大值不能超過(guò)發(fā)送線路速率。
6)對(duì)于接收并存儲(chǔ)在SDRAM中的數(shù)據(jù),向OUT_FIFO模塊發(fā)送時(shí)要求可用吞吐量必須為正。如果可用吞吐量為負(fù),則CIR_ACTIVE為0,將不進(jìn)行數(shù)據(jù)傳送。
在數(shù)據(jù)高速傳輸?shù)那闆r下,應(yīng)加入緩存器FIFO對(duì)SDRAM寫入和讀出數(shù)據(jù)進(jìn)行緩沖,確保數(shù)據(jù)傳輸?shù)姆€(wěn)定性和一致性,防止數(shù)據(jù)失真。本文設(shè)計(jì)采用雙FIFO緩沖設(shè)計(jì),即讀緩存和寫緩存,其中寫緩存IN_FIFO模塊將其輸入的8 bit位寬的以太網(wǎng)幀數(shù)據(jù)轉(zhuǎn)換為32 bit位寬的數(shù)據(jù)輸出,對(duì)32 bit數(shù)據(jù)的處理有效地提高了SDRAM的讀寫速率;讀緩存OUT_FIFO模塊將讀出的數(shù)據(jù)轉(zhuǎn)換為8 bit的數(shù)據(jù)輸出,確保數(shù)據(jù)輸入與輸出的一致性。
仲裁模塊管理以太網(wǎng)端口與HDLC端口之間數(shù)據(jù)的傳輸請(qǐng)求,管理SDRAM中數(shù)據(jù)的輸入與輸出。對(duì)IN_FIFO輸出的讀請(qǐng)求信號(hào)進(jìn)行仲裁,將得到的SDRAM寫指示信號(hào)發(fā)送給SDRAM_CTL模塊處理,最終得到FIFO的讀使能與SDRAM的寫使能。對(duì)CIR_CTL輸出的CIR_ACTIVE、OUT_FIFO輸出的寫請(qǐng)求信號(hào)WR_REQ、FIFO_CTL輸出的幀指示信號(hào)FRM_IND進(jìn)行仲裁,得到SDRAM的讀指示信號(hào)RD_IND并送入SDRAM_CTL中,最終得到FIFO的寫使能與SDRAM的讀使能信號(hào)。
SDRAM采用MICRON公司的MT48LC4M32B2型號(hào),時(shí)鐘為100 MHz,SDRAM容量為128 MB,數(shù)據(jù)位寬為32 bit。SDRAM的工作原理如下:
1)初始化
開機(jī)后,SDRAM需要先對(duì)邏輯控制單元進(jìn)行初始化操作(包括所有L-Bank預(yù)充電、刷新、設(shè)置模式寄存器)。其中,模式寄存器的設(shè)置需通過(guò)地址線來(lái)控制,在本文中突發(fā)長(zhǎng)度為1,CAS潛伏期CL=2,突發(fā)類型選擇為順序。在模式寄存器設(shè)置結(jié)束后,可以對(duì)SDRAM進(jìn)行數(shù)據(jù)讀寫。
2)讀寫操作
對(duì)一個(gè)L-Bank中的陣列進(jìn)行尋址時(shí),首先需要確定行,其次確定列。片選和L-Bank的定址可以與行有效同時(shí)進(jìn)行。文中有12個(gè)地址線A0~A11,共4096行,在SDARM控制命令為激活(act)時(shí),L-Bank根據(jù)bank地址的不同進(jìn)行定址,且具體的行地址可由地址線的不同來(lái)選擇確定。列尋址信號(hào)與讀寫命令是同時(shí)發(fā)出的。在SDARM的控制命令為讀(read)或?qū)懀╳rite)時(shí),具體的列地址由地址線A0~A7來(lái)決定。在確定列地址之后可找到具體的存儲(chǔ)單元,接著可將數(shù)據(jù)通過(guò)I/O通道(DQ)輸出到內(nèi)存總線上。當(dāng)SDRAM處于突發(fā)寫操作狀態(tài)時(shí),數(shù)據(jù)由DQ總線進(jìn)入模塊;當(dāng)SDRAM處于突發(fā)讀操作狀態(tài)時(shí),數(shù)據(jù)由DQ總線輸出。由于CL為2,因此在進(jìn)行數(shù)據(jù)讀操作時(shí),從CAS與讀命令發(fā)出后需要經(jīng)過(guò)2個(gè)時(shí)鐘周期才會(huì)有數(shù)據(jù)輸出,并且CL只作用于數(shù)據(jù)讀取時(shí)。
3)刷新操作
刷新操作須在64 ms內(nèi)被執(zhí)行4096次,可選擇周期執(zhí)行,也可突發(fā)執(zhí)行。本文選擇周期性刷新,即每15625 ns內(nèi)必須執(zhí)行一次刷新操作,由于系統(tǒng)時(shí)鐘為100 MHz,周期為10 ns,所以每1562個(gè)時(shí)鐘周期內(nèi)必須刷新一次,本文選擇每17頁(yè)刷新一次,1頁(yè)為30個(gè)時(shí)鐘周期。SDRAM控制命令如表1所示。
表1 SDRAM控制命令表
SDRAM_CTL中各模塊分布情況如圖3所示。
圖3中各模塊具體功能如下:
圖3 SDRAM_CTL中各模塊簡(jiǎn)單的分布圖
1)SDRAM_NORM_INI模塊。上電后在SDRAM操作時(shí)鐘的作用下,通過(guò)計(jì)數(shù)得到SDRAM初始化的指示信號(hào)。
2)SDRAM_CMD_PRO模塊。該模塊在對(duì)輸入指令進(jìn)行分析判斷后,產(chǎn)生相應(yīng)的CS、RAS、CAS、WE等信號(hào),從而形成對(duì)SDRAM的控制指令。
3)SDRAM_ADDR_PRO模塊。在SDRAM初始化指示信號(hào)、刷新指示信號(hào)、讀寫指示信號(hào)、數(shù)據(jù)長(zhǎng)度指示信號(hào)的作用下,將外部發(fā)來(lái)的地址譯碼為SDRAM所需要的bank地址和row/col地址命令。
4)SDRAM_DATA_PRO模塊。主要在數(shù)據(jù)寫操作時(shí)將數(shù)據(jù)發(fā)送到SDATA總線上,數(shù)據(jù)由輸入總線進(jìn)入SDRAM模塊中。
本文采用Verilog硬件描述語(yǔ)言對(duì)電路進(jìn)行描述,在ModelSim上對(duì)該電路進(jìn)行功能仿真。系統(tǒng)復(fù)位結(jié)束后,在時(shí)鐘的作用下將數(shù)據(jù)寫入IN_FIFO緩沖區(qū),由仲裁器負(fù)責(zé)將IN_FIFO中的數(shù)據(jù)導(dǎo)入SDRAM中。在CIR的作用下,仲裁器將SDRAM中的數(shù)據(jù)寫入OUT_FIFO緩沖區(qū),最后將OUT_FIFO中的數(shù)據(jù)讀出,觀察系統(tǒng)寫入與讀出數(shù)據(jù)是否一致。IN_FIFO模塊寫入的數(shù)據(jù)波形與OUT_FIFO模塊讀出的數(shù)據(jù)波形分別如圖4、圖5所示。
圖4 IN_FIFO模塊寫入數(shù)據(jù)的波形
圖5 OUT_FIFO模塊讀出數(shù)據(jù)的波形
由圖4、圖5仿真結(jié)果表明,OUT_FIFO模塊讀出的數(shù)據(jù)與IN_FIFO模塊寫入的數(shù)據(jù)一致(其中,OUT_FIFO模塊讀開始信號(hào)所對(duì)應(yīng)的讀數(shù)據(jù)為該幀數(shù)據(jù)的長(zhǎng)度16′h7a)。
本文提出一種SDRAM控制器的設(shè)計(jì)電路,并使用Verilog HDL對(duì)該電路進(jìn)行了描述。經(jīng)仿真驗(yàn)證,在滿足CIR功能的條件下,OUT_FIFO模塊讀出的數(shù)據(jù)與IN_FIFO模塊寫入的數(shù)據(jù)始終保持一致,說(shuō)明了本文設(shè)計(jì)的正確性。本文電路設(shè)計(jì)簡(jiǎn)單,對(duì)于以太網(wǎng)映射器的研究有著重要的意義,可廣泛地用于不同鏈路的數(shù)據(jù)通信中。