CQのSTRATIXボードでインクリメントデータを出力させてみた例
ソースコード(大元のソースはt3.hcc)やQUARTUSのプロジェクト一式
Cの感覚で書いたソースコードがハードウェア(FPGA)化されるHandel-C。製品版は企業でもおいそれとは価格だけども、昔の研究段階版がフリーで手に入る。
当時XilinxのXC3000で実際に動かすところまで行っていたものでもあるし、今のデバイスで動かすことだってできるのではないかとやり始めてみたものの少々難儀。
それでも何とか潜り抜けてALTERAのFPGAをt使ってインクリメント波形が出るところまではたどり着いた。
これはここまでの実験記録。
入手先
http://www.inf.pucrs.br/~moraes/topicos/hdls/HANDEL-C/
のPC_BINの下にあるHCC.EXE。ドキュメント類も落としておくと良いだろう

インストール
特別なことは必要ない。とりあえずパスがとおっていればいい模様
ただし、なぜかWindowsXPのDOS窓ではうまくいかない。Win98/2000のDOS窓は大丈夫

はじめてのサンプル
とりあえず作ったのは下に書いたようなこんなソース。HCCはXNFを生成するのがデフォルトだけども、今のツールではXNFは受け付けない。
ここで、fpga_typeにVHDLを指定すると、VHDLソースコードを生成する。fpga_chipなどはこの際特に意味はない。
こいつをdefault.hccという名前でこしらえておく。
const spec t1 = {
 fpga_type = "VHDL",  // これでVHDL出力を指示
 fpga_chip = "3195APQ160-3", // てきとー
 clock_pad = "P160", //いいかげん
 not_error_pad = "P55", //なんだそれ?
 finish_pad = "P44", //しらない
 clock_divider = "1", //意味あるのか?
 carry_weight = "50", //なんじゃらほい
 critical_weight = "100" //あとは野となれ
};

const spec uudat = { // こんな感じでポートが定義できる模様
 data = {"P0","P1","P3","P4"}, // これが実体
 txrdy = "pt",   // 一応txrdyは勝手に生成されてしまうので、その分の定義
 rxrdy = "pr"   // こっちは要らないかも
};
//=====おまじないはここまで=======

//=====ここから本体 =======
//== main()の引数が一般的なC言語と違っているのは
//== この時代のHandel-Cでは引数で
//== ポートやらチップ種別なんかを宣言する
//== という方法を使っていたため。
//== 今のバージョンではinterfaceなどに切り替わって
//== main()の引数はvoidになった

main(target = t1,port (out) pport = uudat:4)
{
 int x:8;
 x=0;
 do {
  x = x+1;
  pport ! x.(0..3); //この時代のポートへの出力は「チャンネル」
            //扱いで出力するしかなさそう
 } while (1);
}

コンパイル
hCC -ns ソースファイル名
でいい。-nsはシミュレーションしないよという指定。なぜかコンパイルが終わると即シミュレーションを実行しようとするので、黙らせておくためにこうした。

VHDLソースコード修正
このままQUARTUSにかけてみたら出るわ出るわのエラーの嵐。
どうもいかんのだなということで手作業で修正した。
今のところ
・使ってないからコメントアウトしてしまうもの
・出力ポートを直接リードしようとするので一回signalで受けてからポートに出すように記述変更
といったもの。
修正したソースはこんな感じ

ライブラリの作成
ANDだとかORだとかを直接落とさずにコンポーネントとして使おうとするのだけども、これがどこにも見当たらない。仕方がないので、名前から想像しながら作成したライブラリがこれ
ただし、今のところ上で示したサンプルが動くのに必要な分しか作っていないので、今後もっと拡充しなくてはならないかもしれない。

フィッティング
これでVHDLのソースが出来上がったので、これをQUARTUSに与えて、実際のFPGA(私が使ったのはSTRATIXボード)にマッピングしてみたらとりあえず動くところまでいった。
この結果が上に示した波形。
ソースコードではxをインクリメントしながら下位4ビットをpportに出力しているのだが、確かに波形として現れているのがみてとれる。