C到VHDL的編譯器設(shè)計(jì)與實(shí)現(xiàn)詳解_第1頁(yè)
C到VHDL的編譯器設(shè)計(jì)與實(shí)現(xiàn)詳解_第2頁(yè)
C到VHDL的編譯器設(shè)計(jì)與實(shí)現(xiàn)詳解_第3頁(yè)
C到VHDL的編譯器設(shè)計(jì)與實(shí)現(xiàn)詳解_第4頁(yè)
C到VHDL的編譯器設(shè)計(jì)與實(shí)現(xiàn)詳解_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C到VHDL的編譯器設(shè)計(jì)與實(shí)現(xiàn)詳解隨著微電子技術(shù)和超大規(guī)模集成電路技術(shù)的高速發(fā)展,進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí)的系統(tǒng)復(fù)雜度不斷加大,系統(tǒng)軟件硬件的異構(gòu)度提高,軟件在系統(tǒng)中所占的比例也越來(lái)越大。傳統(tǒng)的設(shè)計(jì)方法在進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí),一般先由系統(tǒng)工程師設(shè)計(jì)整個(gè)系統(tǒng)的架構(gòu),畫(huà)出系統(tǒng)框圖(包括各個(gè)模塊),再用高級(jí)編程語(yǔ)言(一般是C/C++/JAVA)實(shí)現(xiàn)各個(gè)模塊的算法,然后進(jìn)行整個(gè)系統(tǒng)的仿真,確定系統(tǒng)的最佳結(jié)構(gòu)、最佳實(shí)現(xiàn)算法及其它相關(guān)參數(shù)。待系統(tǒng)模型確定以后,進(jìn)行系統(tǒng)軟硬件分割設(shè)計(jì),但由于缺乏統(tǒng)一的軟硬件協(xié)同設(shè)計(jì)驗(yàn)證平臺(tái),大多只能根據(jù)經(jīng)驗(yàn)來(lái)定義軟件和硬件部分各自應(yīng)完成的功能。對(duì)于整個(gè)系統(tǒng)的功能和行為,在設(shè)計(jì)最初階段,描述時(shí)尚無(wú)硬件的概念,經(jīng)過(guò)軟硬件劃分之后,將系統(tǒng)規(guī)范描述分成軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn)兩部分。雖然VHDL等語(yǔ)言也支持算法級(jí)描述,但是大部分硬件描述語(yǔ)言HDL(HardwareDescriptionLanguage)如VHDL、Verilog等基本上還是面向硬件的描述,面向較低的硬件抽象等級(jí)。同時(shí)由于高級(jí)編程語(yǔ)言(C/C++/JAVA)不能描述硬件設(shè)計(jì)中的時(shí)間、延遲、信號(hào)等物理信息,與后續(xù)的硬件設(shè)計(jì)不兼容,硬件部分需重新用VHDL、Verilog等硬件描述語(yǔ)言來(lái)設(shè)計(jì),造成大量的設(shè)計(jì)重復(fù),也增加了系統(tǒng)設(shè)計(jì)的復(fù)雜度。另外,許多要用硬件實(shí)現(xiàn)的功能,例如快速傅立葉變換FFT、掃描線算法、消隱算法等成熟而又常用的算法都有現(xiàn)成、完善的C語(yǔ)言描述,如果可以復(fù)用這些資源將節(jié)省大量的系統(tǒng)設(shè)計(jì)時(shí)間。很多EDA工具只能理解HDL語(yǔ)言的描述,它是設(shè)計(jì)者和系統(tǒng)之間的界面,設(shè)計(jì)者通過(guò)HDL語(yǔ)言將自己的設(shè)計(jì)方案告訴EDA工具,在EDA工具的幫助下進(jìn)行模擬、綜合和驗(yàn)證。所以系統(tǒng)設(shè)計(jì)中用C語(yǔ)言的描述要轉(zhuǎn)換為HDL語(yǔ)言才能被EDA工具接受。在眾多HDL語(yǔ)言中,VHDL語(yǔ)言是被廣泛使用的,因此設(shè)計(jì)和實(shí)現(xiàn)一個(gè)從C語(yǔ)言轉(zhuǎn)換到VHDL語(yǔ)言的編譯器具有重要意義和很大的實(shí)用價(jià)值。C與VHDL的語(yǔ)言特征C語(yǔ)言是目前國(guó)際上廣泛流行的一種計(jì)算機(jī)高級(jí)語(yǔ)言,適合于作為系統(tǒng)描述語(yǔ)言,既可用來(lái)編寫(xiě)系統(tǒng)軟件,也可用來(lái)編寫(xiě)應(yīng)用軟件。C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的,既保持了B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了其缺點(diǎn)(過(guò)于簡(jiǎn)單,數(shù)據(jù)無(wú)類(lèi)型等)。后來(lái),C語(yǔ)言多次作了改進(jìn)。1978年后,C語(yǔ)言已先后移植到大、中、小、微型機(jī)上,并獨(dú)立于UNIX和PDP。1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)對(duì)C語(yǔ)言的各種版本進(jìn)行綜合和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱(chēng)為ANSIC。總的說(shuō)來(lái),C語(yǔ)言適合描述過(guò)程和算法,它的運(yùn)行環(huán)境是圖靈機(jī)模型。它具有很多靈活的描述方式,具有較高的抽象能力,不區(qū)分函數(shù)和過(guò)程。數(shù)組的定義以及對(duì)指針的靈活應(yīng)用大大方便了程序的書(shū)寫(xiě),同時(shí)因其是為開(kāi)發(fā)軟件而設(shè)計(jì)的語(yǔ)言,因而更善于描述串行程序。但是由于其不能體現(xiàn)硬件設(shè)計(jì)中的時(shí)間、延遲、信號(hào)等物理特性,硬件模塊部分需重新用硬件描述語(yǔ)言來(lái)設(shè)計(jì),與后續(xù)設(shè)計(jì)缺乏連貫性,也增加了系統(tǒng)設(shè)計(jì)的復(fù)雜度。VHDL(Very-High-SpeedIntegratedCircuitHardwareDe2scriptionLanguage)語(yǔ)言是目前應(yīng)用較廣泛的一種硬件描述語(yǔ)言,被IEEE(TheInstituteofElectricalandElectricEngineers)和美國(guó)國(guó)防部確定為標(biāo)準(zhǔn)硬件描述語(yǔ)言,并得到了眾多EDA公司的支持,在電子工程領(lǐng)域已成為事實(shí)上的通用硬件描述語(yǔ)言。VHDL既可以結(jié)構(gòu)化的分層次的描述電路結(jié)構(gòu)特性,也可以表示電路輸入輸出信號(hào)的關(guān)系特性,還可以描述和芯片布圖有關(guān)的幾何特性。它是一種較規(guī)整的語(yǔ)言,適合于描述并發(fā)程序。但是由于其最初目的并非是為電路設(shè)計(jì)的,而是用來(lái)描述電路的,因此它不適合進(jìn)行系統(tǒng)級(jí)的軟件設(shè)計(jì)和算法設(shè)計(jì),特別是現(xiàn)在系統(tǒng)中越來(lái)越多的功能由軟件來(lái)完成時(shí)。設(shè)計(jì)方案C語(yǔ)言和VHDL語(yǔ)言是兩種面向不同領(lǐng)域,各有所長(zhǎng)的語(yǔ)言,設(shè)計(jì)與實(shí)現(xiàn)一個(gè)C到VHDL的編譯器即是把要用硬件來(lái)實(shí)現(xiàn)的C語(yǔ)言算法描述翻譯成VHDL語(yǔ)言的行為描述。為了完成從C語(yǔ)言向VHDL的編譯轉(zhuǎn)換,首先用Lex和Yacc完成詞法分析和語(yǔ)法分析。在語(yǔ)法分析的時(shí)候生成一棵C的語(yǔ)法樹(shù),,并在自下而上生成語(yǔ)法樹(shù)的過(guò)程中收集綜合屬性。同時(shí)在此過(guò)程中進(jìn)行語(yǔ)義分析———只分析和翻譯與編譯轉(zhuǎn)換有關(guān)的信息,那些與C語(yǔ)言本身有關(guān)的語(yǔ)義則不做分析,比如是否有變量被重復(fù)定義等。在語(yǔ)法樹(shù)的展開(kāi)過(guò)程中向下傳遞繼承屬性并進(jìn)行轉(zhuǎn)化,將C的規(guī)約規(guī)則翻譯為相應(yīng)的VHDL規(guī)約規(guī)則。圖1C到VHDL的編譯器實(shí)現(xiàn)過(guò)程編譯器的具體設(shè)計(jì)與實(shí)現(xiàn)過(guò)程見(jiàn)圖1。在語(yǔ)法分析的過(guò)程中生成一棵語(yǔ)法樹(shù)———多叉樹(shù),其葉子節(jié)點(diǎn)記錄C程序中的單詞,并記錄單詞的位置、屬性、值等,非葉子節(jié)點(diǎn)記錄C語(yǔ)言的規(guī)約規(guī)則以及要傳遞的屬性———包括綜合屬性和繼承屬性。由于C語(yǔ)言較靈活而VHDL語(yǔ)言較規(guī)整,因此這里只選擇一定范圍內(nèi)的較常用的C語(yǔ)言語(yǔ)法子集進(jìn)行轉(zhuǎn)換;因?yàn)閂HDL只有可綜合子集可以實(shí)現(xiàn),所以在轉(zhuǎn)換時(shí)必須考慮可綜合子集的限制;并且VHDL語(yǔ)言的數(shù)據(jù)類(lèi)型有限,我們必須編寫(xiě)擴(kuò)充數(shù)據(jù)類(lèi)型的VHDL程序包,在展開(kāi)語(yǔ)法樹(shù)完成轉(zhuǎn)換過(guò)程中用來(lái)描述復(fù)雜的邏輯。轉(zhuǎn)換過(guò)程由于C語(yǔ)言善于描述串行程序而VHDL適合描述并發(fā)程序,因此對(duì)于C程序中的非main函數(shù)轉(zhuǎn)化為VHDL中的函數(shù)(有返回值的)和過(guò)程(無(wú)返回值的);對(duì)于main函數(shù),將main函數(shù)的參數(shù)作為entity的輸入信號(hào),將main的返回值作為entity的輸出信號(hào),將main的函數(shù)體作為architecture的一個(gè)process。雖然VHDL通常描述并發(fā)程序,但其子程序和process仍是順序執(zhí)行的,與C語(yǔ)言的原始描述一致。具體函數(shù)對(duì)應(yīng)情況見(jiàn)表1。轉(zhuǎn)換過(guò)程中,通過(guò)分析兩種語(yǔ)言的差別,對(duì)于C語(yǔ)言的一些獨(dú)特、靈活的描述方式———指針、類(lèi)型轉(zhuǎn)化、連等、i++和++i的處理、數(shù)組、逗號(hào)表達(dá)式等方面的正確翻譯比較關(guān)鍵和重要。對(duì)于C語(yǔ)言中的指針,要將它在C語(yǔ)言中的作用完全翻譯到VHDL比較困難,因?yàn)镃語(yǔ)言的指針實(shí)質(zhì)上是與地址、與內(nèi)存的分配有關(guān)。而VHDL作為一種描述硬件的語(yǔ)言,不存在地址的概念。因此在具體轉(zhuǎn)換中將指針類(lèi)型翻譯為整數(shù)類(lèi)型,并記錄所指向數(shù)組的名字,整數(shù)值表示指向數(shù)組中的第幾個(gè)元素。由于C的高維指針經(jīng)過(guò)內(nèi)存分配所得到,在VHDL中很難實(shí)現(xiàn),因此初步實(shí)現(xiàn)一維指針,而帶高維指針的C程序可以轉(zhuǎn)換為一維指針來(lái)實(shí)現(xiàn)。對(duì)于i++和++i,翻譯i++時(shí)先記錄哪些變量要經(jīng)過(guò)這類(lèi)操作,在完成對(duì)表達(dá)式的翻譯后再處理。而翻譯++i時(shí)因?yàn)樽兞恐盗⒖套兓?,因此在翻譯時(shí)必須將一個(gè)完整的表達(dá)式分開(kāi),并引入臨時(shí)變量來(lái)處理。相對(duì)于C語(yǔ)言中靈活的類(lèi)型轉(zhuǎn)化,VHDL則嚴(yán)格的多,不允許不同類(lèi)型之間運(yùn)算。由于C語(yǔ)言沒(méi)有boolean類(lèi)型,而VHDL語(yǔ)言有boolean類(lèi)型,所以在條件表達(dá)式中要將整數(shù)或其它類(lèi)型的數(shù)轉(zhuǎn)換為boolean類(lèi)型。同時(shí),在處理C中整數(shù)的邏輯運(yùn)算時(shí),必須先將整數(shù)轉(zhuǎn)換為VHDL的Bit-Vector來(lái)運(yùn)算,計(jì)算后再轉(zhuǎn)換回來(lái)。另外,由于C語(yǔ)言不區(qū)分函數(shù)和過(guò)程,但是VHDL嚴(yán)格區(qū)分,而且函數(shù)只能出現(xiàn)在表達(dá)式中,因此對(duì)于沒(méi)有出現(xiàn)在表達(dá)式中的函數(shù)調(diào)用,翻譯時(shí)要將其放在一個(gè)臨時(shí)表達(dá)式中,賦值給一個(gè)臨時(shí)變量。測(cè)試及分析為了測(cè)試本文提出的設(shè)計(jì)方案的正確性和有效性,在設(shè)計(jì)過(guò)程中選取了一些常用的數(shù)字電路系統(tǒng)來(lái)比較C源程序和VHDL目標(biāo)程序的功能一致性。例如對(duì)于一個(gè)無(wú)控制端口的加法器電路,其電路示意圖見(jiàn)圖2該加法器不帶任何控制端口,有兩個(gè)輸入端口in1和in2,一個(gè)輸出端口pout,它們的類(lèi)型皆為位向量。當(dāng)輸入信號(hào)中有任何一個(gè)或者兩個(gè)都發(fā)生變化時(shí),進(jìn)程就要再重新執(zhí)行一遍。從電路功能的角度來(lái)理解:只要在輸入端有新的數(shù)據(jù)輸入,那么加法器必然要重新開(kāi)始工作,將新的數(shù)值相加并送到輸出端口,這樣不斷地進(jìn)行加法操作。對(duì)于加法器電路的C語(yǔ)言描述如下利用本文提出的設(shè)計(jì)方案對(duì)實(shí)現(xiàn)加法器功能的C語(yǔ)言程序進(jìn)行編譯轉(zhuǎn)換,得到轉(zhuǎn)換后的目標(biāo)程序———VHDL程序如下:通過(guò)分析編譯轉(zhuǎn)換后的目標(biāo)程序的語(yǔ)法語(yǔ)義和功能證明轉(zhuǎn)換方案是正確和有效的。由于用C語(yǔ)言進(jìn)行算法和程序設(shè)計(jì),可以大大提高系統(tǒng)描述的層次和系統(tǒng)設(shè)計(jì)效率,并

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論