Open-It FPGA トレーニングコース
演習 C1 手順書（Nexys-4 DDR 版）
内田 智久 (KEK IPNS Esys)

Rev. 3.0
2017 年 3 月 15 日1

1 演習 C1 内容説明
最初に講師が演習内容について説明しますので、説明を聞き演習で設計する回路の内容について理解してください。何を設計すれば良いのか理解していないと演習を正しく進める事ができません。分からないことがあれば些細な事でも構いませんので質問してください。

2 演習 C1 手順
演習時間になったら下の手順に従って演習を進めてください。分からない事、不明な事があれば隣近所の方と相談して解決するか、講師に質問してください。手順書の内容が間違っていることもあります。疑問があれば気楽に質問してください。設計やソースコードの記述で調べても分からない時は最後にソースコードを解答例として載せましたので参考にしながら先へ進んでください。

2.1 回路設計
手順 1-1

下の真理値表を完成させてください。

【注意】0 で LED が点灯します。

手順 1-2

I[3]

I[2]

I[1]

I[0]

CACBCCCDCECFCG000000000010001001000110100010101100111100010011010

10111100

110

1

1

1

10

1

111

作成した真理値表を見ながら、各出力毎に論理式を書いてください。

例として AN[7:0] についての式を下に書きます。

assign AN[7:0] = 8’b1111 1110;

2以下、CA から CG について式を書いてください。

assign CA =assign CB =assign CC =assign CD =assign CE =assign CF =assign CG =2.2 Vivado プロジェクト作成
講義資料「2.2 HDL 入力と RTL 解析」を見ながら Vivado プロジェクトを作成してください。
プロジェクト作成時に以下の内容を設定してください。

• プロジェクト名– Project name: C1– Project location: C:Y=TempY=FPGA Seminar• デバイス選択– xc7a100tcsg324-1

3

プロジェクトナビゲータ画面が開いたら次のソースコード作成へ進んでください。

2.3 新しいソースコード作成
講義資料「2.2 HDL 入力と RTL 解析」を見ながら新しい Verilog ソースを作成してください。

• 設定項目– File type: Verilog– File name: C1– Module name: C1
I/O ポート定義は下を設定してください。
Port NameDirectionBusMSB

LSB

I

input

チェックを入れる30

AN

outputチェックを入れる70

CA

outputCBoutputCC

outputCDoutput

CEoutput

CFoutput

CGoutput

2.4 コード作成と RTL 解析
講義資料「2.2 HDL 入力と RTL 解析」を見ながら、新しく作成した「C1」モジュールに設計時に書いた論理式を書き加えてソースコードを完成させ RTL 解析を行ってください。

2.5 論理シミュレーション
講義資料「2.3 論理シミュレーション」を見ながら、「C1」モジュールのテストベンチを新たに作成し論理シミュレーションを行ってください。

• テストベンチの名前等– File type: Verilog– File name: C1 TB– Module name: C1 TB
テストベンチに C1 の入力信号 I[3:0] を 0x0 から 0xF まで変化させる環境を作成し、出力が真理値表と同じになっているか確認してください。
補足説明：テストベンチに C1 を組み込む場合ポートの接続は次のように記述してください。

4

C1 uut(.I.AN.CA.CB.CC.CD.CE.CF.CG);(I[3:0](AN[7:0](CA(CB(CC(CD(CE(CF(CG),),),),),),),),)

C1.v の信号 I と AN の接続方法に注目してください。マルチビットポートですが、呼び出されるモジュールのポート名にビット指定をしてはいけません。
シミュレーションで正しく動作していることを確認したら次の「論理合成から動作確認」へ進んでください。

5

2.6 論理合成から動作確認
手順 1 講義資料「2.4 FPGA への実装」を見ながら論理合成を行い、生成された回路の回路図を確認してください (RTL 解析)。
手順 2 講義資料を見ながら下のようにピン指定を行ってください。制約ファイル名は「C1」とします。

Name

Package Pin

I/O Std.

I[0]

J15

I[1]

Drive Str.

Oﬀ chip termination

Pull type

LVCMOS33

NONE

NONE

L16

LVCMOS33

NONE

NONE

I[2]M13LVCMOS33NONE

NONE

