1、引言
嵌入式系統(tǒng)在日常生活中的大量使用,人們也對其性能和速度提出了更高的要求。微控制器和可編程邏輯器件的結(jié)合,更能充分發(fā)揮嵌入式系統(tǒng)的優(yōu)勢。本文設計和實現(xiàn)的微控制器與可編程邏輯器件之間總線讀寫方式通信比傳統(tǒng)的串行通信更可靠、速度更快。下面是一些相關術語的說明。
總線:任何一個微處理器都要與一定數(shù)量的部件和外圍設備連接,但如果將各部件和每一種外圍設備都分別用一組線路與CPU直接連接,那么連線將會錯綜復雜,甚至難以實現(xiàn)。為了簡化硬件電路設計、簡化系統(tǒng)結(jié)構,常用一組線路,配置以適當?shù)慕涌陔娐?,與各部件和外圍設備連接,這組共用的連接線路被稱為總線[2]。采用總線結(jié)構便于部件和設備的擴充,尤其制定了統(tǒng)一的總線標準則容易使不同設備間實現(xiàn)互連。
AVR:ATMEL公司的AVR單片機,是增強型RISC內(nèi)載Flash的單片機,芯片上的Flash存儲器附在用戶的產(chǎn)品中,可隨時編程,再編程,使用戶的產(chǎn)品設計容易,更新?lián)Q代方便。AVR單片機采用增強的RISC結(jié)構 ,使其具有高速處理能力,在一個時鐘周期內(nèi)可執(zhí)行復雜的指令。本系統(tǒng)采用的AVR Mega64L還具有:用32個通用工作寄存器代替累加器,從而可以避免傳統(tǒng)的累加器和存儲器之間的數(shù)據(jù)傳送造成的瓶頸現(xiàn)象;一個時鐘周期執(zhí)行一條指令;可直接訪問8M字節(jié)程序存儲器和8M字節(jié)數(shù)據(jù)存儲器寄存器等特點[3]。
PLD(Programmable Logic Device):PLD分為CPLD(Complex Programmable Logic Device)復雜的可編程邏輯器件和FPGA(Field Programmable Gate Array)現(xiàn)場可編程門陣列兩大類[2、3]。
兩者的功能基本相同,只是實現(xiàn)原理略有不同,所以我們有時可以忽略這兩者的區(qū)別,統(tǒng)稱為可編程邏輯器件或CPLD/FPGA。PLD是一種具有豐富的可編程I/O引腳的可編程邏輯器件,具有在系統(tǒng)可編程、使用方便靈活的特點;不但可實現(xiàn)常規(guī)的邏輯器件功能,還可實現(xiàn)復雜的時序邏輯功能。把PLD應用于嵌入式應用系統(tǒng),同單片機結(jié)合起來更能體現(xiàn)其在系統(tǒng)可編程、使用方便靈活的特點。PLD同單片機接口,可以作為單片機的一個外設,實現(xiàn)單片機所要求的功能。實現(xiàn)了嵌入式應用系統(tǒng)的靈活性,可以大大縮短設計時間,減少PCB面積,也提高了嵌入式應用系統(tǒng)的性能。
VHLD:VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,一種被IEEE和美國國防部確認為標準硬件描述語言。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構、行為、功能和接口。VHDL的程序結(jié)構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分)和內(nèi)部(或稱不可視部分),涉及實體的內(nèi)部功能和算法完成部分[4,5]。在對一個設計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設計就可以直接調(diào)用這個實體。
2、PLD同單片機接口設計
系統(tǒng)中采用的MAX II EPM570 芯片有邏輯單元數(shù)(LE)570個,等效典型宏單元數(shù)440個,最大用戶I/O管腳數(shù)160個,用戶Flash存儲器比特數(shù)8192,tPD1 角對角性能5.5 ns,tPD2最快性能3.7 ns。采用100-pin TQFP封裝。
EPM570同單片機接口原理如圖1所示。
圖1 ATmega64L與EPM570接口示意圖
EPM570同單片機接口設計中,單片機采用Atmel公司的AVR系列的ATmega64L。ATmega64L通過ALE、CS、RD、WE、P0口(數(shù)據(jù)地址復用)同EPM570芯片相連接。ALE:地址鎖存信號;CS:片選信號;RD:讀信號;WR:寫信號;AD0~AD7:數(shù)據(jù)地址信號復用數(shù)據(jù)線。
本系統(tǒng)的設計思想是:在EPM570設置兩個內(nèi)部控制寄存器,通過單片機對兩個控制寄存器的讀寫來完成對其它通信過程的控制。EPM570設置的兩個控制寄存器,可以作內(nèi)部寄存器,也可以直接映射為I/O口,根據(jù)實際需要而進行設置。
本系統(tǒng)設計的關鍵是:在EMP570 上實現(xiàn)的存儲器的讀寫時序要滿足ATmega64L對外部讀寫時序的需要,有關ATmega64L對外部讀寫時序請參考相關資料和ATmega64L的數(shù)據(jù)手冊。
3、PLD同單片機AVR讀寫接口VHDL實現(xiàn)
PLD的設計流程[6,7]一般應包括以下幾部分:
?、?設計輸入。可以采用原理圖輸入、DHL語言描述、EDIF網(wǎng)表讀入或波形輸入等方式。
?、?功能仿真。此時為零延時模式,主要檢驗輸入是否有誤。
?、?編譯。主要完成器件的選取及適配,邏輯的綜合及器件的裝入,延時信息的提取。
?、?后仿真。將編譯產(chǎn)生的延時信息加入到設計中,進行布局布線后的仿真,是與實際器件工作時的情況基本相同的仿真。
?、?編程驗證。有后仿真確認的配置文件下載到PLD相關配置器件中,加入實際激勵,進行測試,以檢查是否完成預定功能。
以上各步驟若出現(xiàn)錯誤現(xiàn)象,則需要重新回到設計階段,修正錯誤輸入或調(diào)整電路,在重復上述過程直到其完全滿足電子系統(tǒng)需要。
本系統(tǒng)中,使用Altera公司提供的集成開發(fā)軟件Quartus II 6.0 進行設計,在進行模塊實現(xiàn)時請參考ATmega64L的數(shù)據(jù)手冊中關于ATmega64L對外部存儲器的讀寫時序。
本設計實現(xiàn) 的VHDL部分源碼如下:
地址鎖存:
寫數(shù)據(jù)進程:
讀數(shù)據(jù)進程:
4、仿真驗證結(jié)果
使用Quartus II 6.0 自帶的仿真軟件仿真結(jié)果如圖2和圖3所示。圖中ale、cs、rd、we、mcu_data 是激勵信號,表示ATmega64L 相應接口信號,conreg1和 conreg2 為EPM570 輸出信號,其目的是為了觀察仿真結(jié)果是否正確,而實際應用中應根據(jù)項目需求而進行添加或是減少相應的I/O口。
圖2是ATmega64L向 EPM570 寫數(shù)據(jù)過程。首先,在片選信號cs為低期間,在ale信號的下降沿,鎖存mcu_data上的數(shù)據(jù)到add內(nèi)部地址鎖存寄存器。然后,在we信號低電平時,把mcu_data (0XAA)的數(shù)據(jù)直接寫到conreg1(B10101010),通過外接指示燈可以直接觀察結(jié)果是否正確,當然,在實際應用中可以把數(shù)據(jù)鎖存到內(nèi)部寄存器中。
圖2寫數(shù)據(jù)0X“AA”到0地址處
圖3是讀數(shù)據(jù)過程。在片選信號為低期間,首先,在ale信號的下降沿,鎖存mcu_data(0X01)數(shù)據(jù)到add內(nèi)部地址鎖存寄存器。然后,在rd信號的低電平期間,把內(nèi)部寄存器地址為0X01的數(shù)據(jù)reg02(0xAA)讀到mcu_data數(shù)據(jù)線上傳回單片機ATmega64L。
圖3 讀地址為0X“01”上的數(shù)據(jù)0x“AA”并傳回數(shù)據(jù)總線
從讀寫數(shù)據(jù)圖中可以看出,ATmega64L對EPM570內(nèi)部數(shù)據(jù)讀寫過程完全滿足ATmega64L數(shù)據(jù)手冊上的時序需要。關于ATmega64L的讀寫時序可以參考ATmega64L數(shù)據(jù)手冊。
5、結(jié)語
本文實現(xiàn)PLD與AVR ATmega64L通信接口設計是筆者設計的一種紡織機械控制設備的一部分,經(jīng)實際驗證完全正確,并已投入生產(chǎn)。簡單地修改該讀寫通信模塊,可應用于多個CPLD或FPGA與單片機通信接口的項目中,本模塊還可以根據(jù)需要擴展為16位、32位地址線的讀寫接口。
本文創(chuàng)新點:充分利用可編程邏輯器件豐富的I/O口和內(nèi)部可編程邏輯資源,通過總線讀寫的方式通訊,使PLD和MCU的通信速度大大提高,同時也提高了嵌入式系統(tǒng)或是工業(yè)控制中的其他相關性能,極大提高產(chǎn)品的競爭力。