Handel-C是一個(gè)編程語言,是一個(gè)專門編譯用在FPGA以及ASIC上的硬件描述語言。它是一個(gè)C語言的子集,并且有一些非標(biāo)準(zhǔn)的控制硬件即時(shí)性以及平行性的特性。
為了要描述復(fù)雜的算法,C語言的子集包含了所有C語言常用的特性。像許多嵌入式編譯器,浮點(diǎn)數(shù)資料型態(tài)都會(huì)被忽略掉。透過外部函式庫的支援,浮點(diǎn)數(shù)運(yùn)算會(huì)變的更有效率。
簡介Handle-C為新一代硬件描述語言編譯工具,過去因?yàn)樘珡?fù)雜而不能用硬件描述語言表示的算法以及由于處理器運(yùn)行速度太慢而不能處理的算法,現(xiàn)在都可以利用Handle-C語言在大規(guī)模FPGA硬件上得以實(shí)現(xiàn)。設(shè)計(jì)者可以利用Handle-C語言,能在很短的時(shí)間里創(chuàng)建更龐大、更復(fù)雜和更高速的系統(tǒng)。
可編程邏輯器件的設(shè)計(jì)方法經(jīng)歷了布爾等式、原理圖輸入、硬件描述語言這樣一個(gè)發(fā)展過程。隨著設(shè)計(jì)的日益復(fù)雜和可編程邏輯器件規(guī)模的不斷擴(kuò)大,人們不斷地尋求著更加抽象的行為級(jí)設(shè)計(jì)方法,以便在盡可能短時(shí)間內(nèi)完成自己的設(shè)計(jì)構(gòu)思,并希望能夠找到一種方法,在更高的層次下設(shè)計(jì)更復(fù)雜、更高速的系統(tǒng),能將軟件設(shè)計(jì)和硬件設(shè)計(jì)統(tǒng)一到一個(gè)平臺(tái)下,這就是Handle-C產(chǎn)生的現(xiàn)實(shí)背景。1
歷史Handel-C是Oxford University里面的硬件編譯群組所發(fā)展一系列的硬件描述語言。大約在1996年早期,Handel HDL進(jìn)化到Handel-C。
Handel-C在被ESL發(fā)表之后,被許多大學(xué)的硬件研究單位被采用,
其他的C HDL子集也大約在同一時(shí)間被發(fā)展出來,像是1994年在多倫多大學(xué)的Transmogrifier C(現(xiàn)在變?yōu)殚_源碼專案FpgaC),還有在Los Alamos National Laboratory的Streams-C(現(xiàn)在已經(jīng)得到Impulse Accelerated Technologies的認(rèn)可,并且重命名為Impulse C)。2
意義Handle-C在硬件的算法實(shí)現(xiàn)和硬件/軟件結(jié)合設(shè)計(jì)中,可謂是一種具有革命性意義的語言,它的標(biāo)準(zhǔn)是由Celoxica公司提出的。Handle-C語言在基于ISO/ANSI-C語言的基礎(chǔ)上,能夠通過軟件設(shè)計(jì)方法來實(shí)現(xiàn)硬件設(shè)計(jì)。Handle-C具有硬件發(fā)展的外延擴(kuò)展,包括可變的數(shù)據(jù)寬度,并行處理方式和并行線程的通訊方式。該語言使用了一種簡單的同步模型,簡化了系統(tǒng)配置人員和軟件工程師的設(shè)計(jì)工作。Handle-C的連續(xù)和并行操作的描述能力,可以用更短、更易懂的代碼來代替以前的復(fù)雜狀態(tài)圖。 ---大部分的算法都是以C語言為原代碼的,通常我們要進(jìn)行硬件實(shí)現(xiàn),就必須將C語言轉(zhuǎn)化成VHDL或Verilog語言,這樣就很容易導(dǎo)致風(fēng)險(xiǎn)和錯(cuò)誤的出現(xiàn)。但利用Handle-C語言則不會(huì)出現(xiàn)這樣的問題,因?yàn)樗旧硎腔贑的語言體系,可以直接用來描述算法,隨后進(jìn)行編譯加載到硬件上,方便易懂,大大地節(jié)省了編程時(shí)間,提高效率。
---直接面向于FPGA和PLD,Handle-C為硬件原型和最初電子產(chǎn)品的開發(fā)提供了一種快速的布線形式,這種開發(fā)過程可以在完整的軟件環(huán)境里進(jìn)行。Handle-C為設(shè)計(jì)者提供很大的開發(fā)空間,可以不斷地進(jìn)行調(diào)試以確定最終設(shè)計(jì)。---Handle-C語言可以應(yīng)用到廣泛的硬件實(shí)現(xiàn)編程中,如:
---網(wǎng)絡(luò)安全——DES編密碼算法在硬件的實(shí)現(xiàn)
---數(shù)字音樂——在可重置的硬件實(shí)現(xiàn)MP3解碼
--- 圖形處理——在FPGA/PLD上實(shí)現(xiàn)復(fù)雜的圖像處理
---以上只是Handle-C應(yīng)用的一部分,隨著它的不斷發(fā)展,相信其應(yīng)用范圍也會(huì)越來越廣。2
Handle-C與C語言的比較---與C語言比較,Handle-C有如下的局限性:
---(1) 函數(shù)沒有遞歸性;
---(2) 不支持舊類型的函數(shù)定義;
---(3) 不支持變量長度參數(shù)列表;
---(4) 不能改變變量的長度;
---(5) 1.0版本不支持浮點(diǎn)運(yùn)算(新的1.1版本支持浮點(diǎn)運(yùn)算的IP庫,可以向該公司購買)。
---另外,Handle-C的操作符與C語言既有相同之處,又有其自身獨(dú)有的關(guān)鍵詞(見表2),編程人員在實(shí)際的編程中應(yīng)該對(duì)以下的異同加以重視
---下面對(duì)Handle-C語言中僅有的操作符進(jìn)行一些簡單的說明。
---Delay表示對(duì)一個(gè)信號(hào)的延時(shí);
---?與!是兩個(gè)相對(duì)應(yīng)的操作符,?表示從一個(gè)通道(channel)里讀出數(shù)據(jù);!表示向一個(gè)通道
里寫進(jìn)數(shù)據(jù);
---piralt多用于分支語句,函數(shù)里面有多個(gè)操作,寫在前面的case具有最高的執(zhí)行優(yōu)先權(quán);
---seq 和par為Handle-C在語法上新增加的兩種結(jié)構(gòu),seq為順序結(jié)構(gòu),在seq內(nèi)的每一句程序
都按每個(gè)時(shí)鐘來執(zhí)行;而在par語句中,所有的程序代碼段都在同一個(gè)時(shí)鐘來臨時(shí)執(zhí)行。在程序
中,如無seq和par操作符,則認(rèn)為語句為順序結(jié)構(gòu)。
---Ifselect的用法如if...else。
---Handle-C程序的編寫如同C/C++程序的編寫規(guī)范,也要引進(jìn)各種頭文件,也可以對(duì)各種函數(shù)進(jìn)
行調(diào)用。對(duì)于其輸入輸出端口有它自身嚴(yán)格的定義,時(shí)鐘信號(hào)由用戶自己定義,這些操作在此不
作深入的探討。
---那么如何將C語言與Handle-C語言對(duì)應(yīng)起來呢?以下是將傳統(tǒng)的C語言映射到硬件上的幾個(gè)步
驟:
---(1) 決定如何將軟件系統(tǒng)映射到目標(biāo)硬件平臺(tái)。
---(2) 將傳統(tǒng)的C語言程序轉(zhuǎn)化成Handle-C程序,并用仿真器檢查程序的語法錯(cuò)誤。
---(3) 從Handle-C提供的特別的操作平臺(tái)去修改已有的程序代碼。
---(4) 加入良好的并行操作。
---(5) 在程序中加入必須的硬件接口及映射仿真通道。
---(6) 使用FPGA的布線工具去產(chǎn)生FPGA硬件映射程序。
---以上的映射步驟僅供參考,實(shí)際應(yīng)用中,可以根據(jù)設(shè)計(jì)的需要適當(dāng)?shù)卦黾踊蚴莿h減相應(yīng)的步
驟。
Handle-C與VHDL的比較---雖然Handle-C語言與VHDL語言各有自己的一套的編程語法規(guī)則,但兩者的根本目的是一樣的,即要把算法思想硬件化,加載到可編程芯片里進(jìn)行實(shí)際應(yīng)用。Handle-C本身是基于C的語言體系,可以直接用來描述算法,方便易懂,大大地節(jié)省了編程時(shí)間,提高效率。而VHDL語言的編寫符合硬件工作者的思維架構(gòu),較容易進(jìn)行模塊化編程,將所要實(shí)現(xiàn)功能進(jìn)行分塊實(shí)行。
---VHDL編程中的端口定義映射在Handle-C代碼中的格式如下:
---Interface VHDL_ entity_sort (VHDL_to_HC_port {, VHDL_to_HC_port})
---VHDL_from_HC_port{,VHDL_from_HC_port});
---其中:VHDL_entity_sort為VHDL實(shí)體的名稱。
---VHDL_to_HC_port為Handle-C輸入的端口的類型和名稱。
---VHDL_from_HC_port為Handle-C輸出的端口的類型和名稱。
---如果要把程序進(jìn)行綜合,我們目前要把Handle-C程序編譯成VHDL,用Snyplify、
LeonardoSpectrum或FPGA Exprerss等工具將這些代碼進(jìn)行綜合。我們也可用Altera或Xilinx 公司的布線工具去將程序進(jìn)行布局布線。---其他編程上的區(qū)別在此就不展開討論了。2
Handle-C的編譯環(huán)境簡介---Handle-C語言標(biāo)準(zhǔn)是由Celoxica公司提出的,該公司同時(shí)也推出了相應(yīng)的編譯環(huán)境軟件DK1.1,該軟件的使用要先與C/C++的語言環(huán)境相連接起來,以C/C++作語言基礎(chǔ)進(jìn)行編程,所以安裝完DK1.1軟件后,應(yīng)該安裝的編譯器有Visual C++6.0(或更高版本),或者是Borland C++編譯器5.5版本。該編譯環(huán)境所面向的FPGA設(shè)計(jì)的器件有如下系列:Xlinx 4000E、Xlinx 4000L、Xlinx 4000EX、Xlinx 4000XL、Xlinx 4000XV、Xlinx Virtex、Altera 10K、Altera 20K。另外,此軟件還可以使用Xilinx公司或Altera公司的可編程邏輯布局布線工具、可以與ModelSim軟件工具連接起來,直接在DK1.1里調(diào)用。
---如同在C語言中加上頭文件即可調(diào)用庫函數(shù)一樣,在DK1.1中,也可很方便地調(diào)用各種功能
庫,如浮點(diǎn)的IP庫等。通過這樣的連接,便可使Handle-C的應(yīng)用范圍更加廣泛。1
結(jié)論---隨著EDA技術(shù)的不斷成熟,軟件和硬件的相互融合也越來越多,Handle-C語言設(shè)計(jì)的前景應(yīng)該會(huì)更好。現(xiàn)在Celoxica公司提出的Handle-C語言已經(jīng)越來越成熟,而且所能支持應(yīng)用的FPGA芯片也越來越多,這種新的硬件描述語言將會(huì)成為將算法硬件化的一種利器。2
本詞條內(nèi)容貢獻(xiàn)者為:
曹慧慧 - 副教授 - 中國礦業(yè)大學(xué)