第3回: シミュレーションと論理合成

テストベンチ

[p.22〜] HDLで論理回路を記述したら、それが正しいかどうかを、 テストパタン(いろいろな信号)を与えて調べることになります。 HDLで記述した回路に与えるテストパタンをHDLで記述したものを 「テストベンチ」と呼びます。 これも例をみてきましょう。
library ieee;
use ieee.std_logic_1164.all;

entity test_adder4 is
end test_adder4;

architecture arch of test_adder4 is
  component adder4
    port (
      a, b: in std_logic_vector(3 downto 0);
      ci: in std_logic;
      co: out std_logic;
      s: out std_logic_vector(3 downto 0));
  end component;
  for i0: adder4 use entity work.adder4(arch);
  signal a, b: std_logic_vector(3 downto 0);
  signal ci: std_logic;
  signal co: std_logic;
  signal s: std_logic_vector(3 downto 0);
begin
  i0: adder4 port map (a=>a, b=>b, ci=>ci, co=>co, s=>s);
  process begin
    a <= "0000"; b <= "0000"; ci <= '0';
    wait for 100ns;
    a <= "1010"; b <= "0101"; ci <= '0';
    wait for 100ns;
    a <= "1010"; b <= "0101"; ci <= '1';
    wait for 100ns;
    a <= "1111"; b <= "0001"; ci <= '0';
    wait for 100ns;
    wait;
  end process;
end arch;
これも文法の細かいところはあまり気にせず、 使うadder4を呼び出し、それに与える信号を順次変えていく、 ということをしています。 もちろん、シミュレーションをするプログラムにこれを与えると、 この回路が動作したように出力が見られますので、 それをみながら、正しい回路になっているかをチェックすることになります。 このように、テストベンチの中では、検証の対象になっている回路を インスタンスとして呼び出していることに注意しましょう。 このような、検証対象の回路をDUT (Device Under Test)と呼びます。

回路のシミュレーション

設計した回路がどのような動作を検証するためには、 テストベンチを、設計したDUT(の実体)に与えたときにどのような出力が出てくるか、を 求める必要がありますが、それを行うプログラムをHDLシミュレータと呼びます。 VHDLで記述したテストベンチとDUTの場合は、VHDLシミュレータを使うことになります。 実際のVHDLシミュレータは、次回に実習で扱うことにしますが、 シミュレータが、設計した回路の動作を模擬し、 出てくる(はず)の出力を求めてくれます。 そして、その出力が、設計通りになっているかをチェックすることになります。 この4ビット加算器の例では、どのような出力が出てくるはずか、を考えておきましょう。

論理合成

HDLで回路を記述したものは、あくまでも、「回路を記述したもの」にすぎません。 これを、実際の情報機器の中で使うためには、「論理回路」に変換する必要が あります。 この変換を「論理合成」と呼び、詳しくは第12週ごろに触れる予定ですが、 見通しをよくするため、ここで簡単に概略をみておきましょう。 [p.128〜] HDLで記述した回路を、その通りの動作をする論理回路に変換する作業が 論理合成です。 構造記述された回路は、そのまま論理回路に変換できますが、 必要に応じて、論理回路の簡略化(最適化と呼びます)を行います。 また動作記述された回路は、その動作(たとえば「加算」)を行う論理回路に 変換する必要があるわけですが、その際に、いろいろな機能の論理回路が あらかじめ用意されている場合が多いので、それを活用して論理合成をします。 このような回路を「ライブラリ」と呼び、加算器などの機能ごとに分けられている 「リソースライブラリ」、いろいろな論理ゲートや機能ブロックの 「テクノロジライブラリ」などがあります。 極端な例で言えば、NOTゲート、ANDゲートなども、テクノロジライブラリの中の 部品の一種です。 そのほかに、場合によってはAND-ORゲートなどの複合ゲートが用意されている場合も あります。

このように、論理合成の際に用いることができるライブラリは、 変換される回路がどのようなものになるか、に強く依存します。 たとえば、次回の演習では、論理回路をFPGAと呼ばれる論理LSIに作り込みますが、 このような場合は、そのFPGA用のライブラリが使われることになります。


次回は、実習ですので、 その予習をしておくこくとよいでしょう。
戻る