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