4.1多ビット加算器 P63

琉球大学情報工学科 和田 知久



算術演算子を用いた4ビット加算器のVHDL記述 (演習4.3、リスト4.4) 

リスト4.4(コピー)

もう少し細かく見ると

ライブラリ宣言 library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
ライブラリ宣言、STD_LOGICを使用する場合に必要
いつもSTD_LOGICを使用するのでいつも必要!

IEEE.std_logic_unsignedは、std_logic_vector型で
符号ビットなしの演算を行うためのパッケージである。

ENTITY宣言
回路の名前と
入出力信号
entity ADDER4 is エンティティ宣言
port ( A, B : in std_logic_vector(3 downto 0);
        S      : out std_logic_vector(4 downto 0));
ポート宣言(入出力信号と信号のデータタイプを定義)
入力は4ビット、出力は5ビット
end ADDER4; エンティティ終了。";"忘れるな!
回路の中味の記述 architecture BEHAVIOR of ADDER4 is アーキテクチャ宣言
begin
S <= ('0' & A) + ('0' & B);
end BEHAVIOR;
算術演算”+”を用いて加算を行う場合、左辺のビット長と
右辺のビット長は一致する必要がある。
4ビットどうしの和は5ビットになる可能性があるので、
右辺のMSBに’0’を連接してビット長を調整している。

テストベンチによる検証 P89

テストベンチ

もう少し細かく見ると

ライブラリ宣言 library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
conv_std_logic_vector関数を使うために、 
IEEE.std_logic_arithパッケージが必要
エンティティ entity TESTBENCH_HA is 
end TESTBENCH_HA;
エンティティ宣言
-- テストベンチのエンティティは空
アーキテクチャ architecture SIM_DATA of TESTBENCH_HA is  
component ADDER4
port ( A, B : in std_logic_vector(3 downto 0);
    S  : out std_logic_vector(4 downto 0));
end component;
以下の用いる回路部品(コンポーネント)の宣言
signal SA, SB : std_logic_vector(3 downto 0);
signal SS : std_logic_vector(4 downto 0);
新たに使用する信号の宣言
begin
-- design under test
M1 : ADDER4 port map (SA, SB, SS);
-- test vector
P1 : process
begin
  for I in 0 to 15 loop
    for J in 0 to 15 loop
      SA <= conv_std_logic_vector(I,4);
      SB <= conv_std_logic_vector(J,4);
      wait for 10 ns;
    end loop;
  end loop;
end process;
end SIM_DATA;
実際のテストベンチ回路

M1がテストされる回路

P1が入力信号を作成する記述
ここでは2重のforループを用いて入力値を作成している。
入力信号は
std_logic_vectorで、ループ変数I,Jは整数なので、
conv_std_logic_vector(I,4)関数で、整数Iを4ビットの
std_logic_vectorに変換している。

教科書P89 リスト4.17に同様の例がある。

-- configuration宣言(最上位階層では必須) 
configuration CFG_ADDER4 of TESTBENCH_HA is
for SIM_DATA
end for;
end CFG_ADDER4;
VHDLではひとつのエンティティに複数のアーキテクチャを
持たせることができるので、その割り当ての宣言。
必ず最上位階層に記述する必要がある。

実習2 VHDL記述の構文解析(1)

1) 上記2つのファイルを自分のpw上のディレクトリーにコピーして作業を始めよ。

adder4.vhd リスト4.4

adder4_test.vhd テストベンチ

2) VHDLアナライザ(vhdlan)で4ビットアダーの構文解析をする。

% vhdlan adder4.vhd

エラーメッセージ等があればエラーを修正して、再コンパイルする。
コンパイル後に、.sim, .mra 等のファイルができるので確認する。

3) テストベンチファイル adder4_test.vhdの内容を理解し、構文解析をする。

% vhdlan adder4_test.vhd

4) Sciroccoコンパイラを用いてシミュレーション用実行ファイル scsim を作成する。コンパイラの引数は、テストベンチで宣言したコンフィグレーション名を用いる。

% scs CFG_ADDER4

****** 以上でシミュレーションの準備は終了 *****


実習2 VHDLシステムシミュレータでの動作確認(2)

