摘 要:本文介紹了MAX7000系列CPLD器件在DSP接口電路中的應(yīng)用,重點介紹了TMS3202××系列DSP和存儲器,LCD接口的方法,并輔以VHDL源程序的例子。
關(guān)鍵詞:DSP;MAX7000;CPLD;可編程邏輯器件
前言:
Altera公司的產(chǎn)品基本上都屬于CPLD結(jié)構(gòu)。由于它的內(nèi)部連線均采用連續(xù)式互聯(lián)結(jié)構(gòu),即利用同樣長度的金屬線實現(xiàn)邏輯單元之間的連接,所以它具有延時可預(yù)測的優(yōu)點。由于采用了全新的結(jié)構(gòu),先進(jìn)的技術(shù)再加上MAX+PLUSII可編程邏輯的開發(fā)環(huán)境,使得Altera公司的PLD器件不僅具有PLD器件的一般優(yōu)點,而且還有如下一些優(yōu)勢:高性能、高集成度、價格合理、開發(fā)周期較短、可以很方便的進(jìn)行在線編程。
MAX系列是Altera目前最為流行,使用最廣泛的兩個系列之一,因此本文章以MAX7000系列芯片為例介紹了可編程芯片在DSP系統(tǒng)設(shè)計中的應(yīng)用。
MAX7000系列器件的特點
MAX7000系列是高密度,高性能的CMOS CPLD,是在Altera公司的第二代MAX結(jié)構(gòu)基礎(chǔ)上構(gòu)成的,采用先進(jìn)的0.8umCOMS EEPROM技術(shù)制造。MAX7000系列提供600到5000可用門(器件上提供1200-10000門),引腳到引腳的延時為6ns,計數(shù)器頻率可達(dá)151.5MHz。MAX7000系列的-7和-10P速度等級同PCI總線標(biāo)準(zhǔn)一致。MAX7000系列的高密度器件稱為MAX7000E系列。它們有幾個加強(qiáng)的特性:附加全局時鐘,附加輸入使能控制,增加連線資源、快速輸入寄存器和可編程的輸出電壓擺動率。
MAX7000是用CMOS EEPROM單元實現(xiàn)邏輯函數(shù)的。可編程的MAX7000結(jié)構(gòu)容納各種各樣的,有獨(dú)立的組合邏輯和時序邏輯函數(shù)。在設(shè)計開發(fā)和調(diào)整階段,MAX7000器件可以快速而有效地重新編程,并保證可編程的擦除100次。
DSP系統(tǒng)結(jié)構(gòu)
在進(jìn)行DSP系統(tǒng)設(shè)計時采用CPLD來實現(xiàn)DSP和其他外圍芯片的接口電路的優(yōu)點主要是硬件設(shè)計簡單,因為CPLD的管腳具有重定義的功能,這使得PCB板的設(shè)計要簡化很多;同時因為MAX7000系列CPLD的功能比較強(qiáng)大,可以很容易實現(xiàn)地址譯碼、等待時序的插入以及這種簡單的總線轉(zhuǎn)換,一般用一塊CPLD就可以實現(xiàn)系統(tǒng)所有的接口電路。它的功能框圖如下:
下面從等待時序的產(chǎn)生、地址譯碼和LCD接口電路的實現(xiàn)幾個方面來舉例說明。
用CPLD產(chǎn)生等待時序
TMS320C2X支持與慢速外設(shè)接口的硬件等待狀態(tài)插入。當(dāng)與慢速外設(shè)接口時,系統(tǒng)必須提供能產(chǎn)生等待狀態(tài)的硬件電路。外設(shè)存取的速度越慢,所需插入的等待狀態(tài)數(shù)量就越多。那么,如何根據(jù)外設(shè)存取速度來確定所需的等待數(shù)可以由下式確定:
設(shè)t為外設(shè)訪問時間
TMS32020 [200(N-1)+85]ns
TMS320C25-40 [100(N-1)+40]ns
TMS320C25-50 [80(N-1)+29]ns
假設(shè)設(shè)計的系統(tǒng)在訪問程序空間時需要加入兩個等待,I/O空間和數(shù)據(jù)空間則是全速。用VHDL語言描述如下:
—— generate wait state for low speed interface
g_wait_prog:
PROCESS (clockout, reset)
BEGIN
IF ((res_cpu = ‘0‘) or (ps = ‘1‘))THEN
progwaitclock <= 0;
ELSIF (clockout‘EVENT AND clockout= ‘0‘) THEN
IF (ps = ‘0‘) THEN
IF progwaitclock = 2 THEN
progwaitclock <= 0;
ELSE
progwaitclock <= progwaitclock + 1;
END IF;
ELSE
progwaitclock <= progwaitclock ;
END IF;
END IF;
END PROCESS g_wait_prog;
—— generate ready signal
PROCESS
BEGIN
IF ((progwaitclock = 0)and(lcdwaitclock = 0)) THEN
ready <= ‘1‘;
ELSE
ready <= ‘0‘;
END IF;
END PROCESS ;
Clockout為CPU的時鐘輸出信號,信號量progwaitclock是用來計數(shù)clockout的個數(shù),當(dāng)CPU訪問程序空間時,PS為低電平,progwaitclock開始計數(shù),當(dāng)progwaitclock的值不為0時ready為高,CPU等待外部設(shè)備就緒,當(dāng)progwaitclock計數(shù)到要等待的個數(shù)時,progwaitclock復(fù)位為零,ready變?yōu)榈?,CPU等待結(jié)束。
用CPLD實現(xiàn)存儲器接口
存儲器接口包括ROM接口和RAM接口兩種。ROM主要指PROM和EPROM,而RAM主要是靜態(tài)RAM(SRAM)。設(shè)計存儲器接口時主要考慮到存儲器速度,以確定需要插入幾個等待狀態(tài),同時還要考慮到地址譯碼,地址空間分配的問題。
1 快速PROM/EPROM接口
快速PROM/EPROM(存取時間 35ns)可直接和TMS320C2××接口而不用加入等待,但要考慮到地址譯碼的問題。
2 慢速EPROM/EEPROM/FLASH MEMORY的接口
對于慢速器件,在和DSP這種較快的處理器接口的時候要加入合適的等待周期,同時還要考慮地址譯碼的問題。
3 快速SRAM接口
TMS320C2××既可將SRAM用作程序存儲器,也可用作數(shù)據(jù)存儲器。不管是程序空間還是數(shù)據(jù)空間,它都只要考慮譯碼的問題,用正確的線片選即可,如程序空間用PS片選,而數(shù)據(jù)空間用DS片選。
4 程序和數(shù)據(jù)公用SRAM
在很多時候,為了方便調(diào)試不但要擴(kuò)展程序SRAM也要擴(kuò)展數(shù)據(jù)SRAM。因為TMS320C2××分別用PS和DS來選程序和數(shù)據(jù)空間,所以一般的做法是用PS和DS分別片選不同的芯片,為了使DSP有足夠的程序和地址空間,我們需要多片存儲器芯片,這樣,會給PCB布線的時候帶來很大的麻煩。因為采用了CPLD來進(jìn)行譯碼,我們可以很方便的用一塊容量較大的SRAM,通過合適的譯碼電路使它的空間能分開,既有程序空間又有數(shù)據(jù)空間。下以CY7C1024-15為例來說明:
—— ram address allocation.
—— pro_data = 1 means select 8000H——ffffH(data);
—— pro_data = 0 means select 0000H——7fffH(program);
PROCESS (ds,ps)
BEGIN
IF((strb= ‘0‘)and(ds = ‘1‘)and(ps = ‘0‘)) THEN
pro_data <= ‘0‘;
ELSIF((strb= ‘0‘)and(ds = ‘0‘)and(ps = ‘1‘)) THEN
pro_data <= ‘1‘;
ELSE
pro_data <= ‘0‘;
END IF;
END PROCESS;
—— ram control line.
control:
PROCESS (we, w/r, ps, ds, ios, br, strb)
BEGIN
IF strb = "0" THEN
IF ((ds = ‘1‘)and(ps = ‘0‘))or((ds = ‘1‘)and(ps = ‘0‘)) THEN
ram_cs <= "0";
ram_w/r <= w/r;
ram_oe <= we;
ELSE
ram_cs <= "1";
ram_w/r <= "1";
ram_oe <= "1";
END IF;
ELSE
ram_cs <= "1";
ram_w/r <= "1";
ram_oe <= "1";
END IF;
CY7C1021是Cypress公司生產(chǎn)的64k×16bit Static RAM,以上程序要完成的功能是讓一塊芯片的64k空間中的低端32k為程序空間,另外32k為數(shù)據(jù)空間。程序中的pro_data接CY7C1021的最高位地址線A15,當(dāng)ps為低時pro_data為低電平,選中RAM的低32k空間,當(dāng)ds為低時pro_data為高電平,選中RAM的高32k空間,ram_cs、ram_w/r、ram_oe分別接CY7C1021的片選、讀、寫線。
用CPLD實現(xiàn)LCD接口電路
我們常用的LCD有很多種,如段型、點陣型,這兒主要介紹如何用CPLD來實現(xiàn)DSP和點陣型LCD的接口。由于點陣型液晶顯示器的引線多,用戶使用極不方便,所以制造商將點陣型液晶顯示器做在一塊板上成套出售,這種產(chǎn)品稱為液晶顯示模塊。在液晶顯示模塊上裝配好了液晶顯示驅(qū)動電路和分壓電路,并提供驅(qū)動電路的接口,這使得液晶顯示模塊和微處理器的接口十分方便。它在結(jié)構(gòu)上可分為接口、控制和輸出三大部分。以深圳天馬公司的液晶模塊為例,簡單介紹它的接口。它一共有11條信號線:
RS用于寄存器選擇,低電平選擇指令寄存器,高電平選擇數(shù)據(jù)寄存器。
R/W為讀/寫控制端,低電平時寫顯示模塊,把CPU的數(shù)據(jù)寫入顯示模塊;高電平讀顯示模塊,把顯示模塊的數(shù)讀回CPU。
E為允許輸入信號線(數(shù)據(jù)讀寫操作允許信號),高電平有效。
D0-D7為數(shù)據(jù)線。
相比較DSP而言,LCD顯示模塊是慢速器件,在設(shè)計接口電路時除了要考慮它的接口時序匹配外還要考慮加入合適的等待周期。在下面給出的例子中地址線a0用來控制是讀還是寫,a1用來選擇數(shù)據(jù)寄存器還是控制寄存器。Lcd_rs接到LCD模塊的RS管腳,lcd_wr接到LCD模塊的W/R管腳,lcd_e接到E管腳。程序中的high_adr是DSP地址線高3位a15-a13的組合,在這個例子程序中LCD模塊的操作地址被映射到DSP的IO空間的0x2000-0x3fff。
—— lcd interface :
—— input : a1(lcd_rs), a0(lcd_wr) ,we, wr, ios, strb ;
—— a1,a0 => "00" : write command
—— a1,a0 => "01" : read AC value
—— a1,a0 => "10" : write data
—— a1,a0 => "11" : read data
—— lcd_rs : select register bank ‘1‘ for data, ‘0‘ for command
—— lcd_wr : write/read control ‘1‘ for read, ‘0‘ for write
—— lcd_e : enable signal; ‘1‘ for read , ‘1‘ to ‘0‘ write data in
lcd_en:
PROCESS (we, wr, ios, strb)
BEGIN
IF ((strb = ‘0‘) and (ios = ‘0‘)) THEN
IF (high_adr = "001") THEN
lcd_rs <= a1;
lcd_wr <= a0;
lcd_e <= (not (we or wr));
ELSE
lcd_rs <= ‘0‘;
lcd_wr <= ‘0‘;
lcd_e <= ‘0‘;
END IF;
ELSE
lcd_rs <= ‘0‘;
lcd_wr <= ‘0‘;
lcd_e <= ‘0‘;
END IF;
END PROCESS lcd_en;
—— generate wait state for low speed interface
g_lcd_wait:
PROCESS (clockout, reset1 )
BEGIN
IF ((reset1 = ‘0‘)or(not((ios = ‘0‘) and (high_adr = "001")))) THEN
lcdwaitclock <= 0;
ELSIF (clockout‘EVENT AND clockout= ‘0‘) THEN
IF ((ios = ‘0‘) and (high_adr = "001")) THEN
IF lcdwaitclock = 5 THEN
lcdwaitclock <= 0;
ELSE
lcdwaitclock <= lcdwaitclock + 1;
END IF;
ELSE
lcdwaitclock <= 0;
END IF;
END IF;
END PROCESS g_lcd_wait;
用CPLD實現(xiàn)鍵盤接口電路
DSP和鍵盤的接口可以用專用的鍵盤接口芯片來實現(xiàn),但如果是要識別的鍵不是很多,用一塊專門的鍵盤接口芯片就顯得有些多余,用一塊CPLD附帶就能實現(xiàn)鍵盤接口,它可以把鍵碼的識別映射到DSP的一個IO空間,然后通過讀這個IO地址來判斷是否有鍵按下,它也可以很方便的實現(xiàn)按鍵中斷,所以的鍵通過與的關(guān)系產(chǎn)生一個信號,這個信號連到CPU的中斷輸入管腳,當(dāng)有鍵按下時,這個信號發(fā)生調(diào)變觸發(fā)CPU的中斷。同時它還可以很容易實現(xiàn)硬件消抖。因為這部分比較簡單,故不再舉例說明。
仿真波形
如圖所示為以上VHDL程序在MAXPLUSII中編譯仿真的結(jié)果,仿真僅僅給出了每個功能模塊的部分波形,圖中顯示了當(dāng)訪問程序空間時,pro_data為低電平,ready保持兩個時鐘周期的低電平使得CPU總線插入兩個周期的等待。圖中還顯示了當(dāng)訪問IO空間的0x2002地址時的波形,對這個地址進(jìn)行讀操作是從LCD的控制寄存器讀入數(shù)據(jù),這時ready保持5個時鐘周期的低電平來讓CPU插入5個周期的等待,在這個期間lcd_wr保持高電平表示對LCD進(jìn)行讀操作,lcd_rs保持低電平表示選擇LCD的控制寄存器。
結(jié)論
芯片的設(shè)計、生產(chǎn)和制造技術(shù)的發(fā)展使得CPLD的在各種設(shè)計中有越來越多的應(yīng)用,而隨著DSP芯片性能價格比和開發(fā)手段的不斷提高,DSP已在通信與信息系統(tǒng)、信號與信息處理、自動控制、雷達(dá)、軍事、航空航天、醫(yī)療、家用電器等許多領(lǐng)域也得到廣泛的應(yīng)用。DSP的高速度和期復(fù)雜的接口時序使得在設(shè)計DSP系統(tǒng)時往往會難于設(shè)計DSP和外圍電路的接口,本文以存儲器,LCD等為例簡單介紹了MAX7000系列在DSP系統(tǒng)中的應(yīng)用,并輔有VHDL實現(xiàn)的例子,通過在這方面的實踐應(yīng)用,總體感覺用CPLD來處理DSP的外圍接口電路很方便,因為它的IO管腳幾乎可以隨意分配,可給PCB布線帶來很大的方便;尤其在調(diào)試的時候,甚至不用斷電就可以重新向CPLD中寫入新的邏輯關(guān)系就可以調(diào)試。