章 超,王新華,郭淑琴
(1.浙江工業(yè)大學(xué)信息學(xué)院,浙江杭州310023;2.浙江科技學(xué)院信息學(xué)院,浙江 杭州310023)
隨著EDA技術(shù)的發(fā)展,很多器件的功能都可以通過CPLD/FPGA實現(xiàn)。通過使用VHDL/Verilog-HDL語言,可以實現(xiàn)所要求的功能。PC104總線是國際上最早的嵌入式計算機(jī)總線標(biāo)準(zhǔn),是一種專門為嵌入式控制而定義的工業(yè)控制總線。在使用中,PC104總線具有良好的抗振性能。在嵌入式系統(tǒng)中,PC104總現(xiàn)在很多領(lǐng)域都得到很廣泛的應(yīng)用。復(fù)雜可編程邏輯單元幾乎適用于所有的陣列和各種規(guī)模的書記集成電路,它以其編程方便、集成化高、速度快、價格低等優(yōu)點(diǎn)越來越受設(shè)計者的喜愛[1]。在本文設(shè)計中,PC104總線主要實現(xiàn)ARM9芯片與外部設(shè)備之間的聯(lián)系,使ARM9芯片實現(xiàn)對外部設(shè)備之間的操作。
PC104是一種8/16位總線系統(tǒng),總線時鐘為6~8MHz,周期的占空比為50% ±5%,4個或5個時鐘脈沖即可完成一次完整的總線訪問[2]。
系統(tǒng)通過CPLD芯片來實現(xiàn)PC104總線。由于有些外部設(shè)備的電平與CPLD的電平不同,所以這里需要電平轉(zhuǎn)換芯片74ALVC164245來實現(xiàn)電平之間的轉(zhuǎn)換。所以硬件部分主要由CPLD部分和3塊74ALVC164245芯片構(gòu)成。CPLD部分如圖1所示。CPLD里面的程序主要由VHDL編寫而成。VHDL屬于硬件描述語言,用于完成專用集成電路的設(shè)計和實現(xiàn);主要用于描述數(shù)字系統(tǒng)結(jié)構(gòu)、行為,功能和接口;是目前在數(shù)字設(shè)計領(lǐng)域廣為接受的硬件描述性語言之一[3]。ARM9芯片的ADDR[23..0]和DATA[15..0]與3塊電平轉(zhuǎn)換芯片74ALVC164245直接相連。
CPLD芯片主要實現(xiàn)I/O口讀寫、MEMORY讀寫以及外部中斷響應(yīng)。如圖1所示中從ARM9芯片接過來的主要控制信號有:nRESET、ADDR20、ADDR21、ADDR22、nOE、nWE、nGCS2、nGCS5、nGCS7、CIRQ9、CIRQ10、CIRQ11等。而CPLD的時鐘為PC104_CLK,為50MHz。nRESET為復(fù)位信號,低電平有效;nGCS2、nGCS5和nGCS7為3個片選信號,低電平有效;nOE和nWE分別為讀和寫控制信號,分別控制I/O口和MEMORY的讀和寫;CIRQ9~CIRQ12分別為4個中斷;ADDR20、ADDR21和ADDR22用來判斷一些事件發(fā)生時的一些狀態(tài),如ADDR22的高低電平用來判斷是對I/O操作還是對MEMORY進(jìn)行操作,CIRQ9~CIRQ12為外部中斷信號,ADDR20和ADDR21的高低用于判斷中斷的類型和輸出。而IOCHRDY信號則對PC104總線地址鎖存信號C_BALE進(jìn)行控制以及影響nWAIT信號的輸出。ARM9芯片的ADDR[23..0]和DATA[15..0]與電平轉(zhuǎn)換芯片直接相連。通過 CPLD的信號輸入來PC104_CS、DATA_DIR來控制電平轉(zhuǎn)換芯片74ALVC164245的方向,以此來確定是進(jìn)行讀操作還是寫操作。從圖1中可以看出本設(shè)計使用的CPLD芯片型號是EPM3032ATI44-10。此型號芯片內(nèi)有32個宏單元、32個寄存器。而在此設(shè)計中,宏單元使用了32個,寄存器使用了28個。
圖1 CPLD電路
PC104總線功能主要由CPLD實現(xiàn),通過VHDL語言,可以很好地實現(xiàn)此設(shè)計所要求的時序。在PC104總線的設(shè)計中,設(shè)計的重點(diǎn)是總線控制器的實現(xiàn),能否完成PC104總線驅(qū)動,關(guān)鍵在于控制器能否正常運(yùn)行。PC104總線控制器的工作流程:控制器等待選通信號有效,如果nGCS有效則鎖存地址并保持ARM總線狀態(tài),然后進(jìn)行讀寫操作判斷,最后把數(shù)據(jù)和相應(yīng)得控制信號加在PC104總線上,完成操作后釋放ARM總線。
CPLD主程序主要有5個進(jìn)程組成。進(jìn)程1主要由一個狀態(tài)機(jī)組成,狀態(tài)機(jī)主要完成ARM9對I/O口及MEMORY之間的讀寫操作。這是最主要的部分。進(jìn)程2主要是對IDE口進(jìn)行操作,主要確定IDE口的片選信號。進(jìn)程3主要根據(jù)兩根數(shù)據(jù)總線的電平判斷所要輸出的外部中斷信號。進(jìn)程4主要根據(jù)計數(shù)器1來對CPLD芯片的頻率進(jìn)行4分頻和8分頻。進(jìn)程5則是定義一個計數(shù)器,確定進(jìn)程1中IOCHRDY的時長。
流程圖如圖2所示,在初始化狀態(tài)里,主要對CPLD輸出信號進(jìn)行初始化賦值,使ARM9芯片保持對外寫操作狀態(tài),以免發(fā)生沖突。然后進(jìn)行鎖存所存,通過ADDR22的電平高低判斷是I/O口操作還是MEMERY操作;然后通過nOE和nWE判斷讀寫操作。在片選操作完成后,再對輸出信號賦值,初始化信號,等待下一次片選信號來臨。
圖2主要介紹了進(jìn)程1的實現(xiàn)過程。實際中,此程序定義了7個狀態(tài)。
TYPE state_type IS(0,1,2,3,4,5,6)。
狀態(tài)0主要進(jìn)行CPLD選通,以及對I/O還是MEMORY操作進(jìn)行判斷。
狀態(tài)1通過對nOE和nWE信號進(jìn)行判斷以確定讀寫操作。
狀態(tài)2、3、4主要通過IOCHRDY信號確定nWAIT信號。
圖2 程序流程圖
狀態(tài)5是對I/O和MEMORY的CPLD讀寫輸出信號的初始化。
狀態(tài)6是對PC104選通信號、I/O口選通信號、MEMORY選通信號和數(shù)據(jù)選通信號(CPLD輸出信號,連接于電平轉(zhuǎn)換芯片上)的初始化。
進(jìn)程2,主要是通過nGCS2和IDECS0確定IDECS信號。
進(jìn)程3,主要是通過兩根數(shù)據(jù)線的電平確定4個外部中斷信號。
進(jìn)程4,主要是通過計數(shù)器1來進(jìn)行PC104OSC和C_BCLK。
通過對計數(shù)器1,對CPLD主頻進(jìn)行4分頻和8分頻。其均為PC104總線接口提供時鐘信號。其中,8分頻信號為系統(tǒng)總線提供時鐘信號,4分頻信號為振蕩器信號線提供時鐘信號。
進(jìn)程5,主要是通過C_BCLK信號來確定IOCHRDY為低電平的時間。其確定時間主要應(yīng)用進(jìn)程1的狀態(tài)3中。
通過調(diào)用庫可以使nWAIT信號要求在高電平時是高阻態(tài),即“Z”。
LIBRARY altera;
USE altera.altera_primitives_components.all;
MEMORY進(jìn)行寫操作的仿真圖如圖3所示,I/O讀寫與此圖相類似,可以看出仿真結(jié)果很符合PC104總線時序要求。
圖3 仿真時序圖
ARM系統(tǒng)成本較低、功耗更小、啟動速度快、指令效率高的特點(diǎn),通過PC104總線,硬件方面具有很大的優(yōu)勢。通過CPLD芯片,可以很好地實現(xiàn)PC104總線的功能。
[1] 周興華.CPLD入門與實踐[M].北京:電力出版社,2011:2-8.
[2] 王庭堯.以太技術(shù)與應(yīng)用[M].北京:郵電出版社,2005:151-159.
[3] 孟慶海,張洲.VHDL基礎(chǔ)及經(jīng)典實例開發(fā)[M].西安:西安交通大學(xué)出版社,2008:3-12.
[4] 姚亮,王宏志.基于CPLD的PC/104總線接口實現(xiàn)[J].長春工業(yè)大學(xué)學(xué)報(自然科學(xué)版),2008,29(4):384-390.
[5] 占紅武,胥芳,史偉明.基于ARM體系的PC/104總線設(shè)計[J].機(jī)電工程,2008,25(1):11-13.