ディジタル回路 山梨大学 工学部 電気電子工学科 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/ 山梨大学 工学部 電気電子工学科 ディジタル回路
© Copyright 2024 ExpyDoc