テキスト1頁

マイクロプロセッサ 第1回
ガイダンス
VerilogHDLのシミュレーション環境
慶應義塾大学理工学部
天野英晴
[email protected]
http://www.am.ics.keio.ac.jp
授業資料はC-plus
いまさらだが、、、
• コンピュータはIT社会の基盤部品
– ノートブック、スマートフォーン、タブレット
– サーバー、クラウド、スーパーコンピュータ
– ビデオ機器、テレビ、ゲーム機器
– ネットワーク機器
– 冷暖房、冷蔵庫、電気釜、洗濯機、掃除機だって
制御はコンピュータ
しかし、概観の話は学部の計算機の授業でやっているだろう
何をやるか?
• CPU(中央処理装置)の設計をやり、シミュレーションをやりながら、内部構
成を理解する。
• RISC (Reduced Instruction Set Computer)の命令セット、構成を中心に据
える
• ハードウェア記述言語でのディジタル回路設計を学ぶ
• FPGAでもASICでも実装可能
–
–
–
–
–
–
–
–
–
–
Verilog-HDLの記述方式、シミュレーション方法
演算回路
ALUと選択構文
CPUのデータパス、レジスタとメモリ
プログラム格納型計算機
RISCの命令セットアーキテクチャ
分岐命令
サブルーチンコールとスタック
パイプライン処理
論理合成と設計最適化
授業のやり方
• テキスト:「作りながら学ぶコンピュータアーキテク
チャ」 天野、西村著 培風館
• 授業資料はhttp://www.am.ics.keio.ac.jp/chuo_aki
に掲示(C-plusにも一応掲示)
• 授業を70分、演習を20分
• 演習は次の回までにメールで提出すれば問題ない
– 休んだら資料をダウンロードして演習をやれば良い。
– 週一回しか来ないが、メールによる質問は歓迎
• 成績の付け方
– 最終演習+毎回の演習によって付ける
– 最終演習を提出しないと単位は取れない
– 最後まで付いてこれればほとんどAが付く
コンピュータの構成
この授業で
やるところ
Disk
Key
CPU
Display
System
Bus
Bridge
I/O Bus
Memory
System
コンピュータの3要素
コンピュータのクラス
数値計算用
特殊コンピュータ
性能
スーパー
コンピュータ
データセンター用
クラスタ
信頼性重視
スループット重視
サーバー
デスクトップ、ラップトップ
タブレット
スマートフォン
最新のCPUを利用
性能価格比
グラフィック性能が重要
組み込みプロセッサ
特定のプログラムのみ動作
コスト、消費電力が重要
100
10000
100万
価格帯
1億
100億
コンピュータの歴史
2度の大変革
単体コアの性能向上
性能
マルチコアの時代
マイクロプロセッサ ×1.22/年
性能爆発時代
メインフレームの時代
×1.5/年
ムーアの法則
×1.3/年
1960
1970
1980
1990
2000
2010
年
ハードウェア記述言語
• HDL (Hardware Description Language)
• ゲート接続図を使ったハードウェア設計は今は使わ
れない
– スケマティック設計と呼ばれる
• Verilog-HDLとVHDLの二つが標準
– 最近は多くのCAD (Computer Aided Design)が両方を
受け付ける
– CADによる論理合成、圧縮によってゲート接続図(ネット
リスト)に変換される
• 最近はCレベル設計も一般化
– 将来は用途によって使い分けられるだろう
VerilogとVHDL
Verilog-HDL
出自
VHDL
標準化
論理シミュレーション記 仕様書
述
デファクトスタンダード 国際標準
記述
Pacal風(嘘)
PL/I→ADA
特徴
広い範囲でシミュレー
ションは可能
記述が厳格
ここではVerilog HDLを採用
Verilogの基本文法
/* 1bit adder */
module adder (
input a,b, output s);
assign s = a+b; // add a,b
endmodule
コメントはC言語と同じ
日本語キャラクタはトラブルの
元なので止めて下さい
なぜかセミコロンが要る
ハードウェアモジュールは
モジュール文で定義、
パラメータの書き方はC言語
と似ている。
assign文は信号の「接続」
「出力」を示す。
endmoduleで終わる
ここにはセミコロンをつけては
ダメ
テストベンチ
• シミュレーション制御のための記述
module test;
parameter STEP=10;
reg ina, inb;
wire outs;
adder adder_1(.a(ina), .b(inb), .s(outs));
initial begin
$dumpfile(“adder.vcd”);
$dumpvars(0,adder_1);
ina <= 1’b0;
inb <= 1’b0;
#STEP
$display(“a:%b b:%b s:%b”, ina,inb,outs);
ina <= 1’b0;
inb <= 1’b1;
#STEP
…
テストベンチの記述
parameter文は後に述べるdefine
文と似ているがより柔軟
parameter STEP=10;
reg文での宣言では値を記憶できる。
reg ina, inb;
wire文は信号に名前を付けるだけ。
これは後の授業で紹介する。
wire outs;
adder adder_1(.a(ina), .b(inb), .s(outs));
インスタンス名
別ファイルで宣言したモジュール名
入出力への接続
ピリオド以下はローカルな名前を使う
シミュレーションの制御
initial文はシミュレーションを一回実行
initial begin
$dumpfile(“adder.vcd”); 波形ファイルを指定
$dumpvars(0,adder_1); 記録する範囲を指定
ina <= 1’b0;
reg文にはブロッキング代入<=
inb <= 1’b0;
(これも後に紹介する)
ここでは入力を制御
#STEP 時間消費
$display(“a:%b b:%b s:%b”, ina,inb,outs);
ina <= 1’b0;
値の表示、プリント文と似ている
%bで2進数表示
inb <= 1’b1;
リターンは自動的に入る
#STEP
Verilog-HDLのシミュレーション
• Ikarus Verilogを利用
〇コンパイラ型のフリーソフトウェア
• Linux, Windowsマシンにインストール可能
• iverilog XX.vでコンパイル
• vvp a.outで実行、かなり高速
〇Verilog2000に対応
×遅延付シミュレーションができない
• 波形Viewerはgtkwave
〇フリーソフトウェア
Linux,Windowsマシンにインストール可能
gtkwave XX.vcdで起動
基本的なViewerの機能は全て持つ
×他のViewerに比べて少し使いにくいかも、、
後は実際にやってみよう
演習
加算を論理AND(&)に置き換えてシミュレーションを
実行しよう
andは予約語なので、注意
Webからtar fileを取って来る
tar xvf 1kai.tarで解凍
提出は
[email protected]
Subject: Chuo 学籍番号 名前
名前はローマ字で書いてください
Verilogの実行
• ファイルの解凍
– tar xvf XX.tar
• シミュレーションのコンパイル
–
–
–
–
iverilog *.v
ディレクトリ内に同一モジュールがある時は、ファイルを全て指定する
iverilog test_poco.v poco1.v rfile.v alu.v など
エラーが出た場合、メッセージを良く読んで!
• シミュレーションの実行
– vvp a.out
• 波形の表示
–
–
–
–
gtkwave XX.vcd
モジュールを選択すると信号名が表示される
これをクリックして選択→Appendをクリックすると波形が表示される
スケールがpsecなのでマイナス(-)をクリックしまくってスケールを
調整