第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] ステートマシンを設計するとき、各状態を区別できれば、各状態に どのような値(状態コード)を割り当ててもかまいません。 この状態符号の割り当て方によって、合成される結果の回路の 規模・動作速度も変わってきます。 代表的な状態コードを紹介しておきます。 どの状態にどのような状態コードを割り当てるとよいかの一般論は、 残念ながら存在しません。 試行錯誤でいろいろ試してみるか、それを自動的に行ってくれる ツールがある場合はそれを利用します。

エリア制約・タイミング制約

[p.134] 一般に、論理合成で得られる論理回路の回路規模と 動作の遅延時間はトレードオフの関係にあります。 つまり、回路規模が大きいほど遅延時間が短く、 遅延時間が長くてもよければ回路規模を小さくできます。(p.135の図6.9) これは、回路規模が大きいほど、回路内の負荷容量を駆動する能力が 大きく、高速に負荷を充放電できるため、論理値(0/1)の変化が 速くなる、というのが主な要因です。

順序回路の場合は、次状態決定部の組み合わせ論理回路の 遅延時間が、順序回路としての動作速度の周期を決めることになります。 (この遅延時間に、フリップフロップのセットアップ時間・ ホールド時間(図6.10:p.135)を加えたものが、動作周期の下限という ことになります)

IPコアと集積回路設計

VHDLで記述した論理回路は、あくまでも機能を記述したもので、 実際の論理回路ではありません。 実際の動作する論理回路にするためには 実際に使うFPGAなどで使える論理ゲートやフリップフロップなどの ライブラリを用いて論理合成を行い、そのFPGAなどで動作する 論理回路に変換する必要がありました。

ただしこの論理合成自体は、ほぼ自動的に行うことができます。 言い換えると、VHDLで記述した論理回路は、使うときに、 動作させたいもの(FPGAなど)にあわせて論理合成をかければ、 使い回しがきくもの、ということができます。 このように、使い回しがきくものを IP (Intellectual Property)と呼び、 商用・非商用を含めて、いろいろなものが流通しています。 例えば非商用のIP流通経路としては OPENCORES.ORGなどが 知られています。


戻る