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