Handel-C是一個程式語言,是一個專門編譯用在FPGA以及ASIC上的硬件描述語言。它是一個C語言的子集,並且有一些非標準的控制硬件即時性以及並列性的特性。

Handel-C
編程範型指令式程序式, 結構化), 並行
設計者牛津大學電腦實驗室
實作者ESL; Celoxica; Agility; Mentor Graphics
釋出時間1996年
型態系統靜態, 表明, 標稱, 類型推論
作業系統跨平台
副檔名.hcc, .hch
網站www.mentor.com/products/fpga/handel-c/
主要實作產品
Celoxica DK
啟發語言
C, CSP, occam

補充特徵

為了要描述複雜的演算法,C語言的子集包含了所有C語言常用的特性。像許多嵌入式編譯器,浮點數資料型態都會被忽略掉。透過外部函式庫的支援,浮點數運算會變的更有效率。

並列程式

為了設立一種描述並列行為的方式,使用了一些CSP關鍵字,還有Occam的通用檔案結構。

例如[1]

par {    
     ++c;
     a = d + e;
     b = d + e;
}

通道

通道提供了在並列線程之間的訊息傳遞機制。通道可以定義為非同步的或同步的(分別有和沒有緩衝區儲存)。一個線程寫一個同步通道會被立即阻塞,直到對應的監聽線程準備好接收這個訊息。類似的接收線程將阻塞在讀陳述式上,直到傳送線程執行了下一個傳送。因此它們可以用作同步線程的方式[1]。例如:

par {
    chan int a; // 声明一个同步通道
    int x;

    // 开始发送线程
    seq (i = 0; i < 10; i++) {
        a ! i;  // 向通道顺序的发送0到9
    }

    // 开始接收线程
    seq (j = 0; j < 10; j++) {
        a ? x;  // 进行10次从通道读入变量x
        delay;  // 在连续读取之间介入1个时钟周期的延迟
                // 这有阻塞在写入之间的发送线程的效果
    }
}

非同步通道提供了特定數量的儲存,通過它們以FIFO的形式進行數據傳遞。在這個FIFO既不充滿又不空無的時候,傳送和接收線程二者可以不被阻塞的進行。但是,在FIFO是空無的時候,接收線程將被阻塞於下次讀取之時。當它是充滿的時候,傳送線程將被阻塞於下次傳送之時。有着差異的時鐘域英語Clock_domain_crossing參與者的通道是自動非同步的,因為需要至少一個儲存元素來緩和亞穩定性英語Metastability (electronics)

一個線程可以同時等待多個通道,同步的或非同步的,作用於給定優先級的特定次序下的第一個可用者之上,或者在都沒有準備好的情況下可選的執行一個可替代的路徑。

歷史

Handel-C是牛津大學計算實驗室裏面的硬件編譯群組所發展一系列的硬件描述語言。大約在1996年早期,Handel HDL進化到Handel-C。

Handel-C在被ESL發表之後,被許多大學的硬件研究單位被採用。

其他的C HDL子集也大約在同一時間被發展出來,像是1994年在多倫多大學的Transmogrifier C(現在變為開原始碼專案FpgaC英語FpgaC),還有在洛斯阿拉莫斯國家實驗室的Streams-C(現在已經得到Impulse加速技術公司的認可,並且重新命名為Impulse C英語Impulse C)。

參見

參照

  1. ^ 1.0 1.1 Handel-C Language Reference Manual (PDF). [2020-05-10]. (原始內容存檔 (PDF)於2010-06-15). 

外部連結