リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-hdlv のtlr...

35
リフレッシュ

Upload: others

Post on 21-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

リフレッシュ教育資料

Kazutoshi Kobayashi ([email protected])

2007年 12月 19日-20日

Page 2: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

目次

第 1章 はじめに 1

1.1 演習の進め方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 演習問題,回答等の配布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

第 2章 例題による演習 2

2.1 FPGAの合成から配置配線までの流れ . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 Verilog-HDLシミュレーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.3 QuartusIIによる論理合成と FPGAの配置配線 . . . . . . . . . . . . . . . . . . . . 4

2.4 ボードへのダウンロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

第 3章 電卓設計演習 11

3.1 5.3節 2桁の BCDを入力して内部で 2進数で保存する回路の設計 . . . . . . . . . 11

3.1.1 シミュレーションの方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.1.2 Quartusを用いた binshifttopの論理合成と配置配線 . . . . . . . . . . . . . . 14

3.2 5.4節演算回路 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2.1 シミュレーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2.2 Quartusによる合成と配置配線 . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.3 5.6節電卓の設計 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.3.1 シミュレーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.3.2 Quartusによる合成と配置配線 . . . . . . . . . . . . . . . . . . . . . . . . . 21

第 4章 FPGAボードの仕様 23

4.1 ボードの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.2 ボードピン接続表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.3 7セグメント LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.4 クロック周波数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.5 プッシュスイッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.6 注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

第 5章 シミュレーションを会社や学校で行うためには 28

5.1 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.2 シミュレータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.3 Cver on Cygwin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.3.1 Cygwinのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.3.2 GPL Cverのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.3.3 GTKのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.3.4 PLIライブラリのインストール . . . . . . . . . . . . . . . . . . . . . . . . 30

i

Page 3: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

5.4 Verilog-XL on Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.4.1 GTK+他のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.4.2 ライブラリのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.4.3 実行シェルスクリプト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.5 Verilog-XL on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.5.1 ライブラリのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.5.2 実行シェルスクリプト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.6 PLIファイルのソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

第 6章 その他 32

6.1 FPGAボード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.2 その他の演習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

ii

Page 4: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

第1章 はじめに

本演習では, Verilog-HDLの文法の解説に引き続き, Verilog-HDLをつかった同期回路のハードウ

エア設計手法を演習により学ぶ. Verilog-HDLから,回路を実際に合成して,その回路を FPGAにダ

ウンロードし,実際にその動作を確かめることで,記述した HDLが,実際にどのように動作するか

を自分の目と手を使って確認することができる.

1.1 演習の進め方

本演習は,次のような手順で進めていく

1. 簡単な記述済の回路を用いて

(a) シミュレーション

(b) 論理合成

(c) FPGAへの配置配線

(d) ダウンロード

までの一連の流れを実際に行う.

2. 簡単な 10 進入力回路からはじめて, 最終的には, 加減算電卓を Verilog-HDL により作成し,

FPGAにダウンロード,実際に動作させる.

1.2 演習問題,回答等の配布

この他の,講義資料,ならびに演習資料は, htmlにより配布する.

% netscape file:///home/users22/ref07/ref07294/sdoc/index.html

(netref でも OK)

# 最初は/が 3ついるので注意

をターミナルのコマンドラインから実行します.

文字化けが起る場合は,メニューより, View→ Encoding→ Japanese (Auto-Detect)を実行して下

さい.

1

Page 5: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

第2章 例題による演習

2.1 FPGAの合成から配置配線までの流れ

本演習では, Verilog-HDL の RTL記述から, FPGA用の回路を論理合成するために, Altera社の

QuartusIIを用いる. QuartusIIは FPGAベンダであるAltera社が開発しているツールである. Verilog-

HDLの RTL(レジスタトランスファレベル)記述を入力とし,ターゲットとする FPGAの型番を入

力し,ピン配置を指定すると,回路の合成から FPGAへの配置配線までを行うことができる.

過去の演習では, Synopsys社の FPGA Compiler IIや, Synplicity社の Synplify Pro等の FPGA向

けの論理合成ツールを使用していたが, Quartus IIの論理合成機能の進化により, Quartus IIのみで

十分となった.

ただし,大規模な回路の論理合成にはやはり,専用の論理合成ツールを使った方が性能が良くなる

ことが多いのは事実である.

2.2 Verilog-HDLシミュレーション

1. 本演習専用のディレクトリ (フォルダ)を作成する.以下では,すべて roulette以下に,ファイル

を作成またはコピーする.

% mkdir roulette

% cd roulette

2. シミュレーションと合成に用いる Verilog 記述を用意する. 下記のファイルをダウンロード

する.

• verilog/roulette.v

• verilog/roulettesim.v

3. verilogコマンドにより Verilog-XLシミュレータを実行する.

% verilog roulettesim.v roulette.v

下のような実行結果が画面に表示されるであろう.

2

Page 6: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

0: xxxxxx

10: 000001

30: 000010

40990: 000100

81950: 001000

122910: 010000

