文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)06-0066-03
0 引言
在現(xiàn)代數(shù)據(jù)通信與傳輸領(lǐng)域,,系統(tǒng)芯片(System-on-a-Chip,SoC)與不同外設(shè)間的數(shù)據(jù)交換越來越頻繁,,交換的數(shù)據(jù)量越來越大,,而且不同外設(shè)采用的數(shù)據(jù)通信協(xié)議和接口形式也各不相同。SoC與外設(shè)間連接的要求越來越高,,主要表現(xiàn)在:(1)高帶寬,,要求通信傳輸速度越來越高;(2)通用性,,要求接口具有對(duì)多種標(biāo)準(zhǔn)通信協(xié)議有一定的廣適性,;(3)可再配置,要求通信系統(tǒng)具有用戶根據(jù)實(shí)際需要進(jìn)行二次配置的特性,。
另一方面,,外設(shè)接口往往采用一定的協(xié)議或標(biāo)準(zhǔn),典型的有UART接口,、IIC接口,、SPI接口等。芯片實(shí)現(xiàn)時(shí),,通常將外設(shè)接口的邏輯功能固化在芯片內(nèi)部,,但由于芯片資源有限,不可能把所有的協(xié)議都集成在片上[1],。為了實(shí)現(xiàn)可編程的外設(shè)接口,,傳統(tǒng)的方法是利用通用輸入輸出(General Purpose Input/Output,GPIO),,通過編程方式設(shè)置GPIO寄存器的高/低電平,,從而控制數(shù)據(jù)的讀寫和時(shí)鐘的生成。但是,,GPIO模塊采用CPU內(nèi)核直接控制,,模擬外設(shè)接口的讀寫過程會(huì)占用大量CPU運(yùn)行周期,影響系統(tǒng)中其他任務(wù)的實(shí)現(xiàn),,所以一般只用于低速協(xié)議或接口的實(shí)現(xiàn)[2],。
本文針對(duì)SoC與外圍設(shè)備多種接口的連接問題,設(shè)計(jì)了一種通用可編程接口IP核,,實(shí)現(xiàn)了SoC與外圍設(shè)備接口間的可編程特性,,并以增強(qiáng)型8051內(nèi)核為基礎(chǔ)構(gòu)建了仿真驗(yàn)證平臺(tái),驗(yàn)證了設(shè)計(jì)的正確性和有效性,。
1 通用可編程接口IP的原理
通用可編程接口的工作方式采用主控方式,,可通過配置CPU實(shí)現(xiàn)對(duì)外設(shè)接口讀寫波形的編程,從而完成外設(shè)接口的讀寫。
為了使數(shù)據(jù)在與外圍設(shè)備交換過程中不需要CPU的控制,,利用通用可編程接口的高速帶寬設(shè)計(jì)了一套FIFO緩存架構(gòu),,其工作機(jī)制使得數(shù)據(jù)以包的形式被提交到端點(diǎn)FIFO,而不是每次一個(gè)字節(jié),,并可設(shè)置多級(jí)緩存[3-4],。
通用可編程接口IP的本質(zhì)是一個(gè)可編程狀態(tài)機(jī),用戶通過編寫波形描述符控制狀態(tài)機(jī),。通用可編程接口可生成4個(gè)用戶定義波形描述符,,每個(gè)波形描述符最多可定義7個(gè)狀態(tài),這7個(gè)狀態(tài)通常情況下用于批量讀,、批量寫,、單字讀、單字寫,。
2 通用可編程接口IP核設(shè)計(jì)
2.1 通用可編程接口IP架構(gòu)
通用可編程接口模塊的內(nèi)部結(jié)構(gòu)如圖1所示,,主要由4個(gè)模塊組成。
(1)端點(diǎn)控制模塊
端點(diǎn)控制模塊(CONTROL)產(chǎn)生控制信號(hào)(CTL)控制外部設(shè)備,,CTL信號(hào)可通過編程組合使用,,實(shí)現(xiàn)復(fù)雜的邏輯功能;接收外部準(zhǔn)備信號(hào)(RDY)觸發(fā)事件,;接收/發(fā)送時(shí)鐘信號(hào)(IFCLK),;輸出狀態(tài)信號(hào)(STATE),顯示狀態(tài)機(jī)目前工作狀態(tài),。時(shí)鐘信號(hào)可選內(nèi)部產(chǎn)生或外部輸入,,其他控制信號(hào)也可設(shè)置為高有效或低有效。
(2)端點(diǎn)緩存模塊
端點(diǎn)緩存模塊由4個(gè)相互重疊的FIFO端點(diǎn)緩存組成,,存儲(chǔ)與外設(shè)通信過程中接收/發(fā)送的數(shù)據(jù),。其讀信號(hào)(RD)、寫信號(hào)(WR),、輸出使能信號(hào)(OE)及時(shí)鐘信號(hào)(CLK)控制數(shù)據(jù)總線(FD[15:0])的讀寫,,并輸出空信號(hào)(EF)、滿信號(hào)(FF),。
(3)波形存儲(chǔ)器模塊
波形存儲(chǔ)器用于存儲(chǔ)用戶設(shè)計(jì)的波形描述符,。通用可編程接口通過波形描述符控制數(shù)據(jù)的輸入輸出,,最多可存儲(chǔ)4個(gè)波形描述符,,分別為WF0、WF1,、WF3,、WF4。
(4)地址生成模塊
地址生成器(ADDR_GEN)用于輸出地址總線(GPIFADR[8:0]),由控制模塊控制,。
2.2 波形描述符設(shè)計(jì)
波形描述符是通用可編程接口的核心,,用于描述數(shù)據(jù)傳輸的時(shí)序。通用可編程接口可以存儲(chǔ)4個(gè)波形描述符:(1)單字讀:從外設(shè)中讀取1字節(jié)/字的數(shù)據(jù),;(2)單字寫:向外設(shè)中寫入1字節(jié)/字的數(shù)據(jù),;(3)批量讀:從外設(shè)中讀取一個(gè)長數(shù)據(jù)流;(4)批量寫,,往外設(shè)中寫入一個(gè)長數(shù)據(jù)流,。這些描述符可以動(dòng)態(tài)地配置給任何一個(gè)端點(diǎn)FIFO。配置后,,通用可編程接口將依據(jù)波形描述符產(chǎn)生相應(yīng)的控制邏輯和握手信號(hào)給外界接口,,滿足向FIFO讀寫數(shù)據(jù)的需要。
圖2為一種批量寫模式下的波形描述符狀態(tài)轉(zhuǎn)移圖,。批量寫狀態(tài)機(jī)共定義了5個(gè)狀態(tài),,分別是IDLE、State1,、State2,、State3、State4,,每個(gè)狀態(tài)的意義描述如下,。
(1)IDLE:當(dāng)寫事件發(fā)生,轉(zhuǎn)移到State(1),;
(2)State1:將SRAM寫信號(hào)和使能信號(hào)置為有效(=0,,
=0),觸發(fā)寫事件,,轉(zhuǎn)移到State(2),;
(3)State2:若外部SRAM模型的“滿”標(biāo)志為真(FF=1),則停留在State(2),,否則轉(zhuǎn)移到State(3),;
(4)State3:通用可編程接口采樣數(shù)據(jù)線,將內(nèi)部端點(diǎn)FIFO數(shù)據(jù)寫入外部SRAM模型,,轉(zhuǎn)移到State(4),;
(5)State4:如有更多數(shù)據(jù)需要傳輸,則轉(zhuǎn)移到State(2),,否則轉(zhuǎn)移到步驟(1),。
2.3 端點(diǎn)FIFO緩存設(shè)計(jì)
通用可編程接口內(nèi)部包含4重端點(diǎn)FIFO緩存,對(duì)內(nèi)部總線端來說,,只要有1個(gè)FIFO為“半滿”,,就可以繼續(xù)發(fā)送數(shù)據(jù)。當(dāng)前操作的FIFO寫“滿”時(shí),自動(dòng)將其轉(zhuǎn)換到外部接口端,,排隊(duì)等候讀?。徊㈥?duì)列中下一個(gè)為“空”的FIFO轉(zhuǎn)移到SoC內(nèi)部總線接口上,,供其繼續(xù)寫數(shù)據(jù),。圖3為FIFO緩存架構(gòu)的傳輸原理圖,此時(shí)通用可編程接口內(nèi)部總線接口執(zhí)行OUT傳輸,,F(xiàn)IFO端點(diǎn)被設(shè)置為512 B四重緩存,。
3 仿真平臺(tái)設(shè)計(jì)
為驗(yàn)證設(shè)計(jì)的接口IP核,構(gòu)建了一個(gè)以8051 CPU為內(nèi)核的SoC仿真平臺(tái),,利用設(shè)計(jì)的接口IP核訪問外部設(shè)備,。為了充分利用通用可編程接口地址總線、數(shù)據(jù)總線及控制信號(hào),,外設(shè)采用SRAM芯片的Verilog模型,,并加以改進(jìn),添加握手信號(hào),,使通用可編程接口能讀取該信號(hào)并控制數(shù)據(jù)傳輸,。通過設(shè)計(jì)波形描述符,SoC控制接口IP向外部存儲(chǔ)器執(zhí)行寫/讀操作,,仿真平臺(tái)對(duì)兩次的數(shù)據(jù)進(jìn)行比較并報(bào)告設(shè)計(jì)的正確性,。
該仿真平臺(tái)在Linux操作系統(tǒng)下開發(fā),平臺(tái)系統(tǒng)結(jié)構(gòu)如圖4所示,。仿真器采用Synopsys公司的VCS仿真器,。組成系統(tǒng)的各個(gè)模塊可以按照需要加入仿真環(huán)境中,仿真結(jié)果由環(huán)境產(chǎn)生,、檢查并輸出到指定目錄結(jié)構(gòu)下的文件中,。
仿真平臺(tái)包括Verilog編寫的Testbench、SoC模型,、外部程序存儲(chǔ)器(EXT PROGRAM ROM),、SRAM Verilog模型。SRAM包括地址線(A8~A0),、數(shù)據(jù)線(I/O15~I(xiàn)/O0),、芯片使能()、輸出使能(
),、寫使能(
),、握手信號(hào)E_RDY(“1”表示SRAM未寫入數(shù)據(jù),“0”代表已寫入數(shù)據(jù)),、F_RDY(“1”表示SRAM存滿數(shù)據(jù),,“0”代表未滿)。
仿真平臺(tái)工作時(shí),,由Testbench產(chǎn)生時(shí)鐘(CLK)和通用可編程接口IP時(shí)鐘(IFCLK),。
4 仿真結(jié)果分析
通用可編程接口單字節(jié)寫的仿真結(jié)果如圖5所示,其中IFCLK為內(nèi)部48 MHz時(shí)鐘,,數(shù)據(jù)寬度為8 bit,。當(dāng)CTL3()拉低時(shí),外部SRAM有效,;當(dāng)CTL5 (
)有效,,且RDY1(F_RDY)為低時(shí),數(shù)據(jù)(5A)被放入數(shù)據(jù)總線,,并經(jīng)數(shù)據(jù)總線寫入外部SRAM,。狀態(tài)總線STATE(PE[2:0])顯示通用可編程接口引擎在每一操作期間循環(huán)經(jīng)過的狀態(tài)。
通用可編程接口單字讀模式與單字寫模式類似,,仿真結(jié)果如圖6所示,。
圖7為通用可編程接口批量寫傳輸?shù)姆抡娼Y(jié)果,數(shù)據(jù)寬度為16 bit,。當(dāng),、
被拉低,且F_RDY為低時(shí),,接口開始執(zhí)行批量寫程序,,從內(nèi)部的FIFO緩存向外部SRAM寫入512 B(00-FF,F(xiàn)F-00),。
通用可編程接口批量讀傳輸?shù)姆抡娼Y(jié)果與批量寫類似,,仿真結(jié)果如圖8所示。
由上述仿真波形可看出,,通用可編程接口讀寫數(shù)據(jù)時(shí),,時(shí)鐘周期為20.8 ns,數(shù)據(jù)總線寬度為16 bit,,對(duì)應(yīng)數(shù)據(jù)傳輸速率為96 Mb/s,。相比之下,UART的傳輸速率為1.5 Mb/s,,IIC總線為400 Kb/s~3.4 Mb/s,,SPI總線為18 Mb/s,GPIO總線的傳輸速率最高為50 Mb/s[5],??梢姡ㄓ每删幊探涌诘膫鬏斔俾首羁?,更適合當(dāng)前大容量存儲(chǔ)器之間的數(shù)據(jù)傳輸要求,。
5 結(jié)束語
本方案實(shí)現(xiàn)了通用可編程接口與外圍設(shè)備接口連接的可配性,,并通過設(shè)計(jì)驗(yàn)證了該方案的可行性與準(zhǔn)確性。在數(shù)據(jù)傳輸過程中,,通用可編程接口無需CPU的干預(yù),,只需對(duì)其進(jìn)行正確設(shè)置就可以正常工作。通用可編程接口的強(qiáng)大功能使其不僅可以與外部SRAM連接,,還可以與更復(fù)雜的接口(例如ATA接口)實(shí)現(xiàn)無縫連接,,加快了產(chǎn)品的開發(fā)速度,降低了開發(fā)成本和提高了產(chǎn)品的可靠性,。
參考文獻(xiàn)
[1] 王占領(lǐng),,張登福,李云杰,,等.便攜式ARINC429總線通信接口的設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),,2013,30(7):133-136.
[2] HASAMNIS M A,,LIMAYE S S.Custom hardware interface using NIOS II processor through GPIO[C].The 7th Conference on Industrial Electronics and Applications(ICIEA′12).Singapore,,2012:1381-1385.
[3] 劉志華,郭付才,,彭新偉,,等.基于CY7C68013A的FPGA配置和通信接口設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,,39(2):18-21.
[4] 趙林,,孟令軍,于磊,,等.基于CY7C68013A的USB2.0高速接口設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2014,40(1):131-133.
[5] STMicroelectronics.RM0008 Reference manual[EB/OL].http://www.st.com/,,2014.