成彧
摘 要:當(dāng)前電子系統(tǒng)設(shè)計(jì)自動(dòng)化技術(shù)已廣泛地應(yīng)用于各個(gè)領(lǐng)域,隨著科技的發(fā)展,對(duì)電子系統(tǒng)設(shè)計(jì)自動(dòng)化的要求越來越高。針對(duì)傳統(tǒng)電子系統(tǒng)設(shè)計(jì)自動(dòng)化工具存在的一些缺陷,本研究通過高級(jí)編程語言實(shí)現(xiàn)了VHDL編程等工作的自動(dòng)化,使用查找表存儲(chǔ)所有常用的VHDL關(guān)鍵字,通過特定的函數(shù)統(tǒng)一編寫所有VHDL程序的庫和實(shí)體部分,使用線性鏈表存儲(chǔ)系統(tǒng)中各個(gè)端口的屬性,程序自動(dòng)編制設(shè)計(jì)流程圖,并將其通過特定的結(jié)構(gòu)存儲(chǔ)在計(jì)算機(jī)內(nèi)存中,從而實(shí)現(xiàn)了VHDL程序的自動(dòng)編輯。
關(guān)鍵詞:電子系統(tǒng);VHDL;編程自動(dòng)化;高級(jí)編程語言;接口軟件
中圖分類號(hào):TP311.51 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
EDA(Electronic Design Automation,電子設(shè)計(jì)自動(dòng)化)是利用計(jì)算機(jī)軟件進(jìn)行工作,綜合應(yīng)用計(jì)算機(jī)技術(shù)、電子技術(shù)、信息處理和智能化等技術(shù),實(shí)現(xiàn)電子產(chǎn)品自動(dòng)化設(shè)計(jì)的一項(xiàng)新技術(shù)。隨著科學(xué)技術(shù)的高速發(fā)展,電子系統(tǒng)的復(fù)雜性逐漸增加,對(duì)電子系統(tǒng)設(shè)計(jì)自動(dòng)化程度的要求也越來越高。如何縮短電子產(chǎn)品設(shè)計(jì)周期、提高設(shè)計(jì)效率、提高系統(tǒng)性能、減少人力、物力支出、減少工作量、提高設(shè)計(jì)自動(dòng)化水平是當(dāng)前急需解決的問題。
EDA技術(shù)作為現(xiàn)代電子技術(shù)的核心,利用QuartusⅡ[1]、Max+PlusⅡ、NiosⅡ[2]、DSP Builder[3]等軟件工具通過硬件描述語言進(jìn)行設(shè)計(jì),自動(dòng)進(jìn)行邏輯編譯、邏輯化簡、邏輯綜合、仿真測試等,實(shí)現(xiàn)所設(shè)計(jì)的電子系統(tǒng)的功能。用于描述硬件電路的語言有多種,目前以VHDL[4]和Verilog HDL[5]為主。實(shí)現(xiàn)電子系統(tǒng)設(shè)計(jì)自動(dòng)化要做的工作主要包括編輯輸入、綜合、適配、功能仿真、時(shí)序仿真、編程下載和硬件測試。傳統(tǒng)電子系統(tǒng)設(shè)計(jì)自動(dòng)化工具主要用文本輸入、原理圖輸入、狀態(tài)圖輸入和波形圖輸入這幾種方法實(shí)現(xiàn)編輯輸入。本文針對(duì)電子系統(tǒng)設(shè)計(jì)的復(fù)雜性和傳統(tǒng)電子系統(tǒng)設(shè)計(jì)自動(dòng)化工具存在的一些缺陷提出了幾種新的設(shè)計(jì)方法,主要通過接口軟件實(shí)現(xiàn)VHDL等硬件描述語言的自動(dòng)編程和自動(dòng)控制軟件工具進(jìn)行操作。
2 電子系統(tǒng)設(shè)計(jì)自動(dòng)化的傳統(tǒng)方法及其存在的缺
陷(The traditional method of electronic design
automation and its disadvantages)
傳統(tǒng)EDA設(shè)計(jì)的流程如圖1所示。開發(fā)者采用自頂向下的設(shè)計(jì)方案。設(shè)計(jì)時(shí)開發(fā)者首先要分析項(xiàng)目的設(shè)計(jì)需求,確定設(shè)計(jì)方案并進(jìn)行細(xì)化,對(duì)各個(gè)模塊進(jìn)行功能描述和結(jié)構(gòu)設(shè)計(jì),然后用VHDL等硬件描述語言對(duì)頂層電路和模塊電路進(jìn)行設(shè)計(jì),再通過編譯器形成標(biāo)準(zhǔn)的VHDL文件,進(jìn)行綜合產(chǎn)生網(wǎng)絡(luò)表,最后對(duì)產(chǎn)生的網(wǎng)絡(luò)表進(jìn)行仿真、適配和編程下載轉(zhuǎn)化為硬件電路并進(jìn)行測試。
在進(jìn)行VHDL編程時(shí),除了可以手動(dòng)輸入程序代碼, 還可以采用DSP Bulider中的Signal Compiler模塊[6]、調(diào)用LPM元件或者使用IP核等方法自動(dòng)編寫代碼,但這些方法存在一些缺陷。一方面,采用這些方法編寫的代碼結(jié)構(gòu)復(fù)雜而且結(jié)構(gòu)體部分一般沒有具體的進(jìn)程語句,要打開所有被調(diào)用的設(shè)計(jì)實(shí)體可能比較困難,不利于分析元器件的工作原理,可能會(huì)給后續(xù)的設(shè)計(jì)及硬件測試帶來不利影響。另一方面,這些方法不能實(shí)現(xiàn)所有的功能模塊設(shè)計(jì),編程不夠靈活。當(dāng)進(jìn)行一項(xiàng)新的模塊電路設(shè)計(jì)時(shí),所設(shè)計(jì)的功能單元的結(jié)構(gòu)可能會(huì)因需求的變化發(fā)生變化,由于在不同的電路中該模塊的工作方式可能不同,其VHDL代碼可能有所變化[7]??紤]到在傳統(tǒng)的設(shè)計(jì)軟件中存儲(chǔ)可變的功能模塊設(shè)計(jì)方案具有一定難度,為了提高這些模塊的可重用性,使其適用于不同的系統(tǒng),需要將這些可變的設(shè)計(jì)方案包括可變的VHDL程序和各個(gè)元件之間的連接電路等以適當(dāng)?shù)姆绞酱鎯?chǔ)在文件系統(tǒng)中,用高級(jí)編程語言進(jìn)行編程從文件系統(tǒng)中讀取信息并控制電子系統(tǒng)設(shè)計(jì)軟件進(jìn)行自動(dòng)設(shè)計(jì)。除此以外,在進(jìn)行VHDL編程時(shí)很有可能會(huì)出現(xiàn)一些重復(fù)的程序代碼,所有VHDL程序中ENTITY(實(shí)體說明)部分的格式幾乎都是一致的,而且一般情況下端口的模式和類型僅有“IN std_logic”“IN std_logic_vector”“OUT std_logic”和“OUT std_logic_vector”四種,程序中ARCHITECTURE(結(jié)構(gòu)體)部分中也有可能出現(xiàn)一些重復(fù)的代碼,舉一個(gè)簡單的例子:用VHDL程序設(shè)計(jì)一個(gè)10位十進(jìn)制加法計(jì)數(shù)器,如果采用手動(dòng)輸入的方式進(jìn)行編程,則需要將IF語句進(jìn)行10次嵌套,這樣做會(huì)使時(shí)間增加,降低開發(fā)效率,而且比較容易出錯(cuò);如果用C、C++等高級(jí)語言編程操作VHDL文件進(jìn)行自動(dòng)編程,僅用一個(gè)for循環(huán)就可以自動(dòng)編寫出這些代碼,可以節(jié)省時(shí)間,從而提高開發(fā)效率。另外,在進(jìn)行VHDL編程時(shí)還有可能涉及到一系列數(shù)值運(yùn)算,如果采用手動(dòng)輸入的方式則需要進(jìn)行多次運(yùn)算并將每次運(yùn)算得到的結(jié)果寫入程序,為了提高編程效率,需要運(yùn)用高級(jí)編程語言自動(dòng)進(jìn)行運(yùn)算并將結(jié)果輸出到要編輯的程序中。
3 簡單的應(yīng)用實(shí)例(A simple example)
3.1 設(shè)計(jì)需求
(1)設(shè)輸入系統(tǒng)時(shí)鐘為1000Hz,利用VHDL語言設(shè)計(jì)一個(gè)分頻器CNT1000,輸出基準(zhǔn)時(shí)鐘為1Hz。
(2)設(shè)計(jì)一個(gè)四位十進(jìn)制加法計(jì)數(shù)器CNT4D,具有同步使能和異步清零功能。
(3)設(shè)計(jì)一個(gè)四位七段數(shù)碼譯碼器DECL7S,將四位十進(jìn)制加法計(jì)數(shù)器的計(jì)數(shù)結(jié)果用四位七段數(shù)碼管顯示。
(4)將以上三部分內(nèi)容結(jié)合,設(shè)計(jì)一個(gè)每秒加1的四位十進(jìn)制計(jì)數(shù)器。
利用Visual Studio 2010開發(fā)環(huán)境用C語言自動(dòng)編寫VHDL程序并進(jìn)行電路連接和設(shè)計(jì)仿真。
3.2 VHDL自動(dòng)編程的一些基本原理和主要算法
在前面已經(jīng)提到,VHDL程序中經(jīng)常含有一些重復(fù)的代碼。本實(shí)驗(yàn)程序用函數(shù)void edit Library And Entity(FILE*、Port*、Char*)統(tǒng)一編寫所有VHDL程序的庫和實(shí)體部分。開發(fā)VHDL自動(dòng)編程軟件時(shí),需要考慮各個(gè)端口的一些屬性,包括端口名稱、端口類型、輸入提示信息等,由于進(jìn)行自動(dòng)化編程時(shí)端口信息可能需要?jiǎng)討B(tài)地添加或刪除,可以使用一個(gè)鏈表對(duì)所有端口的屬性進(jìn)行存儲(chǔ),用結(jié)點(diǎn)存儲(chǔ)信息,可將端口信息的數(shù)據(jù)結(jié)構(gòu)定義如下:
3.3 實(shí)現(xiàn)VHDL自動(dòng)編程的具體操作
首先打開QuartusⅡ 6.0軟件新建一個(gè)項(xiàng)目“Example1”,然后新建一個(gè)VHDL文件“CNT1000.vhd”并保存,接下來打開一個(gè)已編輯好的實(shí)現(xiàn)VHDL編程自動(dòng)化的程序并運(yùn)行,如圖2所示。
類似的也可以設(shè)計(jì)出四位七段數(shù)碼譯碼器DECL7S,方法不再贅述。
最后新建一個(gè)Block Diagram/Schematic File文件,將以上三部分內(nèi)容組合,如圖9所示。
3.4 仿真結(jié)果
如圖10所示,仿真結(jié)果表明所設(shè)計(jì)的功能與需求完全一致。當(dāng)rest為高電平時(shí)計(jì)數(shù)清零;當(dāng)en為高電平且rest為低電平時(shí)進(jìn)行計(jì)數(shù),clk每經(jīng)過1000個(gè)上升沿計(jì)數(shù)器加1。
3.5 實(shí)驗(yàn)結(jié)論及分析
以上實(shí)驗(yàn)結(jié)果表明,使用高級(jí)語言編程軟件可以進(jìn)行自動(dòng)化VHDL編程,這種設(shè)計(jì)方法至少可以自動(dòng)設(shè)計(jì)一些簡單的功能模塊,提高設(shè)計(jì)的效率。
通常采用手動(dòng)輸入VHDL代碼的方式進(jìn)行編程效率較低,以適當(dāng)?shù)姆绞阶詣?dòng)編程可提高編程效率,縮短系統(tǒng)開發(fā)周期。
4 實(shí)現(xiàn)電子系統(tǒng)設(shè)計(jì)自動(dòng)化的一些重要方法和編程
技術(shù)(The key methods and programming technics
to realize EDA)
4.1 用接口軟件自動(dòng)設(shè)計(jì)電子系統(tǒng)的一般方法
為了提高電子系統(tǒng)設(shè)計(jì)的自動(dòng)化水平,需要用軟件自動(dòng)接口將手工作業(yè)部分變?yōu)樽詣?dòng),從而省去繁瑣的硬件語言編程等工作。用軟件自動(dòng)接口實(shí)現(xiàn)電子系統(tǒng)自動(dòng)化設(shè)計(jì)的流程如圖11所示。
進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),首先要分析設(shè)計(jì)需求,理解設(shè)計(jì)項(xiàng)目的任務(wù)、要求、指標(biāo)和系統(tǒng)的應(yīng)用領(lǐng)域、基本功能、工作原理等,然后確定總體設(shè)計(jì)方案并進(jìn)行細(xì)化[8]。可以用計(jì)算機(jī)模擬人的思維對(duì)設(shè)計(jì)需求進(jìn)行分析,確定設(shè)計(jì)方案并編制頂層和各個(gè)模塊的設(shè)計(jì)流程圖,需要應(yīng)用一些機(jī)器學(xué)習(xí)、數(shù)據(jù)分析等人工智能領(lǐng)域的方法。為了使VHDL編程方便、快捷,需要在VHDL自動(dòng)化編程系統(tǒng)的定義部分建立一個(gè)查找表,用于存儲(chǔ)所有常用的VHDL關(guān)鍵字,程序代碼如下:
在解析設(shè)計(jì)流程圖中的信息時(shí),可能需要應(yīng)用一些人工智能技術(shù),可以使用Lex、Yacc等詞法分析工具輔助VHDL自動(dòng)化編程系統(tǒng)對(duì)設(shè)計(jì)流程圖中的信息進(jìn)行分析[9]。在進(jìn)行VHDL自動(dòng)化編程之前,需要將設(shè)計(jì)流程圖進(jìn)行兩次掃描。進(jìn)行第一次掃描時(shí)先確定程序的框架結(jié)構(gòu)和要設(shè)計(jì)的系統(tǒng)的端口信息、實(shí)體名、結(jié)構(gòu)體名等信息,第二次掃描時(shí)進(jìn)行VHDL自動(dòng)化編程。
在VHDL編程結(jié)束之后,一般還需要進(jìn)行圖形輸入設(shè)計(jì),將各個(gè)功能單元通過電路進(jìn)行連接。進(jìn)行圖形輸入設(shè)計(jì)時(shí)也可以通過接口軟件進(jìn)行自動(dòng)化設(shè)計(jì),方法與VHDL自動(dòng)化編程相似,程序自動(dòng)打開Block Diagram/Schematic File文件修改內(nèi)容可以按正確的方法將各個(gè)功能單元通過電路自動(dòng)連接。此外,在進(jìn)行圖形輸入設(shè)計(jì)時(shí)之前編輯的VHDL程序可能還需要修改,設(shè)計(jì)時(shí)還有可能出現(xiàn)一些功能相似但不完全相同的模塊,例如需要進(jìn)行計(jì)數(shù)并鎖存結(jié)果,系統(tǒng)中可能存在多個(gè)若干位的十進(jìn)制計(jì)數(shù)器和鎖存器,這些計(jì)數(shù)器和鎖存器的位數(shù)可能因需求的不同而不同。這種情況下如果用傳統(tǒng)的設(shè)計(jì)工具則需要重新打開或新建多個(gè)VHDL程序文件,找到需要修改的所有代碼進(jìn)行修改,然后重新編譯程序,再重新生成數(shù)字電路,操作很不方便。采用接口軟件可以做出改進(jìn),在接口軟件中可以用一個(gè)或多個(gè)界面模擬電子系統(tǒng)圖形輸入設(shè)計(jì)的環(huán)境并建立一個(gè)控制表,在控制表中顯示選中的功能模塊的信息,設(shè)計(jì)電路時(shí)可隨時(shí)進(jìn)行修改,模擬圖形輸入設(shè)計(jì)環(huán)境的界面如圖12所示。
在模擬圖形輸入設(shè)計(jì)環(huán)境中,除了可以進(jìn)行VHDL自動(dòng)化編程、功能模塊之間連接線路等操作外,還可以通過修改控制表中的內(nèi)容自動(dòng)修改VHDL程序,自動(dòng)編譯程序并生成數(shù)字電路在原來的位置顯示。當(dāng)檢測到控制表中的內(nèi)容發(fā)生變化時(shí),調(diào)用fopen函數(shù)自動(dòng)打開需要修改的VHDL程序文件,然后根據(jù)控制表中內(nèi)容修改的位置和修改后的內(nèi)容自動(dòng)從VHDL程序中找出需要修改的代碼并進(jìn)行修改,再自動(dòng)執(zhí)行編譯程序等操作。
由于在VHDL語言中有些指令并不常用,可以設(shè)計(jì)一個(gè)功能精簡的編譯系統(tǒng)進(jìn)行編譯,該系統(tǒng)是QuartusⅡ中VHDL編譯系統(tǒng)的子集,設(shè)計(jì)時(shí)使用詞法分析器對(duì)語法結(jié)構(gòu)進(jìn)行翻譯,可使用哈希技術(shù)管理常用的VHDL指令集,并通過動(dòng)態(tài)堆棧維護(hù)底層信息,縮小了編譯系統(tǒng)的體積并提高了編譯效率。
系統(tǒng)電路設(shè)計(jì)、編譯、仿真結(jié)束之后,需要將系統(tǒng)的輸入輸出信號(hào)鎖定在芯片的引腳上。為了提高開發(fā)效率,可將所有設(shè)計(jì)中常用的芯片及其各個(gè)引腳的信息存儲(chǔ)在計(jì)算機(jī)中,鎖定引腳時(shí)可以根據(jù)編譯結(jié)果自動(dòng)將信號(hào)與芯片引腳對(duì)應(yīng)。
4.2 實(shí)現(xiàn)電子系統(tǒng)設(shè)計(jì)自動(dòng)化的系統(tǒng)環(huán)境及對(duì)系統(tǒng)中尚
未實(shí)現(xiàn)的功能的討論
眾所周知,進(jìn)行電子系統(tǒng)自動(dòng)化設(shè)計(jì)既可以使用如Windows系列的通用計(jì)算機(jī)操作系統(tǒng),也可以使用專用的操作系統(tǒng)。在進(jìn)行程序編輯或電子系統(tǒng)設(shè)計(jì)時(shí)如果程序或系統(tǒng)的體積較大,可以在計(jì)算機(jī)上新建一個(gè)專用的啟動(dòng)模式,當(dāng)計(jì)算機(jī)開機(jī)時(shí)如果進(jìn)入專用模式其他進(jìn)程幾乎都不再運(yùn)行,全部用于對(duì)程序進(jìn)行編譯、鏈接、運(yùn)行等操作,可提高程序的執(zhí)行效率。
在以上的電子系統(tǒng)自動(dòng)化編程系統(tǒng)中還有幾個(gè)功能尚未實(shí)現(xiàn),例如如何在QuartusⅡ界面之外自動(dòng)編譯VHDL程序并生成數(shù)字電路,這將在后續(xù)工作中繼續(xù)開發(fā)研究。
5 結(jié)論(Conclusion)
當(dāng)前世界已進(jìn)入信息化時(shí)代,EDA技術(shù)[10]已廣泛應(yīng)用于電子、機(jī)械、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等領(lǐng)域,對(duì)推動(dòng)科學(xué)技術(shù)發(fā)展發(fā)揮著重要作用。實(shí)驗(yàn)證明,通過高級(jí)編程語言開發(fā)接口軟件可以自動(dòng)完成VHDL編程等工作,改善了硬件描述語言編程的復(fù)雜性,提高了電子系統(tǒng)設(shè)計(jì)的自動(dòng)化水平。本文對(duì)此進(jìn)行了初步探討,但該自動(dòng)化設(shè)計(jì)軟件還存在一些未實(shí)現(xiàn)的功能和不完善的地方,需要通過進(jìn)一步的研究提出一些新的設(shè)計(jì)方法。
參考文獻(xiàn)(References)
[1] LB Yao,XU Yong,M Pan.Design and Implementation of Taxi Billing System Based on FPGA[J].Electronic Design Engineering,
2011,27(6A):104-115.
[2] HJ Liu,et al.Development of Frequency Variable Inverter Based on SOPC and NiosII[J].IEEE Transactions on Industry Applications,2012,49(5):2237-2243.
[3] XL Hu,L Ding,ZG Zhang.The Design of Digital Filter Based on DSP Builder[J].Applied Mechanics & Materials,
2014:602-605;2641-2644.
[4] 夏莉莉.淺議VHDL語言在電子設(shè)計(jì)自動(dòng)化中的應(yīng)用[J].信息安全與技術(shù),2012(7):44-46.
[5] TS Tan,BA Rosdi.Verilog HDL Simulator Technology:A Survey[J].Journal of Electronic Testing,2014,30(3):255-269.
[6] 張志亮,趙剛,齊星剛.從Simulink模型自動(dòng)生成VHDL代碼——基于DSPBuilder的FPGA設(shè)計(jì)流程[J].現(xiàn)代電子技術(shù),2004,23:4-6.
[7] 王彩鳳,李衛(wèi)兵,卞麗.VHDL語言在電子設(shè)計(jì)中的應(yīng)用[J].實(shí)驗(yàn)科學(xué)與技術(shù),2014(4):65-67.
[8] 朱新宇.電子設(shè)計(jì)自動(dòng)化實(shí)驗(yàn)系統(tǒng)的開發(fā)與應(yīng)用[D].北京郵電大學(xué)工程碩士學(xué)位論文,2012.
[9] 齊星剛.VHDL編譯器設(shè)計(jì)研究技術(shù)[D].四川大學(xué)碩士學(xué)位論文,2005.
[10] 宋文斌.并行遺傳算法在器件模型參數(shù)提取中的應(yīng)用.軟件
工程師,2012(4):45-47.
作者簡介:
成 彧(1994-),男,本科,初級(jí)工程師.研究領(lǐng)域:軟件開發(fā).