人類社會已進入到高度發達的信息化社會,信息社會的發展離不開電子產品的進步。 現代電子產品在性能提高、復雜度增大的同時,價格卻一直呈下降趨勢,而且產品更新換代的步伐 也越來越快,實現這種進步的主要原因就是生產制造技術和電子設計技術的發展。前者以微細加工 技術為代表,目前已進展到深亞微米階段,可以在幾平方厘米的芯片上集成數千萬個晶體管;后者 的核心就是EDA技術。EDA是指以計算機為工作平臺,融合了應用電子技術、計算機技術、智能化 技術最新成果而研制成的電子CAD通用軟件包,主要能輔助進行三方面的設計工作:IC設計,電子 電路設計以及PCB設計。沒有EDA技術的支持,想要完成上述超大規模集成電路的設計制造是不可 想象的,反過來,生產制造技術的不斷進步又必將對EDA技術提出新的要求。
1.EDA技術的當今情況
隨著微電子技術和計算機技術的不斷發展,在涉及通信、國防、航天、工業自動化、儀器儀表等領域工作中,EDA技術的含量以驚人的速度上升,從而使它成為當今電子技術發展的前沿之一。
2. EDA技術的發展
回顧近30年電子設計技術的發展歷程,可將EDA技術分為三個階段。 (1) 七十年代為CAD階段,這一階段人們開始用計算機輔助進行IC版圖編輯和PCB布局布 線,取代了手工操作,產生了計算機輔助設計的概念。 (2)八十年代為CAE階段,與CAD相比,除了純粹的圖形繪制功能外,又增加了電路功能設 計和結構設計,并且通過電氣連接網絡表將兩者結合在一起,以實現工程設計,這就是計算機輔助 工程的概念。CAE的主要功能是:原理圖輸入,邏輯仿真,電路分析,自動布局布線,PCB后分 析。 (3)九十年代為ESDA階段。盡管CAD/CAE技術取得了巨大的成功,但并沒有把人從繁重的 設計工作中徹底解放出來。在整個設計過程中,自動化和智能化程度還不高,各種EDA軟件界面千 差萬別,學習使用困難,并且互不兼容,直接影響到設計環節間的銜接。基于以上不足,人們開始 追求貫徹整個設計過程的自動化,這就是ESDA即電子系統設計自動化。
從目前的EDA技術來看,其發展趨勢是政府重視、使用普及、應用文泛、工具多樣、軟件功能強大。
中國EDA市場已漸趨成熟,不過大部分設計工程師面向的是PC主板和小型ASIC領域,僅有小部分(約11%)的設計人員工發復雜的片上系統器件。為了與***和美國的設計工程師形成更有力的競爭,中國的設計隊伍有必要購入一些最新的EDA技術。
在信息通信領域,要優先發展高速寬帶信息網、深亞微米集成電路、新型元器件、計算機及軟件技術、第三代移動通信技術、信息管理、信息安全技術,積極開拓以數字技術、網絡技術為基礎的新一代信息產品,發展新興產業,培育新的經濟增長點。要大力推進制造業信息化,積極開展計算機輔助設計(CAD)、計算機輔助工程(CAE)、計算機輔助工藝(CAPP)、計算機機輔助制造(CAM)、產品數據管理(PDM)、制造資源計劃(MRPII)及企業資源管理(ERP)等。有條件的企業可開展“網絡制造”,便于合作設計、合作制造,參與國內和國際競爭。開展“數控化”工程和“數字化”工程。自動化儀表的技術發展趨勢的測試技術、控制技術與計算機技術、通信技術進一步融合,形成測量、控制、通信與計算機(M3C)結構。在ASIC和PLD設計方面,向超高速、高密度、低功耗、低電壓方向發展。
外設技術與EDA工程相結合的市場前景看好,如組合超大屏幕的相關連接,多屏幕技術也有所發展。
中國自1995年以來加速開發半導體產業,先后建立了幾所設計中心,推動系列設計活動以應對亞太地區其它EDA市場的競爭。
在EDA軟件開發方面,目前主要集中在美國。但各國也正在努力開發相應的工具。日本、韓國都有ASIC設計工具,但不對外開放 。中國華大集成電路設計中心,也提供IC設計軟件,但性能不是很強。相信在不久的將來會有更多更好的設計工具有各地開花并結果。據最新統計顯示,中國和印度正在成為電子設計自動化領域發展最快的兩個市場,年復合增長率分別達到了50%和30%。
EDA技術發展迅猛,完全可以用日新月異來描述。EDA技術的應用廣泛,現在已涉及到各行各業。EDA水平不斷提高,設計工具趨于完美的地步。EDA市場日趨成熟,但我國的研發水平沿很有限,需迎頭趕上。 (1)
3 ESDA技術的基本特征
ESDA代表了當今電子設計技術的最新發展方向,它的基本特征是:設計人員按照“自頂 向下”的設計方法,對整個系統進行方案設計和功能劃分,系統的關鍵電路用一片或幾片專用集成 電路(ASIC)實現,然后采用硬件描述語言(HDL)完成系統行為級設計,最后通過綜合器和適配 器生成最終的目標器件。這樣的設計方法被稱為高層次的電子設計方法,具體流程還將在4.2節中 做深入介紹。下面介紹與ESDA基本特征有關的幾個概念。
3.1 “自頂向下”的設計方法
10年前,電子設計的基本思路還是選擇標準集成電路“自底向上”(Bottom-Up)地構 造出一個新的系統,這樣的設計方法就如同一磚一瓦地建造金字塔,不僅效率低、成本高而且 還容 易出錯。
高層次設計給我們提供了一種“自頂向下”(Top-Down)的全新的設計方法,這種設計 方法首先從系統設計入手,在頂層進行功能方框圖的劃分和結構設計。在方框圖一級進行仿真、糾 錯,并用硬件描述語言對高層次的系統行為進行描述,在系統一級進行驗證。然后用綜合優化工具 生成具體門電路的網表,其對應的物理實現級可以是印刷電路板或專用集成電路。由于設計的主要 仿真和調試過程是在高層次上完成的,這不僅有利于早期發現結構設計上的錯誤,避免設計工作的 浪費,而且也減少了邏輯功能仿真的工作量,提高了設計的一次成功率。 (2)
3.2 ASIC設計
現代電子產品的復雜度日益加深,一個電子系統可能由數萬個中小規模集成電路構 成,這就帶來了體積大、功耗大、可靠性差的問題,解決這一問題的有效方法就是采用ASIC (Application Specific Integrated Circuits)芯片進行設計。ASIC按照設計方法的不同可分為:全定制ASIC,半定制ASIC,可編程ASIC(也稱為可編程邏輯器件)。
設計全定制ASIC芯片時,設計師要定義芯片上所有晶體管的幾何圖形和工藝規則,最 后將設計結果交由IC廠家掩膜制造完成。優點是:芯片可以獲得最優的性能,即面積利用率高、速度快、功耗低。缺點是:開發周期長,費用高,只適合大批量產品開發。
半定制ASIC芯片的版圖設計方法有所不同,分為門陣列設計法和標準單元設計法,這 兩種方法都是約束性的設計方法,其主要目的就是簡化設計,以犧牲芯片性能為代價來縮短開發時間。
可編程邏輯芯片與上述掩膜ASIC的不同之處在于:設計人員完成版圖設計后,在實驗 室內就可以燒制出自己的芯片,無須IC廠家的參與,大大縮短了開發周期。
可編程邏輯器件自七十年代以來,經歷了PAL、GAL、CPLD、FPGA幾個發展階段,其中 CPLD/FPGA屬高密度可編程邏輯器件,目前集成度已高達200萬門/片,它將掩膜ASIC集成度高的 優點和可編程邏輯器件設計生產方便的特點結合在一起,特別適合于樣品研制或小批量產品開發,使產品能以最快的速度上市,而當市場擴大時,它可以很容易的轉由掩膜ASIC實現,因此開發風 險也大為降低。
上述ASIC芯片,尤其是CPLD/FPGA器件,已成為現代高層次電子設計方法的實現載體。
3.3 硬件描述語言
硬件描述語言(HDL-Hardware Description Language)是一種用于設計硬件電子 系統的計算機語言,它用軟件編程的方式來描述電子系統的邏輯功能、電路結構和連接形式,與傳 統的門級描述方式相比,它更適合大規模系統的設計。例如一個32位的加法器,利用圖形輸入軟件 需要輸入500至1000個門,而利用VHDL語言只需要書寫一行A=B+C即可,而且VHDL語言可讀性強, 易于修改和發現錯誤。早期的硬件描述語言,如ABEL-HDL、AHDL,是由不同的EDA廠商開發的,互 相不兼容,而且不支持多層次設計,層次間翻譯工作要由人工完成。為了克服以上缺陷,1985年 美國國防部正式推出了VHDL(Very High Speed IC Hardware Description Language)語言, 1987年IEEE采納VHDL為硬件描述語言標準(IEEE STD-1076)。
VHDL是一種全方位的硬件描述語言,包括系統行為級、寄存器傳輸級和邏輯門級多個 設計層次,支持結構、數據流、行為三種描述形式的混合描述,因此VHDL幾乎覆蓋了以往各種硬件 描述語言的功能,整個自頂向下或自底向上的電路設計過程都可以用VHDL來完成。另外,VHDL還 具有以下優點: VHDL的寬范圍描述能力使它成為高層次設計的核心,將設計人員的工作重心提高到了系統功 能的實現與調試,只需花較少的精力用于物理實現。 VHDL可以用簡潔明確的代碼描述來進行復雜控制邏輯的設計,靈活且方便,而且也便于設計 結果的交流、保存和重用。 VHDL的設計不依賴于特定的器件,方便了工藝的轉換。 VHDL是一個標準語言,為眾多的EDA廠商支持,因此移植性好。
3.4 系統框架結構
EDA系統框架結構(Framework)是一套配置和使用EDA軟件包的規范,目前主要的EDA 系統都建立了框架結構,如Cadence公司的Design Framework,Mentor公司的Falcon Framework等,這些框架結構都遵守國際CFI組織(CAD Framework Initiative)制定的統一技術 標準。Framework能將來自不同EDA廠商的工具軟件進行優化組合,集成在一個易于管理的統一的 環境之下,而且還支持任務之間、設計師之間在整個產品開發過程中實現信息的傳輸與共享,這是 并行工程和Top-Down設計方法的實現基礎。
4 EDA技術的基本設計方法
EDA技術的每一次進步、都引起了設計層次上的一個飛躍,可以用圖1說明。
物理級設計主要指IC版圖設計,一般由半導體廠家完成,對電手工程師并沒有太大的意義,因此本文重點介紹電路級設計和系統級設計。
4.1 電路級設計
電路級設計工作流程如圖2所示,電子工程師接受系統設計任務后,首先確定設計方案,同時要選擇能實現該方案的合適 元器件,然后根據具體的元器件設計電路原理圖。接著進行第一次仿真,包括數字電路的邏輯模擬、故障分析、模擬電路的交直流分析、瞬態分析。系統在進行仿真時,必須要有元件模型庫的支 持,計算機上模擬的輸入輸出波形代替了實際電路調試中的信號源和示波器。這一次仿真主要是檢 驗設計方案在功能方面的正確性。
仿真通過后,根據原理圖產生的電氣連接網絡表進行PCB板的自動布局布線。在制作 PCB板之前還可以進行后分析,包括熱分析、噪聲及竄擾分析、電磁兼容分析、可靠性分析等,并且可以將分析后的結果參數反標回電路圖,進行第二次仿真,也稱為后仿真,這一次仿真主要是檢 驗PCB板在實際工作環境中的可行性。
由此可見,電路級的EDA技術使電子工程師在實際的電子系統產生之前,就可以全面地 了解系統的功能特性和物理特性,從而將開發過程中出現的缺陷消滅在設計階段,不僅縮短了開發時間,也降低了開發成本。 (3)
4.2 系統級設計
進入90年代以來,電子信息類產品的開發出現了兩個明顯的特點:一是產品的復雜程 度加深,二是產品的上市時限緊迫。然而電路級設計本質上是基于門級描述的單層次設計,設計的所有工作(包括設計輸入,仿真和分析,設計修改等)都是在基本邏輯門這一層次上進行的,顯然 這種設計方法不能適應新的形勢,為此引入了一種高層次的電子設計方法,也稱為系統級的設計方法。
高層次設計是一種“概念驅動式”設計,設計人員無須通過門級原理圖描述電路,而是 針對設計目標進行功能描述,由于擺脫了電路細節的束縛,設計人員可以把精力集中于創造性的概念構思與方案上,一旦這些概念構思以高層次描述的形式輸入計算機后,EDA系統就能以規則驅動 的方式自動完成整個設計。這樣,新的概念得以迅速有效的成為產品,大大縮短了產品的研制周 期。不僅如此,高層次設計只是定義系統的行為特性,可以不涉及實現工藝,在廠家綜合庫的支持 下,利用綜合優化工具可以將高層次描述轉換成針對某種工藝優化的網表,工藝轉化變得輕松容 易。具體的設計流程見圖3。
高層次設計步驟如下:第一步: 按照“自頂向下”的設計方法進行系統劃分。第二步: 輸入VHDL代碼,這是高層次設計中最為普遍的輸入方式。此外,還可以采用圖形輸入 方式(框圖,狀態圖等),這種輸入方式具有直觀、容易理解的優點。第三步:將以上的設計輸入編譯成標準的VHDL文件。對于大型設計,還要進行代碼級的功能仿 真,主要是檢驗系統功能設計的正確性,因為對于大型設計,綜合、適配要花費數小時,在綜合前 對源代碼仿真,就可以大大減少設計重復的次數和時間,一般情況下,可略去這一仿真步驟。第四步:利用綜合器對VHDL源代碼進行綜合優化處理,生成門級描述的網表文件,這是將高層次 描述轉化為硬件電路的關鍵步驟。 綜合優化是針對ASIC芯片供應商的某一產品系列進行的,所以綜合的過程要在相應的 廠家綜合庫支持下才能完成。綜合后,可利用產生的網表文件進行適配前的時序仿真,仿真過程不 涉及具體器件的硬件特性,較為粗略。一般設計,這一仿真步驟也可略去。第五步:利用適配器將綜合后的網表文件針對某一具體的目標器件進行邏輯映射操作,包括底 層器件配置、邏輯分割、邏輯優化和布局布線。適配完成后,產生多項設計結果:①適配報告,包 括芯片內部資源利用情況,設計的布爾方程描述情況等;②適配后的仿真模型;③器件編程文件。 根據適配后的仿真模型,可以進行適配后的時序仿真,因為已經得到器件的實際硬件特性(如時延 特性),所以仿真結果能比較精確地預期未來芯片的實際性能。如果仿真結果達不到設計要求,就 需要修改VHDL源代碼或選擇不同速度品質的器件,直至滿足設計要求。第六步:將適配器產生的器件編程文件通過編程器或下載電纜載入到目標芯片FPGA或CPLD中。 如果是大批量產品開發,通過更換相應的廠家綜合庫,可以很容易轉由ASIC形式實現。 (4)
5乒乓球游戲實例
一.基本要求:
1.設計一個由甲、乙雙方參賽,有裁判的3人乒乓球游戲機。
2.用8個(或更多個)LED排成一條直線,以中點為界,兩邊各代表參賽雙方的位置,其中一只點亮的LED指示球的當前位置,點亮的LED依此從左到右,或從右到左,其移動的速度應能調節。調
3.當“球”(點亮的那只LED)運動到某方的最后一位時,參賽者應能果斷地按下位于自己一方的按鈕開關,即表示啟動球拍擊球。若擊中,則球向相反方向移動;若未擊中,則對方得1分。
4.一方得分時,電路自動響鈴3 s,這期間發球無效,等鈴聲停止后方能繼續比賽。
5.設置自動記分電路,甲、乙雙方各用2位數碼管進行記分顯示,每計滿21分為1局。
6.甲、乙雙方各設一個發光二極管,表示擁有發球權,每隔5次自動交換發球
摘要:為了實現模擬乒乓球比賽的過程和規則,我們采用了AT89C51單片機來控制模擬,采用用8個(或更多個)LED排成一條直線,以中點為界,兩邊各代表參賽雙方的位置,其中一只點亮的LED指示球的當前位置,用蜂鳴器來實現響鈴,
比賽雙方用按鈕開關來模擬啟動球拍擊球,用數碼管來顯示比賽分數,
關鍵詞:AT89C51 LED 蜂鳴器。
二. 系統設計
2.1 總體設計
2.1.1 乒乓球比賽系統方框圖
整個過程由AT89C51單片機控制,控制器產生控制信號來控制8個LED的開關,即可模擬LED依此從左到右,或從右到左,并可完成調節速度。對分數的顯示我們用LED,LED有發光亮度強的優點,能夠滿足我們的要求。
2.1.2 單片機總體設計
AT89C51單片機有價格低,抗干擾能力強的優點,所以完成能夠滿足我們的要求,我們用單片機的P0控制8個LED的開關,通過對P0口的控制就能控制LED,由于P0口內部沒有上拉電阻,不能驅動LED,所以我們在外部添加了上拉電阻。用P1口來控制數碼管段顯,用P2口的低四位控制數碼管的位選,P30、P31來控制開關,PP26、P27來顯示發球權。
2.1.3 LED開關的設計
要求LED按左到右、或右到左的方向移動,我們只要把P0口的值變化即可。依次對P0口給值0X01、0X02、0X04、0x08、0x10、0X20、0X40、0X80,即可實現方向的移動。
2.1.4數碼管設計
通過控制數碼管的段,就可以控制數碼管的數學的顯示,我們采用了動態方式來控制數碼,該方式是通過讓數碼管快速切換顯示,人眼分辨不出來,不僅節約電能,而且還能夠節約單片機的端口,從而減少程序的復雜性。
2.2程序設計
本系統的程序如下:
#include《reg51.h》
#include《absacc.h》
#define uchar unsigned char
#define uint unsigned int
#define DB P1
sbit SB1=P3^0; //按鈕1
sbit SB2=P3^1; //按鈕2
sbit deng1=P2^7; //指示燈1
sbit deng2=P2^6; //指示燈2
sbit Mic=P2^5; //蜂鳴器
uchar count=0;
uchar i,j,fengshu1,fengshu2;
bit stall,chose,ret,flag=0;
uchar ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0到9的段碼
uchar dengcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //從左到右移動的代碼
/**************延時x毫秒程序*****************/
void delay(uint x)
{uchar y;
while(x--)
for(y=0;y《125;y++);}
/**************燈移動程序******************/
void yidong(uchar fang)
{for(i=0;i《8;i++)
{delay(1000);
if(fang==0)
{P0=dengcode[i];}
else P0=dengcode[8-i];
}
}
/********數碼管顯示程序****************/
void display(uchar a,uchar b)
{ P2=P2&&0Xe1;
delay(50) ;
P1=ledcode[a/10];
P2=P2&&0Xe0;
P2=P2&&0Xe2;
delay(50) ;
P1=ledcode[a%10];
P2=P2&&0Xe0;
P2=P2&&0Xe4;
delay(50) ;
P1=ledcode[b/10];
P2=P2&&0Xe0;
P2=P2&&0Xe8;
delay(50) ;
P1=ledcode[b%10];
P2=P2&&0Xe0;
}
/****蜂鳴器響應程序***/
void mic()
{Mic=1;
delay(3000);//延時3秒
Mic=0;
}
void main()
{uchar shu=0;
TMOD=0X01;
TH0=0X00;
TL0=0X00;
TR0=1;
ET0=1;
P0=0;
fengshu1=0;fengshu2=0;
P2=0;
P1=0;
SB1=1;
SB2=1;
while(1)
{for(i=0;i《2;i++)
for(j=0;j《5;j++)
{yidong(i);
if(i==0)
{deng1=1;deng2=0;}
ifi==1)
{deng2=1;deng1=0;}
if(SB2==0&&P0=0X80)
{yidong(0); }
if(SB2==1&&P0=0X80)
{fengshu1++;
if(fengshu1==21)
{fengshu1=0;fengshu2=0;}
mic();}
if(SB1==0&&P0=0X01)
{yidong(1); }
if(SB1==1&&P0=0X01)
{fengshu2++;
if(fenshu2==21)
{fengshu1=0;fengshu2=0;}
mic();}
}
}
void display0() interrupt 1
{ TH0=0;
TL0=0;
display(fengshu1,fengshu2);
}
評論