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). 

外部連結