程佳佳,賈俊霞(重慶科創(chuàng)職業(yè)學(xué)院,重慶 402160)
基于 CPLD的VHDL語言設(shè)計(jì)優(yōu)化
程佳佳,賈俊霞
(重慶科創(chuàng)職業(yè)學(xué)院,重慶402160)
摘要:通過對(duì)CPLD器件的介紹以及VHDL語言特點(diǎn)的闡述,本文描述和分析了在邏輯電路編程中常見的毛刺信號(hào)電路并給出了相應(yīng)的消除方法、程序和仿真波形。
關(guān)鍵詞:語言;CPLD器件;設(shè)計(jì)
由于市場(chǎng)產(chǎn)品的需求和市場(chǎng)競(jìng)爭(zhēng)的促進(jìn),新的可編程邏輯器件不斷涌現(xiàn),新器件的主要特點(diǎn)是向超高速、高密度、低功耗和低電壓等方向發(fā)展,含多種專用端口和附加功能模塊的FPGA不斷涌現(xiàn)。目前新器件的邏輯規(guī)模已達(dá)數(shù)百萬至千萬門級(jí),工作頻率也越來越高,功耗不斷降低,出現(xiàn)了成為零功耗的CPLD器件。隨著可編程邏輯器件和開發(fā)技術(shù)不斷發(fā)展,EDA技術(shù)已經(jīng)滲透到各行各業(yè)的各個(gè)領(lǐng)域,而CPLD器件正是集成電路設(shè)計(jì)者首選。
CPLD是復(fù)雜可編程邏輯器件,它和簡(jiǎn)單PLD都是乘積項(xiàng)結(jié)構(gòu)器件,也就是由可編程的與陣列和或陣列組成的。簡(jiǎn)單PLD由于陣列規(guī)模小、功能弱、編程不便,基本被淘汰。CPLD器件由于進(jìn)行了擴(kuò)展,內(nèi)部結(jié)構(gòu)更加復(fù)雜,可提供更多的乘積項(xiàng),因而構(gòu)成復(fù)雜的邏輯函數(shù)。
VHD L全名 Very-H igh-SpeedIntegratedCircuitHardware D esc riptionLanguage,即超高速集成電路的硬件描述語言,在電子工程技術(shù)等相關(guān)領(lǐng)域,事實(shí)上VHD L已成為通用硬件描述語言。1995年我國(guó)國(guó)家技術(shù)監(jiān)督局指定的CAD通用技術(shù)規(guī)范推薦VHD L作為我國(guó)電子設(shè)計(jì)自動(dòng)化硬件描述語言的國(guó)家標(biāo)準(zhǔn)。
所謂硬件描述語言,VHDL具有很強(qiáng)的電路描述能力和建模能力,能多個(gè)層次對(duì)數(shù)字系統(tǒng)進(jìn)行建模和描述。它主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,應(yīng)用VHD L進(jìn)行工程設(shè)計(jì)具有自動(dòng)化設(shè)計(jì)程度高、與具體硬件電路無關(guān)和與設(shè)計(jì)平臺(tái)無關(guān)的特性,系統(tǒng)移植性強(qiáng)和修改方便等優(yōu)點(diǎn)。因此VHDL成為了CPLD編程最常用的語言工具。
而正因此,VHDL程序無法精確到電路的門級(jí)電路結(jié)構(gòu),無法精確硬件電路的動(dòng)作。因而導(dǎo)致出現(xiàn)競(jìng)爭(zhēng)冒險(xiǎn)(具體表現(xiàn)即為毛刺現(xiàn)象),嚴(yán)重者會(huì)導(dǎo)致系統(tǒng)的嚴(yán)重故障。本文以下就最易出現(xiàn)毛刺信號(hào)的電路作出詳細(xì)的分析以及給出對(duì)應(yīng)的優(yōu)化設(shè)計(jì)方法。
在數(shù)字邏輯電路中,當(dāng)輸入信號(hào)的狀態(tài)改變時(shí),輸出端可能會(huì)出現(xiàn)不正常的干擾信號(hào),是電路產(chǎn)生錯(cuò)誤的輸出,這種現(xiàn)象稱為競(jìng)爭(zhēng)-冒險(xiǎn)現(xiàn)象。產(chǎn)生競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象的原因主要是門電路的延遲。在VHDL設(shè)計(jì)中,電路的行為很容易用各種功能描述語句描述,但是門級(jí)電路由軟件自動(dòng)綜合布局。因此由于信號(hào)在CPLD的內(nèi)部走線和通過邏輯單元時(shí)造成的延遲及競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象在CPLD的設(shè)計(jì)中是不可避免的。
知道了毛刺產(chǎn)生的條件,就可以通過改變?cè)O(shè)計(jì),破壞其條件來減少毛刺的發(fā)生。還可以對(duì)電路進(jìn)行改進(jìn),以消除毛刺對(duì)系統(tǒng)的影響。濾波法和添加冗余項(xiàng)法在很多數(shù)字電子技術(shù)的教科書中都有介紹,此處不再贅述。也曾有人提出了采樣法和利用格雷碼減少同時(shí)變化信號(hào)數(shù)量的方法,都是不錯(cuò)的方法。但是我們也可以通過VHDL程序本身去消除毛刺。
這種方法是從VHDL語言入手,找出毛刺產(chǎn)生的根本原因,改變程序本身,產(chǎn)生滿足要求的功能模塊,來代替原有的邏輯功能塊。如例1中的由于信號(hào)的不同步而導(dǎo)致了毛刺,弄清楚了這個(gè)原因,則很容易通過同步輸入信號(hào)的方法而消除毛刺。解決方案如下:
process(clk)
begin
if clk’event and clk=’1’then
y<=(a and b) or (c and d);
end process;
而在VHDL語言中,數(shù)據(jù)的載體即數(shù)據(jù)對(duì)象包括常量,變量和信號(hào)。變量和信號(hào)可以實(shí)現(xiàn)賦值。但是信號(hào)是具有實(shí)際物理意義的,可以理解為實(shí)際電路連線中的電信號(hào)的流動(dòng),因此信號(hào)的賦值并不是立即的,而是存在一定的延時(shí)。而下面的程序則是因?yàn)閂HDL語言中賦值語句本身的語言特性而導(dǎo)致了延時(shí)與毛刺現(xiàn)象。
例2
Entity maoci_1 is
Port(clk: in std_logic;
Co:out std_logic);
End;
Architecture one of maoci_1 is
signals:std_logic;
Signal q:std_logic_vector(3 downto 0):="0000";
Begin
Process(clk)
Begin
If s='1' then q<="0101" ;
Elsif clk'event and clk='1' then q<=q-1;
End if;
End process;
s<=q(3);
co<=q(2);
End one;
例2仿真波形毛刺。分析可知例2程序中是由于s值代入的延時(shí)而造成了q的不定狀態(tài)。因此修改設(shè)計(jì),去掉信號(hào)s而直接對(duì)q預(yù)判,消除毛刺。
毛刺信號(hào)的出現(xiàn)經(jīng)常會(huì)影響到整個(gè)邏輯電路的穩(wěn)定性,因此判斷邏輯電路中判斷毛刺是否存在以及如何消除毛刺信號(hào)將是設(shè)計(jì)人員要長(zhǎng)期研究的課題。本文中的方法能有效的消除毛刺,可供VHDL編程設(shè)計(jì)人員參考。
參考文獻(xiàn):
[1]閻石.數(shù)字電子技術(shù)基礎(chǔ)(第五版)[J].高等教育出版社,1983(4).
[2]潘松,王國(guó)棟.VHDL實(shí)用教程〔M〕.電子科技大學(xué)出版社,2000.(1).
[3]崔建明.電工電子EDA仿真技術(shù)[M].高等教育出版社, 2004.
[4]李衍編.EDA技術(shù)入門與提高王行[M].西安電子科技大學(xué)出版社,2005.
[5]王鳳英,崔國(guó)瑋.計(jì)數(shù)器的VHDL設(shè)計(jì)與實(shí)現(xiàn) [M]. 現(xiàn)代電子技術(shù),2007(09).