第14回: 論理合成と制約条件・HDL設計の関連技術・IPコアと集積回路設計
順序回路の復習
今日はまず、演習で行った同期リセットつきレジスタや
単純なカウンタのVHDL記述、
ステートマシンとそのVHDL記述を、
改めておさらいしておくことにしましょう。
論理合成と制約条件・HDL設計の関連技術
VHDLで記述した論理回路を、FPGAに実装したり、集積回路(LSI)として
実現するためには、まずは論理合成を行う必要がありました。
この論理合成は、基本的には自動的に行われるものですが、
残念ながら現状では万能ではなく、いろいろとクセがあります。
そのクセを理解し、VHDL記述をするときに気をつけておくと、
よりよい回路を合成できるので、いくつか紹介しておきましょう。
リソース割当て・リソースシェアリング
[p.129]
例えば↓のように記述された回路を考えてみます。
process (a, b, c, s) begin
if (s = '1') then x <= a + b;
else x <= a + c;
end if;
end process;
この記述の通りに回路を作るとすると、出力xを与える式が、
sの値に応じて変わるので、教科書図6.2左(p.129)のような
回路が得られるはずです。
しかし、この式をよく見ると、xを与える式の片方は共にaですので、
aに加えるもう1つの変数をb, cからsに応じて選ぶようにして
教科書図6.2右(p.129)のような回路によっても、
同じ結果を得ることができるはずです。
この両者は、加算を行う加算器の数が、左の回路が1個、
右の回路が2個ですから、回路規模は明らかに右の回路が小さく、
動作速度も同じはずですので、右の回路の方がよい回路、
ということになります。
デキのいい論理合成ツールであれば、勝手に右の回路を合成してくれると
よいのですが、
現在の論理合成ツールでは、このどちらの回路が得られるかは、
残念ながら予測はできません。
明示的に右の回路を合成させたい場合には、
どのようなVHDL記述をすればよいか、考えてみましょう。
状態コード割当
[p.130]
ステートマシンを設計するとき、各状態を区別できれば、各状態に
どのような値(状態コード)を割り当ててもかまいません。
この状態符号の割り当て方によって、合成される結果の回路の
規模・動作速度も変わってきます。
代表的な状態コードを紹介しておきます。
- バイナリコード: 最短ビット幅のコードを順に
(例: 00, 01, 10, 11)
- グレイコード: 隣り合うステートのコードが1ビットだけ違うように
(例: 00, 01, 11, 10)
- ワンホットコード: 状態数だけのビット幅で、1ビットだけが1となる
(例: 0001, 0010, 0100, 1000)
どの状態にどのような状態コードを割り当てるとよいかの一般論は、
残念ながら存在しません。
試行錯誤でいろいろ試してみるか、それを自動的に行ってくれる
ツールがある場合はそれを利用します。
エリア制約・タイミング制約
[p.134]
一般に、論理合成で得られる論理回路の回路規模と
動作の遅延時間はトレードオフの関係にあります。
つまり、回路規模が大きいほど遅延時間が短く、
遅延時間が長くてもよければ回路規模を小さくできます。(p.135の図6.9)
これは、回路規模が大きいほど、回路内の負荷容量を駆動する能力が
大きく、高速に負荷を充放電できるため、論理値(0/1)の変化が
速くなる、というのが主な要因です。
順序回路の場合は、次状態決定部の組み合わせ論理回路の
遅延時間が、順序回路としての動作速度の周期を決めることになります。
(この遅延時間に、フリップフロップのセットアップ時間・
ホールド時間(図6.10:p.135)を加えたものが、動作周期の下限という
ことになります)
IPコアと集積回路設計
VHDLで記述した論理回路は、あくまでも機能を記述したもので、
実際の論理回路ではありません。
実際の動作する論理回路にするためには
実際に使うFPGAなどで使える論理ゲートやフリップフロップなどの
ライブラリを用いて論理合成を行い、そのFPGAなどで動作する
論理回路に変換する必要がありました。
ただしこの論理合成自体は、ほぼ自動的に行うことができます。
言い換えると、VHDLで記述した論理回路は、使うときに、
動作させたいもの(FPGAなど)にあわせて論理合成をかければ、
使い回しがきくもの、ということができます。
このように、使い回しがきくものを
IP (Intellectual Property)と呼び、
商用・非商用を含めて、いろいろなものが流通しています。
例えば非商用のIP流通経路としては
OPENCORES.ORGなどが
知られています。
戻る