琉球大学情報工学科 和田 知久
リスト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’を連接してビット長を調整している。 |
ライブラリ宣言 | 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ではひとつのエンティティに複数のアーキテクチャを 持たせることができるので、その割り当ての宣言。 必ず最上位階層に記述する必要がある。 |
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
****** 以上でシミュレーションの準備は終了 *****
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ボタンで全てを終了できる。
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:を調べる。
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)[オーバーフローのチェック]
上記実習の例では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で動作確認を行い、速度最速の回路合成を行え。
レポートには以下の内容を含むこと
以上