163870: 100000

ここで用いるVerilog記述は, 7セグメント LEDをルーレット状に光らせる回路である.シミュ

レーション結果ではルーレットで点灯する LEDに 1が表示される.

リスト 1: roulette.v

module roulette(out,CLK,RST);

input CLK,RST;

output [5:0] out;

reg [5:0] out;

reg [10:0] divide; // 11ビット分のカウンタで, 2の 11乗 (2048回)数える.always @(posedge CLK or negedge RST)

begin

if(!RST)

begin

out<=1;divide<=0;

end

else

begin

if(divide==0)// 2048回数えたら, ルーレットを一つ進める.begin

out[0]<=out[5];

out[1]<=out[0];

out[2]<=out[1];

out[3]<=out[2];

out[4]<=out[3];

out[5]<=out[4];

end

divide<=divide+1; // クロック毎に 1カウントアップ.end

end

endmodule

リスト 2: テストフィクスチャ roulettesim.v

`timescale 1ns/100ps

// シミュレーションの単位を 1nsにして, 100psの精度で出力を表示します.module roulettesim;

reg CLK,RST;

wire [5:0] out;

`ifdef MAX

roulette I0(.out5(out[5]),.out4(out[4]),.out3(out[3]),.out2(out[2]),

.out1(out[1]),.out0(out[0]),.CLK(CLK),.RST(RST));

// この書式については, 後程説明する.`else

roulette I0(.out(out),.CLK(CLK),.RST(RST));

`endif

3

Page 7: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

initial begin

CLK=0;RST=1;

#10 RST=0;

#10 RST=1;// 10nsリセットを入れる.#200000 $finish;// その後, 200usec動作させる.

end

always #10 // クロックは, 20ns毎にいれます.CLK=�CLK;

initial

$monitor("%d: ",$time,"%b",out);

initial

begin

$dumpfile("roulette.vcd"); //出力ファイルの指定.$dumpvars;// すべての信号を保存する.

end

`ifdef SDF

initial

$sdf_annotate("roulette/roulette.sdo",I0,,"sdf.log", "TOOL_CONTROL",

"1.000000:1.000000:1.000000","FROM_MTM" ); // SDF の読み込み

