ディジタル回路

ディジタル回路
山梨大学 工学部 電気電子工学科
2015 年度
山梨大学 工学部 電気電子工学科
ディジタル回路
今日の講義内容
今日はハードウェア記述言語 (HDL) の簡単な解説
を行う
ディジタル回路設計の流れ
HDL の目的と種類
VHDL の基本構文
VHDL の例
半加算器 (組合せ回路)
3 進同期式カウンタ (順序回路)
シミュレーションとテストベンチ
山梨大学 工学部 電気電子工学科
ディジタル回路
ディジタル回路設計の流れ
回路仕様
回路の機能,回路の動作,入出力の定義
⇓
回路記述
真理値表
論理式
回路図
ハードウェア記述
言語 (HDL)
⇓
論理合成,配置配線,シミュレーション
⇓
回路実装
山梨大学 工学部 電気電子工学科
ディジタル回路
ハードウェア記述言語 (HDL)
正しい HDL 記述が得られれば,その後はプログラ
ム (EDA ツール) による自動化が可能
HDL 記述 ⇒ 論理合成 ⇒ ゲートレベル
⇒ シミュレータ ⇒ 動作の確認
⇒ 配置配線 ⇒ ネットリスト ⇒ 実装
代表的な HDL
VHDL (VHSIC HDL) ← 今回はこちらを紹介
Verilog-HDL
山梨大学 工学部 電気電子工学科
ディジタル回路
VHDL の基本構文
library ライブラリ名;
use パッケージ名;
entity エンティティ名 is
ポート宣言
end エンティティ名;
architecture アーキテクチャ名 of エンティティ
名 is
コンポーネント宣言,信号宣言など
begin
処理文
end アーキテクチャ名;
山梨大学 工学部 電気電子工学科
ディジタル回路
ライブラリ文とパッケージ宣言
library ライブラリ名;
use パッケージ名;
大規模なディジタル回路の HDL を一から記述するのは
大変
共通に使える基本的な回路をあらかじめ作っておき,後
から使えるようにしたものがライブラリ (library)
どのライブラリを使用するのか ライブラリ文 で指定
一つのライブラリの中には,パッケージ (package) とい
う複数のまとまりが入っている
どのパッケージを使用するのかを パッケージ文 で指定
文の区切りはセミコロン (;)
山梨大学 工学部 電気電子工学科
ディジタル回路
この教科書の範囲では,ライブラリ名は IEEE,
パッケージ名は IEEE.STD LOGIC 1164.all
商用の FPGA には,その会社が提供する独自
のライブラリが付属している
単独で発売されているライブラリも多い
(数値計算用ライブラリ,信号処理用ライブラ
リなど)
山梨大学 工学部 電気電子工学科
ディジタル回路
エンティティ文とポート宣言
entity [エンティティ名] is
port( [ポート名]:方向 タイプ名;
[ポート名]:方向 タイプ名 );
end [エンティティ名];
回路ブロックと入出力信号を定義
port 文の内部では,コロン (:) の左にポート
(端子)名,右にポートの属性 in と out,
std logic など)を書く
std_logic は 2 進 1bit の信号線を表す
端子の名前が複数あるときはカンマ (,) で区
切る
山梨大学 工学部 電気電子工学科
ディジタル回路
architecture 文
architecture RTL of [回路の名前] is
[内部変数などの定義];
begin
[動作の記述];
end RTL;
実際の回路の動作を記述する
比較と代入を区別するために,代入文には <=
を使用する
内部変数 (入出力に現れない変数) が必要な場
合は,signal 文を用いる (後述)
山梨大学 工学部 電気電子工学科
ディジタル回路
論理演算
NOT 回路
OR 回路
AND 回路
NOR 回路
NAND 回路
EX-OR 回路
C
C
C
C
C
C
<=
<=
<=
<=
<=
<=
not A;
A or B;
A and B;
A nor B;
A nand B;
A xor B;
論理演算は,ほぼ論理式そのまま
演算の順序を変えたいときは () で囲む
D <= (A or B) and C; など
山梨大学 工学部 電気電子工学科
ディジタル回路
signal 文
architecture RTL of HALF_ADDER is
signal W: std_logic;
begin
W <= X and Y;
C <= W;
S <= (X or Y) and not W;
end RTL;
入力端子は値を参照できるが代入はできない
出力端子は値を代入できるが参照はできない
内部計算に必要な変数は入出力とは別に signal
文で定義しておく
山梨大学 工学部 電気電子工学科
ディジタル回路
半加算器 (half adder) の例
半加算器の論理式
C =X ·Y
S =X ⊕Y =X ·Y +X ·Y
= (X + Y ) · X · Y = (X + Y ) · C
半加算器の回路図
X
S
Y
C
山梨大学 工学部 電気電子工学科
ディジタル回路
VHDL 記述の典型例
library IEEE; [決まり文句]
use IEEE.STD_LOGIC_1164.ALL;
entity HALF_ADDER is [入出力端子]
port( X,Y:in std_logic;
C,S:out std_logic );
end HALF_ADDER;
architecture RTL of HALF_ADDER is
begin [実際の回路]
C <= X and Y;
S <= X xor Y;
end RTL;
山梨大学 工学部 電気電子工学科
ディジタル回路
問
次の論理式(全加算器 (full adder))を実現する
VHDL 記述を作成せよ.
CO = X · Y + Y · CI + CI · X
S = X ⊕ Y ⊕ CI
山梨大学 工学部 電気電子工学科
ディジタル回路
コンポーネント文
component コンポーネント名;
ポート文
end component;
別に定義したモジュールを呼び出して使用する場合
に用いる
山梨大学 工学部 電気電子工学科
ディジタル回路
順序回路の記述: 3 進同期式カウンタの
例
3 進同期式カウンタの状態遷移表
clock Q1 Q0 Q′1 Q′0
0
00
01
1
01
10
2
10
00
次の状態を計算する論理式
Q′1 = Q0
Q′0 = Q1 · Q0
山梨大学 工学部 電気電子工学科
ディジタル回路
状態遷移表をそのまま記述
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity COUNT3 is
port( CK:in std_logic;
Q0,Q1:out std_logic );
end COUNT3;
architecture RTL of COUNT3 is
signal W0:std_logic :=’0’; [内部変数]
signal W1:std_logic :=’0’; [0 に初期化]
(次のページに続く)
山梨大学 工学部 電気電子工学科
ディジタル回路
begin
Q0<=W0;
Q1<=W1;
process(CK) [順序回路の記述]
begin
if CK’event and CK=’1’ then [エッジトリガ]
if W1=’0’ and W0=’0’ then W1<=’0’; W0<=’1’; end if;
if W1=’0’ and W0=’1’ then W1<=’1’; W0<=’0’; end if;
if W1=’1’ and W0=’0’ then W1<=’0’; W0<=’0’; end if;
end if; [状態遷移表]
end process;
end RTL;
山梨大学 工学部 電気電子工学科
ディジタル回路
process 文
architecture RTL of [回路の名前] is
[内部変数の定義];
begin
[内部変数 -> 出力];
process([入力変数])
begin
if [入力変数]’event and [入力変数]=’1’ then
[状態遷移の記述];
end if;
end process;
end RTL;
通常の architecture 文の記述では,処理文の内容はすべて並列
に実行される.上から順に実行されるのではない.順番に処
理を実行したい場合には,process 文を用いる
山梨大学 工学部 電気電子工学科
ディジタル回路
順序回路の記述に用いる
クロックなどの入力変数に同期して状態遷移
ポジティブエッジトリガの場合
if CK’event and CK=’1’ then の形
ネガティブエッジトリガの場合
if CK’event and CK=’0’ then の形
出力変数を状態変数として用いることはでき
ないので,状態変数は signal 文で定義してお
き,process 文の前の部分で状態変数の中身を
出力変数に代入する.
山梨大学 工学部 電気電子工学科
ディジタル回路
if 文,変数の初期値
if 文
if [条件] then [文]; else [文]; end if;
場合分けに用いる
使い方は C 言語などとほぼ同様
変数の初期値
signal W:std_logic :=’0’;
signal W:std_logic :=’1’;
[初期値 0]
[初期値 1]
signal 文の後部に :=’ 値’ の形で付加する
山梨大学 工学部 電気電子工学科
ディジタル回路
論理式を用いる場合
architecture RTL of COUNT3B is
signal W0:std_logic :=’0’;
signal W1:std_logic :=’0’;
begin
Q0 <= W0; Q1 <= W1;
process(CK)
begin
if CK’event and CK=’1’ then
W0 <= (not W0) and (not W1);
end if;
end process;
end RTL;
山梨大学 工学部 電気電子工学科
ディジタル回路
W1 <= W0;
問
1
2
状態遷移表をそのまま記述
CK Q1 Q0 Q′1 Q′0
する形で 4 進同期式カウン
0
00
01
タ の VHDL 記 述 を 作 成 せ
1
01
10
よ.ただし,4 進同期式カ
2
10
11
ウンタの状態遷移表は右の
11
00
3
通り.
状態遷移を表す論理式を導出し,論理式を用いて 4 進同
期式カウンタの VHDL 記述を作成せよ.
山梨大学 工学部 電気電子工学科
ディジタル回路
シミュレーションとテストベンチ
作成した HDL プログラムの動作を確認するに
は,適切な入力を作成して HDL プログラムに
与え,出力を確認する( シミュレーション )
ことが必要
HDL の場合,シミュレーションを行うプログ
ラム自体を HDL で記述し, テストベンチ と
呼ぶ.
山梨大学 工学部 電気電子工学科
ディジタル回路
簡単な 2 入力 1 出力回路の VHDL 記述
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MyAND is
port( A,B : in std_logic;
F :out std_logic );
end MyAND;
architecture RTL of MyAND is
begin
F <= A and B;
end RTL;
山梨大学 工学部 電気電子工学科
ディジタル回路
対応するテストベンチ
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entitiy TESTBENCH is
end TESTBENCH;
architecture stimulus of TESTBENCH is
component MyAND is
port (A,B : in std_logic;
F : out std_logic);
end component;
(次ページに続く)
山梨大学 工学部 電気電子工学科
ディジタル回路
signal A,B,F : std_logic;
constant PERIOD : times := 100 ns;
begin
TEST: MyAND port map(A,B,F);
STIMULUS: process
begin
A<="0"; B<="0"; wait for PERIOD;
A<="0"; B<="1"; wait for PERIOD;
A<="1"; B<="0"; wait for PERIOD;
A<="1"; B<="1"; wait for PERIOD;
end process STIMULUS;
end stimulus;
山梨大学 工学部 電気電子工学科
ディジタル回路
wait 文
wait 文
wait
( 例)
wait
( 例)
wait
( 例)
for 時間;
指定した時間だけ待つ
wait for 20ns;
until 式;
式の条件が成り立つまで待つ
wait until A > 5;
on 信号;
信号が変化するまで待つ
wait on B;
山梨大学 工学部 電気電子工学科
ディジタル回路
(補足)HDL シミュレータ
メーカ製品の体験版
Menter Graphics 社 ModelSim など
アルテラ社などからダウンロード可能
https://www.altera.co.jp/downloads/downloadcenter.html
ただし,メニューが英語
フリーソフトウェア
使いこなすには知識が必要
icarus verilog (http://iverilog.icarus.com/),
FreeHDL (http://freehdl.seul.org/) など
電子回路シミュレータ Qucs には FreeHDL を呼び
出してシミュレーションする機能がある
http://qucs.sourceforge.net/
山梨大学 工学部 電気電子工学科
ディジタル回路