簡介
Handle-C為新一代硬體描述語言編譯工具,過去因為太複雜而不能用硬體描述語言表示的算法以及由於處理器運行速度太慢而不能處理的算法,現在都可以利用Handle-C語言在大規模FPGA硬體上得以實現。設計者可以利用Handle-C語言,能在很短的時間裡創建更龐大、更複雜和更高速的系統。
可程式邏輯器件的設計方法經歷了布爾等式、原理圖輸入、硬體描述語言這樣一個發展過程。隨著設計的日益複雜和可程式邏輯器件規模的不斷擴大,人們不斷地尋求著更加抽象的行為級設計方法,以便在儘可能短時間內完成自己的設計構思,並希望能夠找到一種方法,在更高的層次下設計更複雜、更高速的系統,能將軟體設計和硬體設計統一到一個平台下,這就是Handle-C產生的現實背景。
歷史
Handel-C是Oxford University裡面的硬體編譯群組所發展一系列的硬體描述語言。大約在1996年早期,Handel HDL進化到Handel-C。
Handel-C在被ESL發表之後,被許多大學的硬體研究單位被採用,
其他的C HDL子集也大約在同一時間被發展出來,像是1994年在多倫多大學的Transmogrifier C(現在變為開源碼專案FpgaC),還有在Los Alamos National Laboratory的Streams-C(現在已經得到Impulse Accelerated Technologies的認可,並且重命名為Impulse C)。
意義
Handle-C在硬體的算法實現和硬體/軟體結合設計中,可謂是一種具有革命性意義的語言,它的標準是由Celoxica公司提出的。Handle-C語言在基於ISO/ANSI-C語言的基礎上,能夠通過軟體設計方法來實現硬體設計。Handle-C具有硬體發展的外延擴展,包括可變的數據寬度,並行處理方式和並行執行緒的通訊方式。該語言使用了一種簡單的同步模型,簡化了系統配置人員和軟體工程師的設計工作。Handle-C的連續和並行操作的描述能力,可以用更短、更易懂的代碼來代替以前的複雜狀態圖。 ---大部分的算法都是以C語言為原代碼的,通常我們要進行硬體實現,就必須將C語言轉化成VHDL或Verilog語言,這樣就很容易導致風險和錯誤的出現。但利用Handle-C語言則不會出現這樣的問題,因為它本身是基於C的語言體系,可以直接用來描述算法,隨後進行編譯載入到硬體上,方便易懂,大大地節省了編程時間,提高效率。
---直接面向於FPGA和PLD,Handle-C為硬體原型和最初電子產品的開發提供了一種快速的布線形式,這種開發過程可以在完整的軟體環境裡進行。Handle-C為設計者提供很大的開發空間,可以不斷地進行調試以確定最終設計。---Handle-C語言可以套用到廣泛的硬體實現編程中,如:
---網路安全——DES編密碼算法在硬體的實現
---數字音樂——在可重置的硬體實現MP3解碼
--- 圖形處理——在FPGA/PLD上實現複雜的圖像處理
---以上只是Handle-C套用的一部分,隨著它的不斷發展,相信其套用範圍也會越來越廣。
Handle-C與C語言的比較
---與C語言比較,Handle-C有如下的局限性:
---(1) 函式沒有遞歸性;
---(2) 不支持舊類型的函式定義;
---(3) 不支持變數長度參數列表;
---(4) 不能改變變數的長度;
---(5) 1.0版本不支持浮點運算(新的1.1版本支持浮點運算的IP庫,可以向該公司購買)。
---另外,Handle-C的操作符與C語言既有相同之處,又有其自身獨有的關鍵字(見表2),編程人員在實際的編程中應該對以下的異同加以重視
---下面對Handle-C語言中僅有的操作符進行一些簡單的說明。
---Delay表示對一個信號的延時;
---?與!是兩個相對應的操作符,?表示從一個通道(channel)里讀出數據;!表示向一個通道
里寫進數據;
---piralt多用於分支語句,函數裡面有多個操作,寫在前面的case具有最高的執行優先權;
---seq 和par為Handle-C在語法上新增加的兩種結構,seq為順序結構,在seq內的每一句程式
都按每個時鐘來執行;而在par語句中,所有的程式代碼段都在同一個時鐘來臨時執行。在程式
中,如無seq和par操作符,則認為語句為順序結構。
---Ifselect的用法如if...else。
---Handle-C程式的編寫如同C/C++程式的編寫規範,也要引進各種頭檔案,也可以對各種函式進
行調用。對於其輸入輸出連線埠有它自身嚴格的定義,時鐘信號由用戶自己定義,這些操作在此不
作深入的探討。
---那么如何將C語言與Handle-C語言對應起來呢?以下是將傳統的C語言映射到硬體上的幾個步
驟:
---(1) 決定如何將軟體系統映射到目標硬體平台。
---(2) 將傳統的C語言程式轉化成Handle-C程式,並用仿真器檢查程式的語法錯誤。
---(3) 從Handle-C提供的特別的操作平台去修改已有的程式代碼。
---(4) 加入良好的並行操作。
---(5) 在程式中加入必須的硬體接口及映射仿真通道。
---(6) 使用FPGA的布線工具去產生FPGA硬體映射程式。
---以上的映射步驟僅供參考,實際套用中,可以根據設計的需要適當地增加或是刪減相應的步
驟。
Handle-C與VHDL的比較
---雖然Handle-C語言與VHDL語言各有自己的一套的編程語法規則,但兩者的根本目的是一樣的,即要把算法思想硬體化,載入到可程式晶片里進行實際套用。Handle-C本身是基於C的語言體系,可以直接用來描述算法,方便易懂,大大地節省了編程時間,提高效率。而VHDL語言的編寫符合硬體工作者的思維架構,較容易進行模組化編程,將所要實現功能進行分塊實行。
---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實體的名稱。
---VHDL_to_HC_port為Handle-C輸入的連線埠的類型和名稱。
---VHDL_from_HC_port為Handle-C輸出的連線埠的類型和名稱。
---如果要把程式進行綜合,我們目前要把Handle-C程式編譯成VHDL,用Snyplify、
LeonardoSpectrum或FPGA Exprerss等工具將這些代碼進行綜合。我們也可用Altera或Xilinx 公司的布線工具去將程式進行布局布線。---其他編程上的區別在此就不展開討論了。
Handle-C的編譯環境簡介
---Handle-C語言標準是由Celoxica公司提出的,該公司同時也推出了相應的編譯環境軟體DK1.1,該軟體的使用要先與C/C++的語言環境相連線起來,以C/C++作語言基礎進行編程,所以安裝完DK1.1軟體後,應該安裝的編譯器有Visual C++6.0(或更高版本),或者是Borland C++編譯器5.5版本。該編譯環境所面向的FPGA設計的器件有如下系列:Xlinx 4000E、Xlinx 4000L、Xlinx 4000EX、Xlinx 4000XL、Xlinx 4000XV、Xlinx Virtex、Altera 10K、Altera 20K。另外,此軟體還可以使用Xilinx公司或Altera公司的可程式邏輯布局布線工具、可以與ModelSim軟體工具連線起來,直接在DK1.1里調用。
---如同在C語言中加上頭檔案即可調用庫函式一樣,在DK1.1中,也可很方便地調用各種功能
庫,如浮點的IP庫等。通過這樣的連線,便可使Handle-C的套用範圍更加廣泛。
結論
---隨著EDA技術的不斷成熟,軟體和硬體的相互融合也越來越多,Handle-C語言設計的前景應該會更好。現在Celoxica公司提出的Handle-C語言已經越來越成熟,而且所能支持套用的FPGA晶片也越來越多,這種新的硬體描述語言將會成為將算法硬體化的一種利器。