`endif

endmodule

2.3 QuartusIIによる論理合成とFPGAの配置配線

1. roulette.tclverilog/roulette.tclをダウンロードして, roulette/以下に置く.

2. Quartus IIを立ち上げる (図 2.3).

% cd �/roulette/

% quartus

3. 初回立ち上げ時には,図 2.1のウィンドウが表示されるので,そのまま, OKを押す.

4. 次に,図 2.2のウィンドウが表示されるので, �Yes�を選択する.間違って, Noを選択してしまっ

た場合は, File→ New Project Wizardを実行する.

図 2.1: 初回起動時の選択画面

4

Page 8: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 2.2: New Project

図 2.3: Quartus起動後の画面

表 2.1: New Project Wizard: page 1 of 5に入力する値フィールド名 入力値

What is the working directory.. そのまま (ホームディレクトリ名/roulette)

What is the name of the project roulette

What is the name of the top-level design entity... roulette

5

Page 9: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 2.4: Project Wizard 1

ホームディレクトリ名/roulette

roulette

図 2.5: Project Wizard 2

6

Page 10: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 2.6: Project Wizard 3

図 2.7: Select Family

5. Project Wizardウィンドウ (図 2.4)が表示されるので, Nextボタンを押す.

6. 図 2.5の通り,上から順番に表 2.1のように入力する.

7. 図 2.6の通り, roulette.vを File Nameとして指定して, Finishボタンを押す.間違って途中で,

Finishを押してしまった場合は, Project→ Add/Remove Files in Projectを実行して roulette.v

を指定する.

8. Select Familyのウィンドウが表示された場合は, Cycloneを選択する. (表示されない場合はそ

のままで良い)

9. Tools->Tcl Scriptsを実行し, Project内にある roulette.tclを選択して, Runボタンを押す.これ

により, FPGAデバイスの設定とボードに対応したピンのアサインが行なわれる. Tcl Scripts

を実行しても何も起こらない場合は,下記の事項を確認する.

7

Page 11: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 2.8: Select Family

このボタン(Start Compilation)を押す

図 2.9: Start Compilation

(a) roulette.tclが roulette以下のディレクトリにあるかを再度確認する.

(b) 存在しない場合は, roulette.tclを所定に場所に置く.

(c) Tools→Optionの Internet Connectivityを開き, Check the ALtera web site for new Quartus

II Informationのチェックをはずし, quartusを再起動する.

(d) Quartusを終了する

(e) 再度Quartusを立ち上げて, File->Open Projectで, rouletteを開き,再度Tools->Tcl Scripts

を実行する

10. 紫の矢印 (Start Compilation)を押す.

2.4 ボードへのダウンロード

1. ワークステーションのシリアルポートおよびボードにケーブルを接続して,電源を入れる.ケー

ブルの向きは図 4.2を参照する.

2. Tools→ Programmerを実行する.

8

Page 12: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 2.10: Add Hardware

図 2.11: Hardware Setup

3. この手順は最初の書込の時だけ実行する. Hardware Setupボタンをクリックする. Add Hardware

ボタンをクリックして,図 2.10の通り, Master Blaster, /dev/term/a, 115200に設定して, OKボ

タンをクリックする.

図 2.11の通り, Currently selected hardwareが, MasterBlaster /dev/term/aになっていればOKで

ある. Closeボタンを押す.

4. Program/Con�gureのところにチェックを入れる (図 2.12).

5. Startボタンを押すと, FPGAへの書込が始まる.

6. 書込が終了すると, 7セグメント LEDの一つが回り始める.クロック周波数を変えるつまみを

回して,回転する速度が変化することを確認せよ.

9

Page 13: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

ここにチェックを入れる

図 2.12: roulette.sofの選択

10

Page 14: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

第3章 電卓設計演習

3.1 5.3節 2桁のBCDを入力して内部で2進数で保存する回路の設計

演習の前に,本演習のファイルを格納するディレクトリを作成する.

% cd

% mkdir binshifttop

本演習で使用するファイルはすべて, binshifttop内に作成または,コピーする.

演習 5.1 binshiftregの module,endmodule,入出力ピン定義部分を記述せよ。

解答例 verilog/binshiftreg1.v

module binshiftreg(out,decimal,CLK,RST,CE);

output [6:0] out;

input [9:0] decimal;

input CLK,RST,CE;

// ↑ input, outputの定義はビット幅毎にendmodule

演習 5.2 10ビットの 10キーからの入力を,4ビットの 2進数に変換する組合わせ回路を assignと,

function文により binshiftreg内に記述せよ。ただし,function文 dectobinを dに入力するも

のとする。

解答例 verilog/binshiftreg2.v

module binshiftreg(out,decimal,CLK,RST,CE);

output [6:0] out;

input [9:0] decimal;

input CLK,RST,CE;

wire [3:0] d; //← ビット幅が 1以上の信号は wireで定義しておく.assign d=dectobin(decimal); //← function dectobinの出力を dに入力

function [3:0] dectobin; //← [3:0]は出力のビット幅を定義input [9:0] in; //← function文の引数を定義

if(in[9]) //← functionの中には自由に if, caseが書けるdectobin = 9;

else if(in[8])

dectobin = 8;

else if(in[7])

dectobin = 7;

11

Page 15: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

//中略else if(in[0])

dectobin = 0;

//↑最後の elseがなくても組み合わせ回路になるendfunction

endmodule

演習 5.3 10キーが押された回数を数える countと,入力値を格納する REGAを,alwaysブロック

で binshiftreg内に実現せよ。

演習 5.4 出力ポート outに対応する assign文を記述せよ.

解答例 verilog/binshiftreg.v

module binshiftreg(out,decimal,CLK,RST,CE);

output [6:0] out;

input [9:0] decimal;

input CLK,RST,CE;

wire [3:0] d;

reg [1:0] count;

reg [6:0] REGA;

assign d=dectobin(decimal);

function [3:0] dectobin;

input [9:0] in;

if(in[9])

dectobin = 9;

else if(in[8])

dectobin = 8;

else if(in[7])

dectobin = 7;

else if(in[6])

dectobin = 6;

else if(in[5])

dectobin = 5;

else if(in[4])

dectobin = 4;

else if(in[3])

dectobin = 3;

else if(in[2])

dectobin = 2;

else if(in[1])

dectobin = 1;

else if(in[0])

dectobin = 0;

endfunction

always @(posedge CLK or negedge RST)

begin

if(!RST)

begin

REGA<=0;

count<=0;

end

else if((decimal != 0) && (count < 2))

begin

REGA<=(REGA*10)+d;

12

Page 16: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

count<=count+1;

end

else if(CE)

begin

REGA<=0;

count<=0;

end

end

assign out=REGA;

endmodule

演習 5.6 binshifttopを設計せよ。

• binshifttopひな型 verilog/skel/binshifttop.v

module binshifttop (push,ledl,ledh,CLK,CE,RST);

input [9:0] push;

input CLK,RST,CE;

output [6:0] ledl, ledh;

endmodule

• binshifttop答え verilog/binshifttop.v

module binshifttop (push,ledl,ledh,CLK,CE,RST);

input [9:0] push;// 10キー.input CLK,RST,CE;

output [6:0] ledl, ledh;

//rectbegin

wire [6:0] out;

wire [9:0] pushout; //←内部バスの信号定義wire CEout;

//rectend

//rectend

syncro #(1) I3(.in(CE),

.out(CEout),.CLK(CLK),.RST(RST));

//rectbegin

syncro #(10) I2(.in(push),.out(pushout),

.CLK(CLK),.RST(RST));

// #(10)については, \ref{sec:asyncro}節を参照せよ.binled I1(.in(out),.ledl(ledl),.ledh(ledh));

//rectbegin

binshiftreg I0(.decimal(pushout),.CLK(CLK),

.RST(RST),.CE(CEout),.out(out));

// ↑ binshiftregの decimal入力に, syncroの out出力を// pushoutを介して接続している.

//rectend

endmodule

13

Page 17: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 3.1: GUIを用いた電卓

3.1.1 シミュレーションの方法

下記のシミュレーションに必要なファイルを binshifttop以下にダウンロードする.

verilog/binshiftsimgtk.v GTK版テストフィクスチャ.シミュレーションに必要

verilog/other.v その他必要なモジュールを含んだファイル.

電卓設計演習では,デバッグを用意にするために, X Window上に構築された仮想的な電卓のGUI

を用いてシミュレーションを行う.シミュレーションを行うには,この GUIは, verilogシミュレー

タの持つ PLI(Programming Language Interface)という C言語との接続インタフェースにより記述さ

れている. GUIはダイナミックライブラリとして構築されており, verilog実行時に動的にライブラ

リが読み込まれシミュレーションが行われる. gtksim.shというコマンドの引数にすべての Verilog

ファイルを与えることでシミュレーションが行われる. binshifttopのシミュレーションを行うには,

下記の通りに UNIXのコマンドプロンプトに入力する.

% gtksim.sh binshiftsimgtk.v binshifttop.v binshiftreg.v other.v

これにより,電卓を模した GUI(図 3.1)が立ち上がる.

Qにより,シミュレーションが終了する以外は,それぞれのボタンが,回路の入力ピンに対応して

いる.ただし, binshifttopで有効なのは 10キーと CEと RSTのみである. 7セグメント LED上部の

小さな LEDは,最後の電卓用の over�owを表示する.

3.1.2 Quartusを用いた binshifttopの論理合成と配置配線

1. binshifttop.tclverilog/binshifttop.tclをダウンロードして, binshifttop/以下に置く.

2. Quartus IIを立ち上げる. (図 2.3)最初に,図 2.2のウィンドウが表示されるので, �Yes�を選択

する.間違って, Noを選択してしまった場合は, File→ New Project Wizardを実行する.

14

Page 18: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

図 3.2: Select Family

% cd �/binshifttop

% quartus

3. Project Wizardウィンドウ (図 2.4)が表示されるので, Nextボタンを押す. Project Wizardが表

示されない場合は, Fileメニューから Project Wizardを実行する.

4. 表 3.1の通り入力して, Nextを押す.

表 3.1: New Project Wizard: page 1 of 5に入力する値フィールド名 入力値

What is the working directory.. そのまま (ホームディレクトリ名/binshifttop)

What is the name of the project binshifttop

What is the name of the top-level design entity... binshifttop

5. binshifttop.v, binshiftreg.v, other.vを File Nameとして指定して, Finishボタンを押す.間違って

途中で, Finishを押してしまった場合は, Project→ Add/Remove Files in Projectを実行して,必

要なファイルを指定する.

6. Select Familyのウィンドウが表示されたら, Cycloneを選択する.

7. Tools->Tcl Scriptsを実行し, Project内にある binshifttop.tclを選択して, Runボタンを押す.こ

れにより, FPGAデバイスの設定とボードに対応したピンのアサインが行なわれる.

8. 紫の矢印 (Start Compilation)を押す.

3.2 5.4節演算回路

演習を始める前に,専用のディレクトリを作成し,以後のファイルはこの中に作成する.

% cd �/

% mkdir enzantop

15

Page 19: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

3.2.1 シミュレーション

• 下記のファイルを先ほど作成した enzantop内に保存する.

verilog/enzansimgtk.v GTK版テストフィクスチャ.シミュレーションに必要

verilog/other.v その他必要なモジュールを含んだファイル.

• シミュレーションは下記の通り行なう.

% gtksim.sh enzansimgtk.v enzantop.v enzan.v other.v

演習 5.7 enzanを Verilog-HDLにより記述せよ

verilog/enzan part1.v moduleのみ

verilog/enzan part2.v +キーに対する動作の追加

verilog/enzan part3.v =キーに対する動作の追加

verilog/enzan part4.v 出力 outの論理

verilog/enzan.v enzan.vの答え

module enzan(decimal,plus,equal,CLK,RST,CE,out);

input [9:0] decimal;

input CLK,CE,RST,plus,equal;

output [6:0] out;

wire [3:0] d;

reg [6:0] REGA,REGB;

reg [1:0] count;

reg equal_reg;

function [3:0] dectobin;

input [9:0] in;

if(in[9])

dectobin = 9;

else if(in[8])

dectobin = 8;

else if(in[7])

dectobin = 7;

else if(in[6])

dectobin = 6;

else if(in[5])

dectobin = 5;

else if(in[4])

dectobin = 4;

else if(in[3])

dectobin = 3;

else if(in[2])

dectobin = 2;

else if(in[1])

dectobin = 1;

else if(in[0])

dectobin = 0;

endfunction

16

Page 20: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

assign d=dectobin(decimal);

always @(posedge CLK or negedge RST)

begin

if(!RST)

begin

REGA<=0;REGB<=0;count<=0;equal_reg<=0;

end

else if((decimal!=0) && (count < 2))

begin

REGA<=REGA*10+d;

count <= count + 1;

end

else if(plus)

begin

count<=0;

REGA<=0;

REGB<=REGA;

end

else if(equal)

begin

count<=0;

REGB<=REGA+REGB;

equal_reg<=1;

end

else if(CE)

begin

count<=0;

REGA<=0;

equal_reg<=0;

end

end

assign out=(equal_reg==0)?REGA:REGB;

endmodule

演習 5.8 enzantopの設計

verilog/skel/enzantop.v moduleのみ

verilog/enzantop.v enzantop答え

module enzantop (push,plus,equal,ledl,ledh,CLK,CE,RST);

input [9:0] push;

input CLK,CE,RST,plus,equal;

output [6:0] ledl,ledh;

wire [6:0] out;

wire [9:0] pushout;

wire CEout,equalout,plusout;

enzan IO(.decimal(pushout), .plus(plusout),

.equal(equalout), .CLK(CLK), .CE(CEout), .RST(RST), .out(out));

binled I1(.in(out),.ledl(ledl),.ledh(ledh));

syncro #(10) I2(.in(push),.out(pushout),.CLK(CLK),.RST(RST));

syncro #(1) I3(.in(plus),.out(plusout),.CLK(CLK),.RST(RST));

syncro #(1) I4(.in(equal),.out(equalout),.CLK(CLK),.RST(RST));

syncro #(1) I5(.in(CE),.out(CEout),.CLK(CLK),.RST(RST));

endmodule

17

Page 21: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

3.2.2 Quartusによる合成と配置配線

1. enzantop.tclverilog/enzantop.tclをダウンロードする.

2. enzantopに移動して, quartusを立ち上げる

% cd �/enzantop

% quartus

3. New Project Wizardにて,表 3.2の通り入力する

表 3.2: New Project Wizard: page 1 of 5に入力する値フィールド名 入力値

What is the working directory.. そのまま (ホームディレクトリ名/enzantop)

What is the name of the project enzantop

What is the name of the top-level design entity... enzantop

4. Tools->Tcl Scriptsを実行し, Project内にある enzantop.tclを選択して, Runボタンを押す.

5. あとは binshifttopと同じである.

3.3 5.6節電卓の設計

演習を始める前に,専用のディレクトリを作成し,以後のファイルはこの中に作成する.

% cd �/

% mkdir calctop

演習 5.9負の数の取扱い • verilog/inversesigned.v(signedをつかった場合)

module inverse;

reg signed [4:0] A,B,C;//← 5ビットのレジスタinitial

begin

A=3;B=-2;

$display("A=%d,%b, B=%d,%b",A,A,B,B);

C=8-5; //←結果は 3

#100

C=5-8; //←結果は-3#100

C=-10-8; //←結果は-18(オーバーフロー)#100

C=10+10; //←結果は 20(オーバーフロー)end

initial

$monitor("%d: ",$time,"C=%d, %b",C,C);

//↑ Cの値を 10進と 2進で表示する.endmodule

18

Page 22: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

電卓の設計 演習 5.10~5.17

verilog/skel/calc.v 電卓ひな型

verilog/calc.v 電卓答え (signed版)

`define DECIMAL 0

