ヘンデルC

ヘンデルC
パラダイム命令型手続き型構造化型)、同時型
デザイン:オックスフォード大学コンピューティング研究所
開発者ESL、Celoxica、Agility、Mentor Graphics、Siemens EDA
初登場1996
安定版リリース
バージョン3.0
タイピングの規律静的顕在的名目上推論的
OSクロスプラットフォーム(マルチプラットフォーム)
ファイル名拡張子.hcc、.hch
Webサイトeda .sw .siemens .com /en-US /ic /precision /
主要な実装
セロキシカ DK
影響を受けた
CCSPオッカム

Handel-Cは、低レベルハードウェアを対象とした高レベルハードウェア記述言語であり、 FPGAプログラミングで最も一般的に使用されています。Handel-Cは、最初の高レベルプログラミング言語がCPUプログラミングに与えた影響と同様のものをハードウェア設計に与えます。Handel-Cは、 Cプログラミング言語のチューリング完全なサブセットであり、並列コンピューティングに重点を置いています。

特定のコンピュータアーキテクチャをターゲットとする他の多くのハードウェア設計言語(HDL)とは異なり、Handel-Cは複数のHDLにコンパイルでき、対応するハードウェアに合成できます。これにより、開発者は特定の設計言語やアーキテクチャの 特異性に煩わされることなく、目の前のプログラミングタスクに集中できます。

追加機能

Handel-CのCサブセットには、複雑なアルゴリズムを記述するために必要な一般的なC言語機能がすべて含まれています。多くの組み込みCコンパイラと同様に、浮動小数点データ型は省略されています。浮動小数点演算は、非常に効率的な外部ライブラリによってサポートされています。

並列プログラム

並列動作を記述する方法を容易にするために、Occam プログラミング言語の一般的なファイル構造とともに、通信順次プロセス(CSP) キーワードのいくつかが使用されます。

例えば: [ 1 ]

パー{ ++ c ; a = d + e ; b = d + e ; }

チャンネル

チャネルは、並列スレッド間でメッセージを渡すためのメカニズムを提供します。チャネルは、非同期または同期(それぞれ、推論された記憶要素の有無)として定義できます。同期チャネルに書き込みを行うスレッドは、対応する受信スレッドがメッセージを受信する準備ができるまで、直ちにブロックされます。同様に、受信スレッドは、送信スレッドが次の送信を実行するまで、read文でブロックされます。したがって、チャネルはスレッドを同期させる手段として使用できます。[ 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 ; // チャネルから変数 x への 10 回の読み取りシーケンスを実行しますdelay ; // 連続する読み取りの間に 1 クロック サイクルの遅延を導入します// これにより、書き込み間の送信スレッドがブロックされます} }

非同期チャネルは、 FIFOの形式で、通過するデータ用の指定された量のストレージを提供します。この FIFO が満杯でも空でもない間は、送信スレッドと受信スレッドの両方がブロックされることなく処理を続行できます。ただし、FIFO が空の場合、受信スレッドは次の読み取り時にブロックされます。FIFO が満杯の場合、送信スレッドは次の送信時にブロックされます。異なるクロックドメインのアクターを持つチャネルは、メタスタビリティを軽減するために少なくとも 1 つのストレージ要素が必要となるため、自動的に非同期になります。

スレッドは、同期または非同期の複数のチャネルを同時に待機し、指定された優先順位に従って最初に利用可能なチャネルに基づいて動作したり、準備ができていないチャネルがある場合はオプションで代替パスを実行したりすることができます。

スコープと変数の共有

宣言のスコープは{ ... }、宣言が行われたコードブロック()内に限定されます。宣言はサブブロック内のスコープ内にあるため、スコープは階層的な性質を持ちます。[ 1 ]

例えば:

整数a ;void main ( void ) { int b ; /* "a" と "b" はスコープ内です */ { int c ; /* "a"、"b"、"c" はスコープ内です */ } { int d ; /* "a"、"b"、"d" はスコープ内です */ } }

C言語の拡張

Cの標準的なセマンティクスがプログラムのタイミングに与える影響に加えて、 FPGA環境の実用性やOccamから得られる言語要素を記述するために 、次のキーワード[ 1 ]が予約されています。

型とオブジェクト 表現 声明
ちゃん < ... > (型明確化) ! (チャンネルに送信)
チャニン [ : ] (ビット範囲選択) ? (チャンネルから読み取る)
チャヌート \\ (落とす) 遅れ
マクロ式 <- (取る) 選択の場合
外部の @(連結演算子) intwidth を設定する
外部除算 選択 let ... ; で
列をなして パー
インタフェース プリアルト
内部 リリースセマ
内部分割 時計を合わせる
mpram 家族を設定する
マクロプロシージャ セットパーツ
ラム 設定 リセット
ロム シーケンス
セマ {...} リセットを試す
共有 トリセマ
信号
未定義
女性

スケジュール

Handel-Cでは、代入と遅延命令は1サイクルで実行されます。その他の操作はすべて「フリー」です。[ 1 ] これにより、プログラマーはタスクを手動でスケジュールし、効果的なパイプラインを作成できます。適切な遅延を設定してループを並列に配置することで、パイプラインはハードウェアリソースの使用量を増やす代わりに、データスループットを大幅に向上させることができます。

歴史

Handel-Cの歴史的ルーツは、オックスフォード大学コンピューティング研究所のハードウェアコンパイルグループによって開発された一連のハードウェア記述言語にあります。Handel HDLは1996年初頭頃にHandel-Cへと進化しました。オックスフォードで開発された技術は、 1996年にEmbedded Solutions Limited(ESL)の基盤製品として成熟しました。ESLは2000年9月にCeloxicaに改名されました。

Handel-C は ESL によってリリースされた後、多くの大学のハードウェア研究グループに採用され、その結果、特に英国の学術コミュニティ内で選ばれるハードウェア設計ツールとしての地位を確立することができました。

2008 年初頭、Celoxica の ESL 事業は Agility に買収され、Agility は Handel-C をサポートする ESL ツールなどの製品を開発、販売しました。

2009年初頭、アジリティは更なる資本投資や融資の獲得に失敗し、事業を停止した[ 2 ]。

2009年1月、メンターグラフィックスはアジリティ社のC合成資産を買収した。[ 3 ]

同じ時期に開発された他のサブセット C HDL としては、1994 年にトロント大学で開発された Transmogrifier C (現在はFpgaCオープンソース プロジェクト) と、ロスアラモス国立研究所で開発された Streams-C (現在はImpulse Cという名前でImpulse Accelerated Technologiesにライセンス供与されている) がある。

参照

参考文献

  1. ^ a b c d e「アーカイブコピー」(PDF)。2010年3月31日時点のオリジナル(PDF)からアーカイブ2010年3月31日閲覧。{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)Handel-C言語リファレンスマニュアル
  2. ^ Gabe Moretti (2009年1月19日). 「Agility DS、信用収縮の犠牲者」 . EETimes.com.
  3. ^ Dylan McGrath (2009年1月22日). 「MentorがAgilityのC言語合成資産を買収」 . EETimes.com.