2007.11.12 集積回路工学 Matsuzawa Lab 1 集積回路工学 東京工業大学 大学院理工学研究科 電子物理工学専攻
2007.11.12 集積回路工学 Matsuzawa Lab 2 1. 1. ハードウェア記述言語 (VHDL で回路を設計 ) HDL 設計の手順や基本用語を学ぶ RTL とは? Register Transfer Level レジスタ間の転送関係を表現したレベル慣例的に以下のことを行う - 機能を 代入 if, caseなどで表現したもの - 論理合成できる記述 -クロックを意識した記述 ゲートレベルとは? ゲート回路やフリップフロップなどの接続関係を示したものネットリストとも言う
Hardware Description Language : ハードウェア記述言語トップダウン設計を支援するトップダウン設計においては, アナログ部, デジタル部とも抽象度の高い設計が必要となる デジタル部はゲート レベルだけでなく,RTL(register transfer level) や動作レベルで設計する アナログ部はトランジスタ レベルだけではなく, 機能レベルのモデル ( 例えばオペアンプのマクロモデルなど ), 動作レベルのモデル ( 線形方程式や非線形方程式, 信号フロー グラフ, 伝達関数など ) を扱う 見た目はソフトウェアのプログラムに似ているが似て非なるもの Digital Verilog-HDL, VHDL Verilog C 言語 VHDL PASCAL か ADA VHDLは抽象性の高い記述 Verilogは具体的な回路図に近い記述 Analog Verilog-AMS, VHDL AMSなどにより動作記述が行える 2007.11.12 集積回路工学 Matsuzawa Lab 3
2007.11.12 集積回路工学 Matsuzawa Lab 4 なぜ動作記述による設計なの? 接続記述 回路図エントリ 動作記述 HDL 記述 module nand (Q,A,B,CK) inputa,b,ck;output Q... endmodule 1cm 2 程度のシリコンチップ上に 数百万から 1 億のトランジスタを集積している そのため接続情報を記述している回路図エントリでは限界があり 設計者は設計そのものよりも接続間違いによるケアレスミスを修正することに時間がかかる しかし動作記述を用いれば回路の表現に抽象度が与えられ さらに上位の設計を可能とするばかりでなく 設計のスピードが格段に向上する
物理設計 2007.11.12 集積回路工学 Matsuzawa Lab 5 HDL 設計の手順 仕様設計 論理設計 RTL 設計 回路動作を HDL で記述 回路図エントリ HDL 記述 module nand (Q,A,B,CK) inputa,b,ck;output Q... endmodule RTL 検証 テストベンチを HDL で記述 論理合成 OK? 論理合成 ゲートレベル検証 動作確認 HDL からゲートレベルに変換 タイミング ( 遅延 ) 確認 ネットリスト module nand_dff (Q,A,B,CK) inputa,b,ck;output Q... endmodule 論理素子へのゲートの割り当て OK? 物理レイアウト
VHDL 文法体系 VHDL の文法 回路記述 テストベンチ ライブラリ記述 回路記述論理合成に適した記述をする回路の種類ごとに適した記述スタイルがあるテストベンチ文法を満たしていれば どんな記述でもよい記述のテクニックを駆使できる 2007.11.12 集積回路工学 Matsuzawa Lab 6
組み合わせ回路 2007.11.12 集積回路工学 Matsuzawa Lab 7
2007.11.12 集積回路工学 Matsuzawa Lab 8 順序回路 順序回路は必ずクロックで同期させること もし非同期で作ると伝播遅延から予期しないパルス ( ハザード ) が発生する
2007.11.12 集積回路工学 Matsuzawa Lab 9 RTL RTL 設計例 コンポーネント宣言 std_logic のベクタ型 ( ビット幅のあるデータタイプ ) 接続する下位コンポーネントの入出力信号を定義したもの 下位コンポーネントの接続 4 ビット ( ビット 3~ ビット 0)
2007.11.12 集積回路工学 Matsuzawa Lab 10 RTL RTL 設計例 センシティビティリスト ( 基本的に入力信号はすべてここに記述する ) 条件式 if 文はアーキテクチャ内に記述できず process 文内に記述する 定数表現 1ビット 0 複数ビット 0101 バスとワイヤーでは囲む物が違うことに注意すること
2007.11.12 集積回路工学 Matsuzawa Lab 11 4 ビット (16 進 ) 同期式カウンタ Q 0 Q 1 Q 2 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 Q 3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2007.11.12 集積回路工学 Matsuzawa Lab 12 4 ビット (16 進 ) 同期式カウンタ library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; 算術演算パッケージを呼び出し パッケージの呼び出し パッケージとは? 定数 演算子 データタイプなどの定義をまとめたもの おまじないのようなのであるが これを指定しないとデフォルトの物が設定されてしまうので ここはちゃんと設定すること
2007.11.12 集積回路工学 Matsuzawa Lab 13 4 ビット (16 進 ) 同期式カウンタ ibrary エンティティ宣言 IEEE; エンティティ名ポート宣言 use ( 入出力の定義 IEEE.std_logic_1164.all; ) use IEEE.std_logic_unsigned.all; entity COUNT4 is port ( CLK, RESET : in std_logic; COUNT : out std_logic_vector( 3 downto 0 ) ); end COUNT4; モジュールの入出力ポート及びその属性を定義 方向 データタイプ std_logic のベクタ型 ( ビット幅のあるデータタイプ ) 回路のインターフェース部分を定義 接続する下位コンポーネントの入出力信号を定義したもの
2007.11.12 集積回路工学 Matsuzawa Lab 14 4 ビット (16 進 ) 同期式カウンタ ibrary IEEE; use 同時処理文 IEEE.std_logic_1164.all; アーキテクチャ内に記述する文 use IEEE.std_logic_unsigned.all; 記述の順序に関係なく 同時に処理される entity 順次処理文 COUNT4 is プロセス文やプロシージャ内に記述する文 port ( 記述順に処理される CLK, RESET : in std_logic; COUNT : out std_logic_vector( 3 downto 0 ) ); end COUNT4; architecture RTL of COUNT4 is signal COUNT_IN : std_logic_vector ( 3 downto 0 ); begin COUNT <= COUNT_IN; process ( CLK, RESET ) begin if ( RESET = '1' ) then COUNT_IN <= "0000"; elsif ( CLK'event and CLK = '1' ) then COUNT_IN <= COUNT_IN + '1'; end if; end process; end RTL;
RTL RTL 設計例 architecture ~ of ~ is begin 同時処理文下位コンポーネント接続プロセス文信号代入文条件付き信号代入文 (when~else) プロシージャ呼び出しジェネレート文など end ~; process. begin 順次処理文信号代入文変数代入文 if case wait 文ループ文プロシージャ呼び出しなど end process; 同時処理文 順次処理文 アーキテクチャ内に記述する文記述の順序に関係なく 同時に処理されるプロセス文やプロシージャ内に記述する文記述順に処理される 2007.11.12 集積回路工学 Matsuzawa Lab 15
2007.11.12 集積回路工学 Matsuzawa Lab 16 4 ビット (16 進 ) 同期式カウンタ ibrary IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity アーキティクチャ COUNT4 is アーキテクチャ名 ( 構造 動作の記述 port ( ) CLK, RESET : in std_logic; COUNT : out std_logic_vector( 3 downto 0 ) ); end COUNT4; architecture RTL of COUNT4 is 4ビットは0から3と書く signal COUNT_IN : std_logic_vector ( 3 downto 0 ); ことに注意 begin 内部変数を外部変数に代入 COUNT <= COUNT_IN; process ( CLK, RESET ) begin VHDLでは OUT の属性の信号はエンティ if ( RESET = '1' ) then ティ内部で再びその値を使用できない COUNT_IN <= "0000"; 信号代入文 end if; end process; end RTL; 回路の構造や動作を記述 エンティティ名 elsif ( CLK'event and CLK = '1' ) then COUNT_IN <= COUNT_IN + '1'; 1 つのエンティティに対して 複数のアーキテクチャを定義できる
4 ビット (16 進 ) 同期式カウンタ ibrary IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity COUNT4 is port ( CLK, RESET ); end COUNT4; architecture RTL of COUNT4 is signal COUNT_IN : std_logic_vector ( 3 downto 0 ); begin 条件式 COUNT <= COUNT_IN; process ( CLK, RESET ) begin if ( RESET = '1' ) then COUNT_IN <= "0000"; elsif ( CLK'event and CLK = '1' ) then COUNT_IN <= COUNT_IN + '1'; end if; end process; end RTL; process 文 CLKもしくはRESETが変化したときに活性化 : in され記述の上から順に実行される std_logic; COUNT : out std_logic_vector( 3 downto 0 ) センシティビティリスト ( 基本的に入力信号はすべてここに記述する ) 定数表現 1ビット 0 複数ビット 0101 CLK event and CLK= 1 CLK 信号の立ち上がり時を検出 If 文 case 文などの順次処理文はこのプロセス文の中で記述する それに対してプロセス文の外の記述では値が変化すれば 常に再代入されて動作する この回路記述では COUNT_IN が変化すれば COUNT は変化後の値がいつでも再代入される 2007.11.12 集積回路工学 Matsuzawa Lab 17
2007.11.12 集積回路工学 Matsuzawa Lab 18 データ タイプ 信号や定数にはデータタイプ ( 型 ) がある データタイプによって 取り得る値の種類が決まる データタイプが異なる信号や定数間での直接代入は出来ない ( 変換が必要 ) データタイプはパッケージの中で定義されている 3 11 ; A<=3; 11 1011 ; B<= 1011 ; A <= 11 ; A: std_logic B: integer B<=11;
2007.11.12 集積回路工学 Matsuzawa Lab 19 ADDER Full Adder A B CIN Half Adder Half Adder S CO
2007.11.12 集積回路工学 Matsuzawa Lab 20 コンポーネント化 コンポーネント宣言 接続する下位コンポーネントの入出力信号を定義したもの 下位コンポーネントの接続 インスタンス名 : コンポーネント名 port map ( ポートリスト )
2007.11.12 集積回路工学 Matsuzawa Lab 21 下位コンポーネントの接続 順番によるポート接続 名前によるポート接続 名前によるポート接続 : 定義側信号名 => 接続信号名
2007.11.12 集積回路工学 Matsuzawa Lab 22 参考資料 マルチメディア HDL 設計教材 HDL Endeavor 株式会社エッチ ディー ラボ製 桜井至 Verilog-AMS 入門 CQ 出版 利用ツール GHDL (VHDL コンパイラ シミュレーションおよび合成 ) Icarus Verilog ( Verilog HDL コンパイラ シミュレーションおよび合成 ) GTKWave ( 波形表示ツール )