`define OPE 1

`define HALT 2

module calc(decimal,plus,minus,equal,CLK,RST,CE,sign,overflow,out);

input [9:0] decimal;

input CLK,CE,RST,plus,minus,equal;

output sign,overflow;

output [6:0] out;

wire [3:0] d;

reg [1:0] state;

reg signed [8:0] REGA, REGB;

reg [1:0] count;

reg add_or_sub;

function [3:0] dectobin;

input [9:0] in;

if(in[9])

dectobin = 9;

else if(in[8])

dectobin = 8;

else if(in[7])

dectobin = 7;

else if(in[6])

dectobin = 6;

else if(in[5])

dectobin = 5;

else if(in[4])

dectobin = 4;

else if(in[3])

dectobin = 3;

else if(in[2])

dectobin = 2;

else if(in[1])

dectobin = 1;

else if(in[0])

dectobin = 0;

endfunction

assign d=dectobin(decimal);

always @(posedge CLK or negedge RST)

begin

if(!RST)

begin

REGA<=0;REGB<=0;count<=0;

add_or_sub<=0;

state<=`DECIMAL;

end

else

begin

case(state)

`DECIMAL:

19

Page 23: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

begin

if((decimal!=0) && (count < 2))

begin

count<=count+1;

REGA<=REGA*10+d;

