Cベース設計とは? 導入の課題は? ――人手による介入が必須,完全自動合成は幻想
●Cプログラムのループ部分をカスタム・ハード化
さて,以上のシステムLSIの設計過程を,C言語を使うという立場で見ると,図5のようになります.
要求仕様定義の過程からC言語,あるいはその拡張言語(以下,単に「C言語」とする)の記述が仕様として得られます(通信系の標準化案や画像処理アルゴリズムのように,最初からC言語などで記述されている場合もよくある).このC言語の記述は図5の左側の「Cプログラム」に相当します.これはプログラムですから,そのままコンパイルしてCPU上で実行可能なはずです.このようにすると,「すべてソフトウェアによる設計」を行ったことになります.
実際には,すべてをマイクロプロセッサ上で実行すると,必要なマイクロプロセッサの性能が非常に高いものになってしまう場合が多く,あまり現実的ではありません.例えば,携帯電話を設計している場合,Pentium 4を利用すれば携帯電話に必要な機能はすべて実現できますが,消費電力などの面で使いものになりません.低消費電力化するのにもっともよいのは,すべてをカスタム・ハードウェア(専用回路)で実現することです.ところが,携帯電話にもWebブラウザを搭載したいとなると,数十万行ものCプログラムになり,カスタム・ハードウェア化など不可能です.このような場合,Webブラウザはマイクロプロセッサ上で実現し,音声のエンコードやデコードなどの処理はカスタム・ハードウェアで実現するなど,図5の中央に示したような形で実現することになります.
一般には,マイクロプロセッサで処理量が多すぎるところをカスタム・ハードウェア化することが多く,Cプログラム上ではループで処理している部分をカスタム・ハードウェア化することになります.また,単にカスタム・ハードウェア化してしまうと,後で設計変更(デコードのアルゴリズムを修正したい,など)を行えないため,図5の右側に示すように,その部分にも何らかのコントローラを入れて,プログラマブルにする方法がよく採用されます.
〔図5〕C言語に基づくハードウェア・ソフトウェア協調設計
与えられたC言語による記述をマイクロプロセッサ用にコンパイルして実行すると,それはすべてをソフトウェアで実装したことになる.また,その中で,特に処理が重い部分(通常,繰り返し処理が多く,ループ文になっている)を専用のハードウェアで実装することで,性能の向上が図れる.あるいは,その部分をさらにマイクロコントローラで制御して,多様性に対応できるようにすることも考えられる.このようのC言語記述から出発し,部分的にハードウェア化するように記述を書き換えていくことで,ハードウェア・ソフトウェア協調設計となる.