I[3]

R15LVCMOS33NONE

NONE

AN[0]

J17LVCMOS3312NONE

NONE

Slow

AN[1]

J18LVCMOS3312NONE

NONE

Slow

AN[2]

T9LVCMOS3312NONE

NONE

Slow

AN[3]

J14LVCMOS3312NONE

NONE

Slow

AN[4]

P14LVCMOS33

12NONE

NONE

Slow

AN[5]

T14

LVCMOS33

12NONE

NONE

Slow

AN[6]

K2LVCMOS3312NONE

NONE

Slow

AN[7]

U13LVCMOS3312NONE

NONE

Slow

CA

T10LVCMOS3312NONE

NONE

Slow

CB

R10LVCMOS3312NONENONESlow

CCK16LVCMOS3312NONENONE

Slow

CD

K13

LVCMOS33

12NONE

NONE

Slow

CEP15

LVCMOS33

12NONE

NONE

Slow

CFT11

LVCMOS33

12NONE

NONE

Slow

CG

L18

LVCMOS33

12NONENONE

Slow

手順 3 再度論理合成を行ってください。
手順 4 配置配線、データファイルの生成を行ってください。
手順 5 最後にデータを FPGA に書き込み SW を動かして動作確認してください。

6Slew

3 解答例
以下の回答は一つの例です。皆さんが設計した回路や記述と異なっているかもしれません。異なっていてもシミュレーションと実機でも正しく動作しているのなら、それも正解です。以下の例は参考程度に見てください。

3.1 真理値表
I[3]

I[2]

[1]

I[0]

CACB

CCCD

CECFCG

0000000000100011001111001000

1

001

0001

1000011001001

001

100010101001

0001

1

001

000000111

0001111

10000000000

1

00

1

0000

1

00

10

1

00001

00010111

1000001

10001

100011101

100001011

1001

10000111101110007

3.2 Verilog ソースコード‘timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer://// Create Date: 2015/06/23 12:00:24// Design Name:// Module Name: C1// Project Name:// Target Devices:// Tool Versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////////

module C1(
input [3:0] I,
output [7:0] AN,
output CA,
output CB,
output CC,
output CD,
output CE,
output CF,
output CG);assignAN[7:0] = 8’b1111_1110;

assignCA =(~I[3] & ~I[2] & ~I[1] & I[0]) |(~I[3] & I[2] & ~I[1] & ~I[0]) |( I[3] & ~I[2] & I[1] & I[0]) |( I[3] & I[2] & ~I[1] & I[0]) ;assignCB =(~I[3] & I[2] & ~I[1] & I[0]) |(~I[3] & I[2] & I[1] & ~I[0]) |( I[3] & ~I[2] & I[1] & I[0]) |8

( I[3] &( I[3] &( I[3] &I[2] & ~I[1] & ~I[0]) |I[2] & I[1] & ~I[0]) |I[2] & I[1] & I[0]) ;assignCC =(~I[3] & ~I[2] & I[1] & ~I[0]) |( I[3] & I[2] & ~I[1] & ~I[0]) |( I[3] & I[2] & I[1] & ~I[0]) |( I[3] & I[2] & I[1] & I[0]) ;assignCD =(~I[3] & ~I[2] & ~I[1] & I[0]) |(~I[3] & I[2] & ~I[1] & ~I[0]) |(~I[3] & I[2] & I[1] & I[0]) |( I[3] & ~I[2] & I[1] & ~I[0]) |( I[3] & I[2] & I[1] & I[0]) ;assignCE =assignCF =assignCG =(~I[3] & ~I[2] & ~I[1] & I[0]) |(~I[3] & ~I[2] & I[1] & I[0]) |(~I[3] & I[2] & ~I[1] & ~I[0]) |(~I[3] & I[2] & ~I[1] & I[0]) |(~I[3] & I[2] & I[1] & I[0]) |( I[3] & ~I[2] & ~I[1] & I[0]) ;(~I[3] & ~I[2] & ~I[1] & I[0]) |(~I[3] & ~I[2] & I[1] & ~I[0]) |(~I[3] & ~I[2] & I[1] & I[0]) |(~I[3] & I[2] & I[1] & I[0]) |( I[3] & I[2] & ~I[1] & I[0]) ;(~I[3] & ~I[2] & ~I[1] & ~I[0]) |(~I[3] & ~I[2] & ~I[1] & I[0]) |(~I[3] & I[2] & I[1] & I[0]) |( I[3] & I[2] & ~I[1] & ~I[0]) ;endmodule

