動作記述と構造記述
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記述をゲートレベル記述に変換することである。最近は、C言語で書いたビヘイビアレベル記述をRTL記述に変換するツール(動作合成とか高位合成という)も実用化されている。
レベル |
抽象度 |
論理合成 |
構造記述のモジュール |
ビヘイビア・レベル |
高 ↑ ↓ 低 |
不可 |
レジスタを陽に書かずに動作記述したもの |
レジスタ転送レベル(RTL) |
可 |
レジスタ間の代入を動作記述したもの |
|
ゲート・レベル |
可 |
FFやゲート,LUTなどASIC/FPGA固有の素子 |
|
スイッチ・レベル |
不可 |
MOSトランジスタ |
◇
RTL以上ではモジュールの大きさは自由に決められるが、RTL記述においてモジュールの大きさはどのぐらいが適当だろうか。下限は、関連する複数のレジスタが分割されないレベルがよい。なぜなら構造記述にすると下位モジュールの機能がブラックボックスになるので、例えば、繰り返し出てくるからといってカウンタとかマルチプレクサといった小さい回路をモジュール化すると、動作が読みにくい。上限は明確でないが、モジュールのピンの意味が単純になるように、ある程度まとまった機能レベルがよい。行数でいえば500行ぐらいではないか。