Post on 10-Aug-2015
2
先週の復習:全加算器
x_in y_in
carry in
carry out
sum out
半加算器
x_in y_in carry in sum out
carry out
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
3
nビット加算器 • 全部の加算器を記述していると面倒!
x0
x1
x2
y0
y1
y2
0 s0
s1
s2
s3
x2 x1 x0 +)y2 y1 y0 -------------- s3 s2 s1 s0
4
モジュール • 共通部分を読出し→記述量を減らす ‒ C言語における「関数」のようなもの
x0
x1
x2
y0
y1
y2
0 s0
s1
s2
s3
x2 x1 x0 +)y2 y1 y0 -------------- s3 s2 s1 s0
3ビット加算器モジュール
全加算器モジュール
5
• ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM ”Demonstrations”内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_4¥ 内にコピー
10
モジュールの記述方法
(モジュール名) (インスタンス名) ( ポート・リスト );
最後にセミコロン「;」をつける!
モジュール名: full_adder インスタンス名: fadr_inst_1
11
SW[0]
SW[1]
SW[2]
SW[3]
SW[4]
SW[5]
0 LEDG[0]
LEDG[1]
LEDG[2]
LEDG[3]
three_bit_adder
fadr_inst_1
fadr_inst_2
fadr_inst_3
w[0]
w[1]
Verilog-HDLと回路の対応を確認
12
ビット幅指定 • 同じ属性を持った信号をまとめる ‒ 記述量の削減 ‒ コードの可読性向上
x[0]
x[1]
x[2]
y[0]
y[1]
y[2]
0 s[0]
s[1]
s[2]
s[3]
x[2] x[1] x[0] +)y[2] y[1] y[0] ---------------------- s[3] s[2] s[1] s[0]
14
"EDA Tool Settings"の "Simulation"を選択
"Tool name"で"ModelSim-Altera"を選択
"Format for output netlist"で"Verilog-HDL"を選択
15
合成の実行
クリック
コンピュータ (Quartus II)に I/Oの設定を読み込ませる ために合成を行います。
"Full Compilation was succesful"と 表示されればOK
テストベンチの読み込み (プロジェクト毎に1回行えばよい)
17
シミュレータ指定と 同じく、Settingsを呼び出し、 "EDA Tool Settings"の "Simulation"を選択
"Compile test bench"にチェックをつけて、 Test Benchesをクリック
テストベンチを読み込み (デフォルト設定では、プロジェクトを置いている
フォルダ/simulation/modelsim内に 「プロジェクト名.vt」で置いている)
19
テストベンチを選択 (拡張子は「.vt」)
テストベンチ名と トップモジュール名の設定
20
テストベンチ名はプロジェクト名(ここではDE0_TOP)
テストベンチのトップ・モジュール名は テンプレート生成をしていれば 「テストベンチ名」+「_vlg_tst」
”Add”をクリックして プロジェクトに テストベンチを追加
あとは全てOKでよいです。
23
入力値を指定 (ビット幅)'(基数)値で 複数ビットの定数を 指定できます
always間は コメントアウト
記述が終わったら 保存しましょう
今回記述するテストベンチ
区切り"_"を入れてもよい
24
ビット幅指定の書式 ビット幅の宣言: (属性) [(ビット幅-1):0] (信号名); ビットの指定: (信号名)[(ビットインデックス)] 複数ビットの指定: (信号名)[(インデックス):(インデックス)]
観測したい信号を Waveウインドウに追加します
26
Verilog-HDLで使っている SW[5]~SW[0]と LEDG[3:0]を追加しましょう
”Objects”ウインドウ で信号を右クリック →「Add Wave」を 選択
同様に他の信号もグループ化
29
SW[2]~SW[0]を 「y_in」に
LEDG[3]~LEDG[0]を 「z_out」に
各信号はドラッグ&ドロップで移動可能
何となく、加算器として 見やすくなった! 例: 001+001=0010
34
コンフィギュレーションを開始
USB-Blaster, JTAGモード, Programにチェックを確認
確認したら ”Start”を クリック
Progress に "100%(Successful)" と表示されれば成功
36
課題: 信号選択回路 (2-MUX) s x1 x2 y 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1
2-MUX x1
x2 y
s
選択信号 s が0のときは x1 を選択, s が 1 のときは x2 を選択する回路
37
課題1 • 選択回路(2-MUX)を Verilog-HDLで記述し、 FPGA上で動作させよ ‒ 選択信号, 入力信号はスライドスイッチ ‒ 出力信号は緑LED
2-MUX SW[0]
SW[1] LEDG[0]
SW[2]