93.3 テストベンチコード‘timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer://// Create Date: 2015/11/05 16:59:42// Design Name:// Module Name: C1_TB// Project Name:// Target Devices:// Tool Versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////////

module C1_TB;
reg

[3:0]

I;

wire
wire
wire
wire
wire
wire
wire
wire

[7:0]

ANCA
CB
CC
CD
CE
CF
CG;;;;;;;;

C1 uut(.I.AN.CA
.CB
.CC
.CD
.CE
.CF

(I[3:0](AN[7:0](CA(CB(CC(CD(CE(CF),),),),),),),),

10

.CG(CG));
initial begin
I[3:0] = 4’b0000;#50;I[3:0] = 4’b0001;#50;
I[3:0] = 4’b0010;#50;
I[3:0] = 4’b0011;#50;
I[3:0] = 4’b0100;#50;
I[3:0] = 4’b0101;#50;
I[3:0] = 4’b0110;#50;
I[3:0] = 4’b0111;#50;
I[3:0] = 4’b1000;#50;
I[3:0] = 4’b1001;#50;
I[3:0] = 4’b1010;#50;
I[3:0] = 4’b1011;#50;
I[3:0] = 4’b1100;#50;
I[3:0] = 4’b1101;#50;
I[3:0] = 4’b1110;#50;
I[3:0] = 4’b1111;
end
endmodule

113.4 制約ファイル (XDC ファイル)
XDC ファイル内の行順は結果に影響しません。
set_property PACKAGE_PIN U9 [get_ports {I[0]}]set_property PACKAGE_PIN U8 [get_ports {I[1]}]set_property PACKAGE_PIN R7 [get_ports {I[2]}]set_property PACKAGE_PIN R6 [get_ports {I[3]}]set_property PACKAGE_PIN L3 [get_ports CA]
set_property PACKAGE_PIN N1 [get_ports CB]
set_property PACKAGE_PIN L5 [get_ports CC]
set_property PACKAGE_PIN L4 [get_ports CD]
set_property PACKAGE_PIN K3 [get_ports CE]
set_property PACKAGE_PIN M2 [get_ports CF]
set_property PACKAGE_PIN L6 [get_ports CG]
set_property IOSTANDARD LVCMOS33 [get_ports {I[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {I[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {I[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {I[0]}]set_property IOSTANDARD LVCMOS33 [get_ports CA]
set_property IOSTANDARD LVCMOS33 [get_ports CB]
set_property IOSTANDARD LVCMOS33 [get_ports CD]
set_property IOSTANDARD LVCMOS33 [get_ports CC]
set_property IOSTANDARD LVCMOS33 [get_ports CE]
set_property IOSTANDARD LVCMOS33 [get_ports CF]
set_property IOSTANDARD LVCMOS33 [get_ports CG]
set_property OFFCHIP_TERM NONE [get_ports CA]
set_property OFFCHIP_TERM NONE [get_ports CB]
set_property OFFCHIP_TERM NONE [get_ports CC]
set_property OFFCHIP_TERM NONE [get_ports CD]
set_property OFFCHIP_TERM NONE [get_ports CE]
set_property OFFCHIP_TERM NONE [get_ports CF]
set_property PACKAGE_PIN M1 [get_ports {AN[7]}]set_property PACKAGE_PIN L1 [get_ports {AN[6]}]set_property PACKAGE_PIN N4 [get_ports {AN[5]}]set_property PACKAGE_PIN N2 [get_ports {AN[4]}]set_property PACKAGE_PIN N5 [get_ports {AN[3]}]set_property PACKAGE_PIN M3 [get_ports {AN[2]}]set_property PACKAGE_PIN M6 [get_ports {AN[1]}]set_property PACKAGE_PIN N6 [get_ports {AN[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[7]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[5]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {AN[1]}]12set_property IOSTANDARD LVCMOS33 [get_ports {AN[0]}]13