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)
関数で、整数I4ビットの
std_logic_vector
に変換している。

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

-- configuration宣言(最上位階層では必須
configuration CFG_ADDER4 of TESTBENCH_HA is
for SIM_DATA
end for;
end CFG_ADDER4;

VHDLではひとつのエンティティに複数のアーキテクチャを
持たせることができるので、その割り当ての宣言。
必ず最上位階層に記述する必要がある。


実習1. VHDL記述のシミュレーション

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

adder4.vhd リスト4.4

adder4_test.vhd テストベンチ

2) ISEにてシミュレーションを実行し、動作を確認せよ!

 

adder41.png


実習2. 回路を合成せよ

1)    XSTにて回路を合成し、TECHNOLOGY SCHEMATICを確認せよ!

adder42.png


実習3. FPGA(CPLD)の利用率をしらべよ

1)    Synthesisの後に、TranslateFitを実行し、Fitter Reportを確認せよ

adder43.png


HW1 WEBCLASSに提出すること!

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

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

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

の部分を

S <= A + B;

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

上記改造前と後でFitter ReportMacrocells Usedの変化をレポートせよ!

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

上記実習の例を8ビット入力+8ビット入力=9ビット出力になるように改造し、シミュレーションで動作確認を行い、回路合成を行え。

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

 

以上