5) VHDLシステムシミュレータを Scirocco を起動する。

% scirocco &

6) Scirocco を起動すると Menu Window が現れるので、 Interactive ボタンを押す。

7) Interactive ボタンを押すと、Simulator Invocation Dialog Window が現れるので、Type メニューから Scirocco を選びOKボタンを押す。この時、Interactive Window が現れる。

8) Menu Window の Hierarchy ボタンおよび Waveformボタンを押し、Hierarcy WindowとWaveform Windowを開く。

9) Hierarchy WindowのHierarchy欄で、テストベンチのentity名を選択すると、Signal欄に信号線名が表示される。そこから必要な信号を選択し、Waveform Windowへドラッグ&ドロップする。

10) Interactive Windowのシミュレーションタイムを適当な値(200)に設定して、すぐ右のOKボタンを押すと、Waveform Windowにシミュレーション波形が表示される。

4ビット入力最大の15+15が30になっていることを確認せよ。

11) Menu Window のExitボタンで全てを終了できる。


実習2 回路を合成する(3)

12) adder4.vhdのあるディレクトリに移動し、デザインアナライザーを起動する。

% design_analyzer &

デザインアナライザのウインドウが開く。このメニューを使って、回路を合成する。

13) ライブラリを確認する。

Setup -> Defaultsでターゲットライブラリがclass.dbであることを確認する。

14) VHDLファイルを読み込む。

File -> Read

adder4.vhd を選択し、OKをクリック。

15) 入出力ピンを確認する。

ウインドウ中央の ADDER4 をクリックし、左の下向き矢印ボタンを押す。
(もしくは、ダブルクリックする。)

16) 合成前の回路を確認する。

回路シンボルをダブルクリックしてさらに下位レベルへ移動する。
(もしくは、左のANDのボタンを押す。)

今回は回路ではなく+の動作を示す図がでる。

17) 面積最小で回路を合成する。

Attributes -> Optimization Constraints -> Design Constraints

Max Area を 0.00 として、Apply

Tool -> Design Optimization

デフォルトの設定でOK

これで、回路が合成される。

18) クリティカルパス(最大遅延パス)をハイライトする。

Analysis -> Highlight -> Critical Path

19) 合成された回路の、面積、クリテイカルパスの遅延時間とその経路を調べる。

Analysis -> Report

Timing, Areaをチェックして、Apply

リストより、

Combinational Area:
Total Cell Area:
クリティカルパス遅延:(data arrival time)
Start point:
End point:

を調べる。


実習2 高速な回路を合成する(4)

17) 入力ピンから出力ピンへの遅延時間の目標値を0.0に設定する

Attributes -> Optimization Constraints -> Timing Constraints

で以下の図のウインドウがでる。

SHIFTキーをおしながら2つの入力ピンとひとつの出力ピンを選択し、

Max Delay を 0.0 として、Apply

Tool -> Design Optimization

デフォルトの設定でOK

これで、回路高速な回路に再合成される。

18) クリティカルパス(最大遅延パス)をハイライトする。

Analysis -> Highlight -> Critical Path

19) 合成された回路の、面積、クリテイカルパスの遅延時間とその経路を調べる。

Analysis -> Report

Timing, Areaをチェックして、Apply

リストより、

Combinational Area:
Total Cell Area:
クリティカルパス遅延:(data arrival time)
Start point:
End point:

を調べる。

以上


宿題1

1)[オーバーフローのチェック]

上記実習の例では2つの4ビット入力を加算して5ビット出力を出力しているが、入出力すべて4ビットに改造し、

S <= ('0' & A) + ('0' & B);

の部分を

S <= A + B;

のように変更した場合、たとえばA=15、B=15ではSは4ビットでは表示できない値になる。実際にSが4ビット幅の場合Sの値はどうなるか?

上記改造前と後で回路面積がどのように変化したか調べよ。

2)[ビット幅変更による回路の変化]

上記実習の例を8ビット入力+8ビット入力=9ビット出力になるように改造し、SCIROCCOで動作確認を行い、速度最速の回路合成を行え。

レポートには以下の内容を含むこと

以上