4.1実用的な組み合わせ回路 P57

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


半加算器

入力信号 出力信号
A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

S = A xor B ;

C = A and B ;


VHDLによる半加算器の設計 (演習4.1) 

リスト4.1(コピー)

リスト4.1(オリジナル)

もう少し細かく見ると

ライブラリ宣言 library IEEE; 
use IEEE.std_logic_1164.all;
ライブラリ宣言、STD_LOGICを使用する場合に必要
いつもSTD_LOGICを使用するのでいつも必要!
ENTITY宣言
回路の名前と
入出力信号
entity HALF_ADDER is エンティティ宣言
 port ( A, B : in std_logic; 
     S, C : out std_logic );
ポート宣言(入出力信号と信号のデータタイプを定義)
end HALF_ADDER; エンティティ終了。";"忘れるな!
回路の中味の記述 architecture STRUCTURE of HALF_ADDER is アーキテクチャ宣言
begin 
 S <= A xor B; 
 C <= A and B; 
end STRUCTURE;
同時処理文! コンピュータプログラムとは違う
この場合4つの同時動作するゲートに対応

4.3.2テストベンチによる検証 P82

リスト4.12(コピー)

リスト4.12(オリジナル)

もう少し細かく見ると

ライブラリ宣言 library IEEE; 
use IEEE.std_logic_1164.all;
ライブラリ宣言、STD_LOGICを使用する場合に必要
いつもSTD_LOGICを使用するのでいつも必要!
エンティティ entity TESTBENCH_HA is 
end TESTBENCH_HA;
エンティティ宣言
-- テストベンチのエンティティは空
アーキテクチャ architecture SIM_DATA of TESTBENCH_HA is  
 component HALF_ADDER 
  port ( A, B : in std_logic; 
  S, C : out std_logic ); 
 end component;
以下の用いる回路部品(コンポーネント)の宣言
 signal SA, SB, SS, SC : std_logic; 新たに使用する信号の宣言
begin 
-- 検証対象回路のインスタンス化 
M1 : HALF_ADDER port map (SA, SB, SS, SC); 
-- テストベクトル 
P1 : process begin 
  SA <= '0'; wait for 50 ns; 
  SA <= '1'; wait for 50 ns; 
end process; 

P2 : process begin 
  SB <= '0'; wait for 100 ns;
   SB <= '1'; wait for 100 ns; 
end process; end SIM_DATA;
実際のテストベンチ回路
-- configuration宣言(最上位階層では必須) 
configuration CFG_HA of TESTBENCH_HA is 
  for SIM_DATA 
  end for; 
end CFG_HA;
VHDLではひとつのエンティティに複数のアーキテクチャを持たせることができるので、その割り当ての宣言。
必ず最上位階層に記述する必要がある。

実習1 SYNOPSYS EDA Toolの使用法(1)
(吉田先生の資料より)

Synopsys EDA Toolを使えるようにするためには、以下に示す簡単な初期設定を行う必要がある。なお、Synopsys EDA Toolは 各pw*** にインストールされているため、以下の作業は pw*** に login をして行うこと。

ツールのセットアップ

1) nwにloginする

2) そこからpwにsshする

3) pw 上のシミュレータを用い動作シミュレーションを行う。このとき、グラフィカルウインドウを自分の使用しているローカルなディスプレイに表示する必要があるので、以下の設定が必要である。(ニュースのDaisukeKAYOUにしたがってます。)

nwのローカルなウインドウで

% xhost pw016 

pw に ssh したウインドウで

% setenv DISPLAY nw0216:0.0

4) 作業ディレクトリを作成し、そこに上記2つのファイルをコピーする。

% mkdir vhdl
% cd vhdl
% mkdir hadder
% cd hadder

netscape等を立ち上げ、上記2ファイルを作業ディレクトリにコピーする(Save Asでセーブする)

以下の2つのファイル名にする
hadder.vhd
hadder_test.vhd


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

5) VHDLアナライザ(vhdlan)でハーフアダーの構文解析をする。

% vhdlan hadder.vhd

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

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

% vhdlan hadder_test.vhd

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

% scs CFG_HA

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


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

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

% scirocco 

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

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

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

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

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

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


実習1 回路を合成する(4)

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

% design_analyzer &

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

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

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

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

File -> Read

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

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

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

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

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

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

Attributes -> Optimization Constraints -> Design Constraints

Max Area を 0.00 として、Apply

Tool -> Design Optimization

デフォルトの設定でOK

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

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

Analysis -> Highlight -> Critical Path

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

Analysis -> Report

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

リストより、

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

を調べる。

 

以上