end

else if(CE)

begin

REGA<=0;

count<=0;

end

else if(plus || minus || equal)

begin

if(add_or_sub==0)

REGB<=REGB+REGA;

else

REGB<=REGB-REGA;

if(plus)

add_or_sub<=0;

else if(minus)

add_or_sub<=1;

state<=`OPE;

end

end

`OPE:

begin

if((REGB>99)||(REGB<-99))

state<=`HALT;

else if(decimal)

begin

REGA<=d;

count <= 1;

state<=`DECIMAL;

end

end

`HALT:

begin

if(CE)

begin

REGA<=0;

REGB<=0;

add_or_sub<=0;

count<=0;

state<=`DECIMAL;

end

end

endcase

end

end

assign out=(state==`OPE)?((REGB[8]==0)?REGB[6:0]:�REGB[6:0]+1):REGA;

assign sign=(state==`OPE)?REGB[8]:0;

assign overflow=(state==`HALT)?1:0;

endmodule

verilog/calctop.v 電卓最上位モジュール (calctop.v)答え

module calctop \

20

Page 24: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

(push,plus,minus,equal,ledsign,overflow,ledl,ledh,CLK,CE,RST);

input [9:0] push;

input CLK,CE,RST,plus,minus,equal;

output [6:0] ledl;

output [6:0] ledh;

output [6:0] ledsign;

output overflow;

wire [6:0] out;

wire [9:0] pushout;

assign ledsign[5:0]=0;

calc \

I0(.decimal(pushout),.plus(plusout),.equal(equalout),.CLK(CLK),.CE(CEout),.RST(RST), \

.out(out),.minus(_minus),.sign(ledsign[6]),.overflow(overflow));

binled I1(.in(out),.ledl(ledl),.ledh(ledh));

syncro #(10) I2(.in(push),.out(pushout),.CLK(CLK),.RST(RST));

syncro #(1) I3(.in(plus),.out(plusout),.CLK(CLK),.RST(RST));

syncro #(1) I4(.in(equal),.out(equalout),.CLK(CLK),.RST(RST));

syncro #(1) I5(.in(CE),.out(CEout),.CLK(CLK),.RST(RST));

syncro #(1) I6(.in(minus),.out(_minus),.CLK(CLK),.RST(RST));

endmodule

3.3.1 シミュレーション

calctop内にファイルを作成,ダウンロードする.

verilog/other.v その他必要なモジュールを含んだファイル.

verilog/calcsimgtk.v GTK版テストフィクスチャ

シミュレーションは下記の通り行なう.

% gtksim.sh calcsimgtk.v calctop.v calc.v other.v

3.3.2 Quartusによる合成と配置配線

1. calctop.tclverilog/calctop.tclをダウンロードする.

2. calctopに移動して, quartusを立ち上げる

% cd �/calctop

% quartus

3. New Project Wizardにて,表 3.3の通り入力する

4. Tools->Tcl Scriptsを実行し, Project内にある calctop.tclを選択して, Runボタンを押す.

5. あとは binshifttopと同じである.

21

Page 25: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

表 3.3: New Project Wizard: page 1 of 5に入力する値フィールド名 入力値

What is the working directory.. そのまま (ホームディレクトリ名/calctop)

What is the name of the project calctop

What is the name of the top-level design entity... calctop

22

Page 26: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

第4章 FPGAボードの仕様

4.1 ボードの構成

本演習で使うのは,三菱電機マイコン機器ソフトウエア社 http://www.mms.co.jp/製のPower Medusa

MU200-EC6Sである.配置は以下のようになっている.

FPGAとしては, Altera社の Cycloneが搭載されている. Cycloneは大規模であるが安価な FPGA

で,デジタルビデオカメラやプラズマディスプレイ等の民生品にも多数搭載されている.

今回は, SUNのワークステーションを使用する関係上,ボードには,マスタブラスタと呼ばれるシ

リアル, USBをサポートした書き込み器を用いるが,パソコンを用いる場合はパラレルケーブルを

接続すれば良い.

4.2 ボードピン接続表

各スイッチ, LED(発光ダイオード)は表 4.1,表 4.2の通りボードに接続されている.また,今回演

習で使用するマスターブラスタからのケーブルは,ボード本体から延びているケーブルと図 4.2の

通り,それぞれの赤いケーブルが同じ向きになるように接続する.

4.3 7セグメントLED

7セグメント LEDの各セグメントは FPGAの出力に接続されている.出力を 1にすると LEDが

点灯する. LEDの各セグメントの英字による表示を図 4.3に示す.

4.4 クロック周波数

左下のロータリースイッチで FPGAに供給するクロックを設定する.ロータリースイッチの設定

値によるクロック周波数は,表 4.3の通りである.☆の場合には, SW26(1クロックスイッチ)からク

ロックを供給します.

4.5 プッシュスイッチ

教科書の演習ではプッシュスイッチを電卓のキーとして用いる.その配置は図 4.4のようにする.

4.6 注意点

1. プッシュスイッチは押さないと 1が,押すと 0が出力される.

23

Page 27: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

7セグメントLED

A B C D E F G H

EP1C6Q240C8

クロック分周

マスターブラスタ接続

プッシュスイッチ

押すと0になるRST

トグルSW

ロータリSW

LED

ABCをONに

電源コネクタ

ブザー

FPGA

トグルSW

LED(上から2番目)を右に倒す

図 4.1: FPGAボードの構成

ボード側ケーブル

赤いケーブル(裏側)

赤いケーブル

マスターブラスタ側

図 4.2: ケーブルの接続 (それぞれ赤いケーブルが同じ向きになるように接続する.)

24

Page 28: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

表 4.1: ボードピン接続表 (その 1)

ピン番号 入力名 ピン番号 入力名 ピン番号 入力名

28 CLK 7セグメント A 7セグメント E

240 RST 133 A0 87 E0

プッシュスイッチ 134 A1 88 E1

2 A0 135 A2 93 E2

3 A1 136 A3 94 E3

4 A2 137 A4 95 E4

5 A3 138 A5 98 E5

6 A4 139 A6 99 E6

7 B0 140 A7 100 E7

8 B1 7セグメント B 7セグメント F

11 B2 123 B0 77 F0

12 B3 124 B1 78 F1

13 B4 125 B2 79 F2

14 C0 126 B3 82 F3

15 C1 127 B4 83 F4

16 C2 128 B5 84 F5

17 C3 131 B6 85 F6

18 C4 132 B7 86 F7

A7

A1

A4

A6

A5

A2

A3

A0

図 4.3: 7セグメント LED

25

Page 29: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

表 4.2: ボードピン接続表 (その 2)

ピン番号 入力名 ピン番号 入力名 ピン番号 入力名

プッシュスイッチ 7セグメント C 7セグメント G

19 D0 115 C0 65 G0

20 D1 116 C1 66 G1

21 D2 117 C2 67 G2

23 D3 118 C3 68 G3

41 D4 119 C4 73 G4

LED 120 C5 74 G5

47 LED-0 121 C6 75 G6

48 LED-1 122 C7 76 G7

49 LED-2 7セグメント D 7セグメント H

50 LED-3 101 D0 57 H0

53 LED-4 104 D1 58 H1

54 LED-5 105 D2 59 H2

55 LED-6 106 D3 60 H3

56 LED-7 107 D4 61 H4

108 D5 62 H5

113 D6 63 H6

114 D7 64 H7

表 4.3: ロータリスイッチ設定によるクロック周波数0 1 2 3 4 5 6 7

周波数 40MHz 20MHz 10MHz 5MHz 1.25MHz 3125kHz 78.1kHz 19.5kHz

8 9 A B C D E F

周波数 9.8kHz 4.9kHz 2.44kHz 1.22kHz 610Hz 305Hz 1.0Hz ☆

26

Page 30: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

A0 A1 A2 A3 A4

B0 B1 B2 B3 B4

C0 C1 C2 C3 C4

D0 D1 D2 D3 D4

7 8 9 +

4 5 6 -

1 2 3 =

0

2

7

14

19

3 4 5

8 11 12

15 16 17

CE

23

10キー

スイッチ番号

FPGAピン番号

6

13

18

20 21 41

図 4.4: プッシュボタンの配置

27

Page 31: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

第5章 シミュレーションを会社や学校で行うためには

5.1 はじめに

本演習の続きを,会社や学校に帰って行うことができるように,電卓のGUIを構築する PLIのソー

スならびに,コンパイル済のライブラリを配布する.ここでは,シミュレータの情報やインストールの

方法を記載する.なお,講習会の資料, PLIのソース等は, http://kazunoko.kuee.kyoto-u.ac.jp/�kobayasi/

refreshよりダウンロード可能である.

5.2 シミュレータ

Verilogシミュレータで,今回使っている signed拡張を実装しているものとして,次のものがあげ

られる.

Verilg-XL, NC-verilog Cadence社: Solaris, HP-UX, Windows

VCS Synopsys社: Solaris, HP-UX, Windows, Linux

modelsim Mentor Graphics社: Solaris, HP-UX, Windows, Linux

GPL Cver Antrim Design Systems社

すべて PLIに対応しているので,上記のシミュレータのライセンスを持っていれば,シミュレーショ

ン可能である.特に, GPL Cverは, GPLに従って配布されている Verilog Simulatorである. Verilog

2001もほとんどサポートしており,お勧めのシミュレータである.

以下では,このうち, Windowsの Cygwin上にインストールした GPL Cverについて,入手の方法

と電卓用 PLIのインストールの方法を述べる.

また, Solaris, Linuxで動く Verilog-XLシミュレータでの電卓用 PLIのインストール方法につい

ても触れる.

5.3 Cver on Cygwin

5.3.1 Cygwinのインストール

1. cygwinをインストールする. www.cygwin.comにアクセスし, �Install or update now!�をクリッ

クする.

2. Select Packagesまで進んだら, Devel内の, gccと makeを Skipから, Installに変更する.

3. 最後までインストールを進める

28

Page 32: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

5.3.2 GPL Cverのインストール

1. GPL Cverのホームページhttp://www.pragmatic-c.com/gpl-cver/index.htmより, gplcver-2.11a.src.tar.bz2http:/

/www.pragmatic-c.com/gpl-cver/downloads/gplcver-2.11a.src.tar.bz2をダウンロードする.

2. cygwin上で展開する.

$ tar xfj gplcver-2.11a.src.tar.bz2

3. gplcver-2.11a.src/srcディレクトリに移り, makeを実行する.

$ cd gplcver-2.11a.src/src

$ make -f makefile.cygwin

4. objsディレクトリに移り, PLI版の cverをコンパイルする.

$ cd ../objs

$ make -f makefile.dll dll exe

5. 動くかどうかテストするが,配布されている make�leに不具合があるので,これと置き換え

る.cver/make�le.cygwin

$ cd ../tests_and_examples/examples.vpi/

# makefile.cygwinを, 上記のものと置き換える

$ make -f makefile.cygwin dll run

# うまく行くと最後に下記の通り表示される.

tmp_channel

5.3.3 GTKのインストール

次に, Cygwinで動作する GTKをインストールする.

1. こちら http://gladewin32.sourceforge.net/より,最新のGtk+ Win32 Development Environmentを

インストールする.インストール先は, C:\cygwin\GTKとする.

2. 正常にインストールされたか確認するために, Make�lecver/Make�le.tex, helloworld.ccver/helloworld.c

をダウンロードする.

29

Page 33: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

3. cygwin上で makeを行なう

# Makefile, helloworld.cをダウンロードしたディレクトリ内に移動

$ make

$ ./helloworld.exe

# windows上に, hello worldと表示されれば正常

5.3.4 PLIライブラリのインストール

1. gtkcalc cver.tgzcver/gtkcalc cver.tgzをダウンロードする

2. gplcver-2.11a.src.tar.bz2を展開したのと同じディレクトリに置く.

3. 展開する.

# 必ず, gplcver-2.11a.src.tar.bz2を展開したのと同じディレクトリに置くこと

$ tar xfz gtkcalc_cver.tgz

4. すでにコンパイルされているので,そのまま動かすことができる

$ cd gtkcalc

$ ./gtksim.sh

5. うまく行かない場合は,再コンパイルを行なう

$ make clean

$ make dll

$ ./gtksim.sh

5.4 Verilog-XL on Solaris

5.4.1 GTK+他のインストール

実行に必要なライブラリをまとめたファイルを作成した. gtkcalc/gtklib.tgzをダウンロードして,

適当なところで展開する.なお,ソースからインストールしたい場合は, http://www.gimp.orgより,ダ

ウンロードすることができる.

30

Page 34: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

5.4.2 ライブラリのインストール

gtkcalc/solaris/libvpi.soをダウンロードする.

5.4.3 実行シェルスクリプト

gtkcalc/solaris/gtksim.shをダウンロードして,

CALCLIB=

GTKLIB=

の CALCLIB=のあとに, libvpi.soを置いたディレクトリ, GTKLIB=のあとに GTKのライブラリ

を置いたディレクトリを指定する. gtksim.shをパスの通ったディレクトリに移して,

chmod +x gtksim.sh

とすれば良い.

5.5 Verilog-XL on Linux

Linuxでは,標準またはオプションで, GTK+がインストールされていることが多いので,ここで

は, GTK+はすでにインストールされているものとする.

5.5.1 ライブラリのインストール

gtkcalc/linux/libvpi.soをダウンロードする.

5.5.2 実行シェルスクリプト

gtkcalc/linux/gtksim.shをダウンロードして,

CALCLIB=

のCALCLIB=のあとに, libvpi.soを置いたディレクトリを指定する. gtksim.shをパスの通ったディ

レクトリに移して,

chmod +x gtksim.sh

とすれば良い.

5.6 PLIファイルのソース

使用した PLIファイルのソースは gtkcalc/gtkcalc.tgzです.

31

Page 35: リフレッシュ教育資料kobayasi/refresh/0712/sdoc/main.pdf本演習では, erilog-HDLV のTLR 記述から, FPGA 用の回路を論理合成するために, Altera 社の QuartusII

第6章 その他

6.1 FPGAボード

今回演習に用いたのは, Quartus IIである.今回使用したMU200-EC6Sに搭載されている Cyclone

デバイスファミリーは, Quartus II Web Editionという無償で使えるツールにより, Verilog HDLの合

成から配置配線を行なうことができる.

シミュレーションに, GPL Cverを用いて, FPGAボードに, MU200-EC6Sを使えば,ボードの実費

のみで,本演習と同じことを行なうことができる.

6.2 その他の演習

FPGAを用いた大学生向けの演習は各地で行なわれている.

熊本大学/九州工業大学では, KITEというプロジェクト名で, FPGAボード上にプロセッサを構築

する演習を古くから行なっている.

京都大学では, Power MedusaシリーズのMU200-APに液晶キャラクタディスプレイを接続して,

テトリスを Verilog-HDLで実装する演習を 3回生向けに行なっている.

長崎大学では, SFL言語を使って,ファミコン互換のハードウエアを FPGA上に構築する実習に

ついて,準備を進めている.

東京大学では, Celoxica社の DK-IIシリーズのボードを用いて, C言語ベースの FPGA実装演習

を行なっている.

32