動作記述と構造記述

[] [] []


HDLには動作記述behavioral descriptionと構造記述structural descriptionという2とおりの表現があり、これらを組み合わせてデジタル回路を記述する。

・動作記述はソフトウェア言語のように式や文で記述したもの

・構造記述はモジュールのピン間の接続を記述したもの

例えば図の回路を両方の表現で書くと

 

/* 動作記述 */

wire a,b,y;

assign y = ~(a & b);

/* 構造記述 */

wire a,b,tmp,y;

not not1(tmp,y);

and and1(a,b,tmp);

ちなみにハイブリッドな記述もできる。

/* ハイブリッドな記述 */

wire a,b,y;

not not1(a&b,y);

/* ハイブリッドな記述 */

wire a,b,tmp,y;

assign tmp = a & b;

not not1(tmp,y);

動作記述はこれだけで完結しているが、構造記述は単にnot,andといったモジュールの接続しか記述しておらず、モジュール自体の動作は別途定義されていなければならない。このモジュールをどのレベルにするかは任意だが、FPGA設計に使うのはレジスタ転送レベルRegister Transfer Level (RTL)である。つまり、論理合成とはRTL記述をゲートレベル記述に変換することである。最近は、SystemC言語で書いたビヘイビアレベル記述をRTL記述に変換するツール(動作合成とか高位合成という)も実用化されている。

レベル

抽象度

論理合成

構造記述のモジュール

ビヘイビア・レベル

不可

レジスタを陽に書かずに動作記述したもの

レジスタ転送レベル(RTL)

レジスタ間の代入を動作記述したもの

ゲート・レベル

FFやゲート,LUTなどASIC/FPGA固有の素子

スイッチ・レベル

不可

MOSトランジスタ

RTL以上ではモジュールの大きさは自由に決められるが、

RTL記述においてモジュールの大きさはどのぐらいが適当なのだろうか

下限の方は、関連する複数のレジスタが分割されないレベルがよい。なぜなら構造記述にすると下位モジュールの機能がブラックボックスになるので、例えば、繰り返し出てくるからといってカウンタとかマルチプレクサといった小さい回路をモジュール化すると、書いた本人にしか読めないRTL記述になってしまう。

上限の方は明確でないが、モジュールのピンの意味が単純になるように、ある程度まとまった機能レベルがよい。行数でいえば500行ぐらいではないか。


[] [] []