一種SMC接口研究與PC/104總線仿真設(shè)計與實現(xiàn)
引 言
PC/104是一種工業(yè)計算機總線標準。PC/104有兩個版本,8位和16位,分別與PC和PC/AT相對應(yīng)。PC/104PLUS 則與PCI總線相對應(yīng)。 第一塊PC104產(chǎn)生于1987年,但嚴格意義的規(guī)范說明在1992年才公布,后來對PC104感興趣的人越來越多,眾多廠家生產(chǎn)PC104兼容產(chǎn)品。像原來的PC總線一樣,PC104一直是以一個非法定標準在執(zhí)行,而不是委員會設(shè)計制定的。1992年IEEE開始著手為PC和PC/AT總線制定一個精簡的IEEEP996標準(草稿),PC104作為基本文件被采納,叫做IEEE P996.1兼容PC嵌入式模塊標準??梢?,PC104是一種專門為嵌入式控制而定義的工業(yè)控制總線。
ARM(Advanced RISC Machines)是微處理器行業(yè)的一家知名企業(yè),設(shè)計了大量高性能、廉價、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點。適用于多種領(lǐng)域,比如嵌入控制、消費/教育類多媒體、DSP和移動式應(yīng)用等。ARM(Advanced RISC Machines)是微處理器行業(yè)的一家知名企業(yè),設(shè)計了大量高性能、廉價、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點。適用于多種領(lǐng)域,比如嵌入控制、消費/教育類多媒體、DSP和移動式應(yīng)用等。
1 PC/AT模型和PC/104總線
1.1 總線信號
PC104有兩個版本,8位和16位,分別與PC和PC/AT相對應(yīng)。PC104PLUS 則與PCI總線相對應(yīng),在PC104總線的兩個版本中,8位PC104共有64個總線管腳,單列雙排插針和插孔,P1:64針,P2:40針,合計104個總線信號,PC104因此得名。當8位模塊和16位模塊連接時,16位模塊必須在8位模塊得下面(見附圖2)。P2 總線連結(jié)在8-位元模塊中是可選的,這樣讓這些模塊無論何處都可在堆棧中使用。
PC/104_4 是一種16位總線,但可向前兼容8位XT模式,典型總線時鐘為8 MHz,4個時鐘脈沖可完成一次完整的總線訪問,必要時可插入一個額外的等待周期以適應(yīng)低速外設(shè)。
1.1.1 地址和數(shù)據(jù)信號線
BALE總線地址鎖存使能信號線,由平臺CPU驅(qū)動。當ISA擴展卡或DMA控制器占用總線時,它也被置為邏輯1.
SA~19:O>:低2O根地址信號線,由當前總線的擁用者驅(qū)動。
LAd 23:17> :鎖存地址信號線,用來訪問16MB的存儲器地址空間。由當前總線擁有者或DMA控制器驅(qū)動。
SD<15:0> :數(shù)據(jù)信號線。
1.1.2 總線周期控制信號線
MEMR#:存儲器讀信號線。
MEMW #:存儲器寫信號線。
IOR#:I/O I/O讀信號線。
IOW #:I/O I/O寫信號線。
1.1.3 中斷和DMA(Direct Memory Access)信號線
IRQx:中斷請求信號線。
DRQx:DMA請求信號線。
DACKx#:DMA應(yīng)答信號線。
1.2 地址空間
PC AT是美國國際商用機器公司(IBM)于1984年發(fā)布、1987年停產(chǎn)的個人電腦產(chǎn)品,正式名稱是IBM 5170 PC AT?!癆T”是英文“先進技術(shù)”(Advanced Technology)的縮寫,這是由于它引入了標準的16位ISA總線以及采用了當時最新的英特爾80286處理器。PC/AT是IBM公司自PC機發(fā)布后的第二代升級產(chǎn)品(也有人認為在此之前發(fā)布的PC/XT是第二代產(chǎn)品)。盡管早期的產(chǎn)品存在著與磁盤存儲部件相關(guān)的瑕疵,它最終還是迅速流行于商用及普通用戶市場,成為了PC工業(yè)最持久的事實標準。至今,由于軟件兼容性的原因,最新的PC系統(tǒng)都還支持PC/AT機的總線結(jié)構(gòu)。
PC/AT系統(tǒng)使用不同的指令訪問存儲器空間和IO端I:1空間,訪問存儲器空間時PC/104總線驅(qū)動MEMR#和MEMW#信號,訪問存儲器空間時PC/104總線驅(qū)動IOR#和IOW #信號。
PC/AT系統(tǒng)有專門的端口訪問指令用于實現(xiàn)端口訪問,Linux用戶程序只需以root權(quán)限調(diào)用ioperm()指定需操作的端口地址范圍,之后即可自由訪問這些端口。由于用于訪問端口的一組宏實際上直接對應(yīng)CPU的端口訪問指令,所以存取效率很高。
1.3 PC/104總線周期
PC/104總線周期分為CPU驅(qū)動和DMA控制器驅(qū)動兩大類,在嵌入式應(yīng)用中較常用的是CPU驅(qū)動的IO讀/IO寫周期。
圖1中采用8 MHz時鐘的標準PC/104總線£Rd大于300 ns,tAF應(yīng)大于250 ns,tRDpw約為500 ns。
2 EP9315(ARM920T)體系
2.1 存儲器結(jié)構(gòu)和地址空間
EP9315是Cirrus Logic公司生產(chǎn)的典型ARM 920 TDM I(Thumb,Debug,M ultiply,Em—bedded ICE macrocel1)32位哈佛結(jié)構(gòu)處理器。EP9315有一個通用存儲器訪問接口,支持SDRAM,SRAM,ROM,及FLASH等不同形式的存儲器,各種存儲器訪問均共享數(shù)據(jù)總線DA和地址總線AD,使用統(tǒng)一的訪問控制邏輯 。
與X86模型不同,ARM 平臺只實現(xiàn)一個物理地址空間,在Bo0T成功后只擁有一個唯一的虛地址空間,CPU不設(shè)立專門的外設(shè)I/O指令,訪問外設(shè)I/O端口和內(nèi)存單元使用相同的指令。
引腳CSn[7:6]和CSn[3:O]用于存儲器芯片的選通,除發(fā)生時間略有差異之外(圖2),基本上可視為地址總線的高位線。
2.2 AHB總線時序和SRAM 接口
AHB主要用于高性能模塊(如CPU、DMA和DSP等)之間的連接,作為SoC的片上系統(tǒng)總線,它包括以下一些特性:單個時鐘邊沿操作;非三態(tài)的實現(xiàn)方式;支持突發(fā)傳輸;支持分段傳輸;支持多個主控制器;可配置32位~128位總線寬度;支持字節(jié)、半字節(jié)和字的傳輸。AHB 系統(tǒng)由主模塊、從模塊和基礎(chǔ)結(jié)構(gòu)(Infrastructure)3部分組成,整個AHB總線上的傳輸都由主模塊發(fā)出,由從模塊負責(zé)回應(yīng)?;A(chǔ)結(jié)構(gòu)則由仲裁器、主模塊到從模塊的多路器、從模塊到主模塊的多路器、譯碼器(decoder)、虛擬從模塊(dummy Slave)、虛擬主模塊(dummy Master)所組成。其互連結(jié)構(gòu)如圖1所示。針對Soc設(shè)計中IP復(fù)用問題提出了一種新的解決辦法。傳統(tǒng)的方法是將特定功能模塊的非標準接口標準化為AHB主/從設(shè)備接口,本文提出了一種新的基于ARM的Soc通用平臺設(shè)計寄存器總線標準接口,這種設(shè)計使整個系統(tǒng)的結(jié)構(gòu)清晰,增強系統(tǒng)的通用性與系統(tǒng)中功能模塊的可移植性。
靜態(tài)存儲控制器SMC(Static Memory Controller)與920T核心通過AHB互聯(lián),支持存儲器的8/16/32位訪問方式。SMC最多可提供8個組,每個組均可支持SRAM,ROM,F(xiàn)LASH EPROM 等存儲器的訪問,各組可以對數(shù)據(jù)總線寬度和速度等參數(shù)獨立配置。圖2描述了SRAM 讀操作時序。
圖中f刪為CSn到RDn的延遲,最大值為3 ns;tDAs是RDn無效前的數(shù)據(jù)總線建立時間,最小值為12+tHcI tRDD 是RDn有效時間,典型值為t HcI K×(W ST1+ 2)。
HCLK是AHB總線的工作頻率,該頻率的高低直接影響系統(tǒng)全局性能,因此通常配置為上限100 MHz,此時相應(yīng)周期£脅 為10 ns.WSTI用于控制sMc對SRAM/R0M 的訪問速度,寄存器SMCBCR0—3, SMCBCR6-7 (地址0x80080000—0x8008001C)的第5-9位分別為相應(yīng)各組的WST1.WST1的默認值為0xlF,即默認情況下SMC使用最低的訪問速度,顯然fRDD 為330 ns,小于PC/104總線中的500 ns(圖1)。
3 PC/104總線實現(xiàn)
3.1 總線驅(qū)動
在EP9315支持的各類總線接口邏輯中,SMC提供的SRAM/ROM 時序與PC/104總線最為接近。將外部設(shè)備所需的PC端口空間和存儲器空間均映射至統(tǒng)一的虛擬空間中即可實現(xiàn)訪問。
注意到PC/104總線使用標準TTL邏輯電平,而EP9315的處理器是3.3 V器件,在極端負載情況下無法保證系統(tǒng)穩(wěn)定工作。TI的雙電源總線收發(fā)器1T45,2T45,16T245等可用于實現(xiàn)電平轉(zhuǎn)換,圖3是1T45的引腳邏輯圖。
地址總線及訪問控制信號均由CPU驅(qū)動,外部設(shè)備始終處于被動接收狀態(tài),正確設(shè)定數(shù)據(jù)流向即可。
數(shù)據(jù)總線信號是時分雙向傳輸?shù)模瑸楸槊獬霈F(xiàn)總線沖突,必須保證除非CPU 透過該收發(fā)器對外設(shè)進行讀訪問,否則收發(fā)器的CPU 側(cè)應(yīng)始終處于高阻狀態(tài)。為此,16T245等具有輸出使能端的器件只需使輸出無效即可,而對于無使能端的收發(fā)器則應(yīng)使CPU側(cè)處于輸入狀態(tài)(高阻)。
確認CPU 已向兼容PC/104總線發(fā)起讀操作的有效方法是檢查RDn的下降沿是否發(fā)生。一旦RDn下降,應(yīng)立即將收發(fā)器置成從外設(shè)流向CPU方向,且輸出使能有效,并至少保持至RDn上升沿之后,以保證可靠讀取。
3.2 端口映射
任取CSi和CSj組用于兼容總線,即可分別實現(xiàn)O-0x3FFFFFF的獨立存儲器地址和IO端口地址??捎玫刂窋?shù)量已經(jīng)遠超出XT系統(tǒng)中的1 M(存儲器)和1 K(IO端口)。
在Linux系統(tǒng)中,io.h文件中聲明了函數(shù)iore—map(),用于將兼容總線上外部資源的物理地址映射到核心虛地址空間中。iounmap()函數(shù)用于取消ioremap()所做的映射。在外部資源成功映射到核心虛地址后,使用指向核心虛地址的指針就可訪問相應(yīng)設(shè)備資源,但顯然這種訪問方式與在X86平臺下差異較大。
將兼容總線視為一個獨立的字符設(shè)備,為其編寫驅(qū)動程序,實現(xiàn)對指定偏移地址的讀寫函數(shù),此處的偏移地址即對應(yīng)PC/104總線中的物理地址。
對inb(),outb()等X86平臺下的常見的底層端口操作函數(shù),可用宏替換的方式轉(zhuǎn)由驅(qū)動中的相應(yīng)讀寫函數(shù)實現(xiàn)。
3.3 總線時序控制
綜合前文所述,盡管SMC的SRAM 訪問時序非常接近PC/lO4總線,但是要實現(xiàn)高兼容性的PC/lO4,仍有兩方面問題需要解決,一是SMC驅(qū)動的SRAM 讀寫速度遠高于PC/104總線,二是為解決電平兼容問題引入的總線收發(fā)器,其數(shù)據(jù)流向和輸出使能需要適當?shù)目刂啤?/P>
ECLK是頻率為27 MHz是時鐘脈沖。
If ECLK’EVENT and ECLK一‘1’then
if(? )then __地址無效
EXoE< 一:1’;
EXDlR< 一‘1’;
EIOR< 一‘1’;
rdreg< 一0;
else
if rdreg< 1 l then
rdreg< 一rdreg+ 1;
EXOE< 一‘0’;
else
rdreg< 一0;
EXDIR< 一‘1’;
EXoE< 一‘1’;
end if;
if rdreg< 2 or rdreg> 6 then
EIOR< 一‘1’;
EIOW < 一‘1’;
elsif rdreg一2 or rdreg= 3 then
if RDn一‘1’then
EIOR< 一‘1’;
EXDIR< 一‘1’;
elsif W Rn一‘1’then
EIOW < 一‘0’;
EXDIR< 一‘1’;
end if;
end if;
上述代碼適當延遲了關(guān)閉雙電源收發(fā)器的輸出使能和數(shù)據(jù)流向重設(shè)時間,保證數(shù)據(jù)總線穩(wěn)定,使CPU 和外設(shè)有足夠的時間進行輸入輸出操作。
圖4中曲線2是兼容PC/104地址空間內(nèi)任意地址信號經(jīng)收發(fā)器緩沖后的譯碼結(jié)果,曲線1和曲線3是對該地址進行讀操作時的RDn和IOR信號。
圖4中RDn由EP9315直接驅(qū)動,原始邏輯電平為3.3 V,實驗電路對該信號電平進行了無時延的處理。
目前主流元器件在速度上都已能兼容PCI總線,因此盡管SMC驅(qū)動的SRAM 讀寫速度高于標準PC/104總線,但只要保證各控制信號問關(guān)系清晰(圖4b),是不會造成總線訪問失敗的。
4 結(jié)束語
利用ARM 系統(tǒng)成本較低,功耗更小,啟動速度快,指令效率高的的特點,兼取PC/AT系統(tǒng)和PC/104總線設(shè)備在產(chǎn)業(yè)化基礎(chǔ)方面的優(yōu)勢,在ARM平臺上構(gòu)建PC/104總線,有助于利用現(xiàn)有資源,保護已有投資。由于ARM 與PC/AT模型在處理器架構(gòu)上有本質(zhì)性的差異,在ARM 平臺上構(gòu)建的PC/104總線在所有的具體應(yīng)用中要做到與標準PC/104規(guī)范完全兼容幾乎是不可能,但是在特定的應(yīng)用需求及確定的操作系統(tǒng)下這種努力是完全可行并且有效的。對于特定的應(yīng)用而言,通常只需顧及PC/104總線時序的一個子集,這就大大降低了系統(tǒng)現(xiàn)實的難度。
QICK