GAIO CLUB

2004年10月04日

組み込みソフト技術者のための ハードウエア知識講座-HDL言語によるASIC開発をちょっとかじってみよう

GAIO CLUB 特集
GAIO CLUB【2004/10月号】
組み込みソフト技術者のためのハードウエア知識講座
HDL言語によるASIC開発をちょっとかじってみよう!


最近では、組み込み製品の多くに、SoC・AISCが搭載されています。組み込みソフトの開発においても、ASICチップを相手にすることが多くなっています。本特集は、ASICチップ設計を専門としない組み込みソフト開発者を対象とした勉強講座です。この機会に、ASIC開発をちょっとかじってみましょう。

ASICの設計手法入門

ASICとは主に論理回路を1つのシリコンチップ(ダイと言う)の上に集積したものです。簡単に言えばシリコンのダイの上に自由な種類の論理素子を形成できるものです。一昔前は、AND、OR、NOT、Flip-Flopなどのような論理(ロジック)ICを手配線して、機能ロジック回路を作っていましたが、ASICの中身は、これと本質的に同じです。
  • しかしながら、ロジックIC(74シリーズ等があります)の組み合わせによる回路とASICの中身では、その回路規模(ゲート数と言う)が大きく違います。最近の大規模ASICは数百万ゲートと言われており、せいぜい数十個のロジックICによる回路とは比べものになりません。

ハードを言語で設計する

設計の手法も大きく異なります。ロジックICの組み合わせによる回路設計は、実現したい論理をAND、OR、NOT、Flip-Flopの組み合わせに置き換え、これをそのままロジックICの素子に対応させて配線して作りました。これは既製品のICチップを使うことが前提ですから、回路図を中心とした設計手法が主流です。

ASICにおいても、回路図をベースに開発する方法は、小規模な機能の開発や最小限のリソースで回路を作りたい場合など、今でも今でも使用されています。

これとは異なる設計手法として、「HDL(ハードウエア記述言語)」による開発手法があります。これは回路を直接設計するのでなく、機能を言語で記述して定義し、マイコンソフトで言うコンパイラの様なツール「論路合成ツール」によって回路ロジックを生成するものです。この概念は古くから考案されていたものですが、最近のPCの高性能化・低価格化や「論理合成ツール」が実用レベルに達したことにより、主流になりつつあります。

それよりも、要求機能の大規模化に伴い、使用する論理ゲート数が大きくなり、回路図によるロジック設計に必要な工数が現実的では無くなって来たこと、汎用のロジックICの組み合わせでは、コストが高くなりすぎることが原因でしょう。

HDLの特徴

HDLは回路を定義するための言語です。現在多く使用されているものは、「Verilog-HDL」と「VHDL」の2つです。その他にUDL/IやSFLと呼ばれるものがありますが、マイナーな存在です。(各々の特徴などありますが、本稿では特にふれず、他の専門書に任せたいと思います。)

また、最近では、開発する機器の高機能化により、安易に回路を設計しても、満足に動作しない状況が顕著になっています。ASICはもちろんのこと、ボード設計においても、「シミュレーション」による事前動作検証の重要性が高まっています。HDLによる大きなメリットの1つが、「シミュレータ」による動作の検証が非常に容易であることです。HDLにはシミュレーションのためのテストデータを記述するための仕様も含まれています。

論理合成とFPGA

下図がHDLによるASICの開発手順です。ここでのキーワードが、「論理合成」と「FPGA」です。論理合成とは、HDLで動作定義した回路を、実際のゲート回路に変換することです。「論理合成ツール」により、「ネットリスト」よ呼ばれる、各回路部品(セル)の接続関係を示すテキストファイルを生成します。生成すると言っても、実際は多数の「セルライブラリ」が用意されており、定義されたロジックに応じて、このライブラリを組み合わせて回路を合成する仕組みです。
また、「FPGA」とは、多数の回路部品(セル)を予め内蔵した特殊なチップで、後から論理合成ツールが生成したネットリストデータを書き込むことで、その接続関係を変えられる「プログラマブルチップ」のことです。

半導体工場でシリコンを製造することなく、その場で要求仕様通りのチップができるため、シリコン本生産の前に、FPGAをボードに実装して動作検証を行うことが一般的に行われています。

実際の回路を設計してみる

では、実際にVHDLで設計した回路の例を見てみましょう。ここでは、4つのDIPスイッチによって設定した数(2進数)に従って、その数を7セグLEDに表示する回路を考えてみます。
この回路をVHDLで設計すると、下図のようになります。ここでは、C言語と同じような「case」文によって、スイッチの信号設定(INPUT)に従って、7ビット出力信号線(Y)を2進数で定義しています。C言語をご存じであれば、お分かり頂けると思います。
この記述を論理合成すると、下図のような回路ができあがります。論理合成ツールには、ALTERA社のWEBサイトで無料で入手できる「Quartus II4.0」を使用し、FPGAにはMAX7032(32個のマクロセルが入った最小のFPGA)を使用しています。
論理合成ツールを使用して生成した回路はライブラリセルの組み合わせであるため、手入力で回路図を設計した場合に比べて、多少の無駄があります。しかしながら、回路図と比べれば、HDLソースはご覧の通りロジックの可視性が高いばかりか、シミュレータによる検証が容易なことから、現在の大規模回路の設計には、無くてはならないものになっています。

いかがでしたか?回路記述言語によるチップ設計がどんなものか、お分かり頂けたかと思います。

人気のコラム

最新のコラム