SlideShare a Scribd company logo
1
Verilog-HDL 講習会DE0編(9)
順序回路記述(4)
∼複雑な状態遷移図∼
31, July, 2013
鹿児島大学
中原 啓貴
DE0_Default もどきを作ってみよう
(DE0ボードの電源を入れたときの動作)
2
3Hzのクロック
に同期して
4桁同時に
カウントアップ
25 Hzのクロックに同期して
4ビット毎に左右にスライド
回路を並列に動作させる
•  なにも一つの回路で制御する必要はない!
•  今回は2つの状態遷移図に分けよう!
3
LEDGスライドの状態遷移図
4
000 001 010
101 100 011
Reset
LEDG <= 11110
_00000;
is_right_shift <= 1;
NONE
LEDG <= 01111
_00000;
is_right_shift <= 1;
is_right_shift == 1;
LEDG <= 00111
_10000;
is_right_shift == 1;
LEDG <= 00011_11000;
is_right_shift == 1;
LEDG <= 00001_11100;
110
is_right_shift == 1;
LEDG <= 00000_11110;
is_right_shift == 1;
LEDG <= 00000_01111;
NONE
LEDG <= 00000_11110;
is_right_shift == 0;
is_right_shift == 0;
LEDG <= 00001_11100;
is_right_shift == 0;
LEDG <= 00011_11000;
is_right_shift == 1;
LEDG <= 00111
_10000;
is_right_shift == 0;
LEDG <= 01111_00000;
is_right_shift == 0;
LEDG <= 11110_00000;
カウントアップの状態遷移図
5
000 001 010 011
111 110 101 100
Reset
HEX_D <= 1000000;
HEX_DP <= 0;
NONE
HEX_D <= 1111001;
HEX_DP <= 1;
NONE
HEX_D <= 0100100;
HEX_DP <= 0;
NONE
HEX_D <= 0110000;
HEX_DP <= 1;
NONE
HEX_D <= 0011001;
HEX_DP <= 0;
NONE
HEX_D <= 0010010;
HEX_DP <= 1;
NONE
HEX_D <= 0000010;
HEX_DP <= 0;
NONE
HEX_D <= 1111000;
HEX_DP <= 1;
NONE
HEX_D <= 1000000;
HEX_DP <= 0;
どうやって実装するか?
•  並列動作する回路なので独立に設計
•  各回路の設計後、1つにまとめる
6
まずはLEDGスライド回路を
設計してFPGA上で動作させる
7
8
•  ピン配置が面倒くさいので、デフォルト
のプロジェクトを読み込みましょう!
(DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの
プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM
Demonstrations 内の
"DE0_Top"フォルダの
ファイル全てを
C:¥verilog¥DE0_tutorial_9_LEDG_Slide¥
内にコピー
DE0_TOP.qpfをダブルクリック
してQuartus IIを起動
9
Pin Plannerを開いてみると
ピン配置が終わっている!
Verilog-HDLを入力
10
ダブルクリック
Verilog-HDLの
テンプレートが
表示されるので
コードを入力
コード入力したら保存を忘れずに!
そろそろモジュール階層を
意識して記述しましょう
•  最後に各回路をマージするので、サブ・
モジュールにLEDGスライド回路を記述する
•  サブ・モジュールは別のVerilog-HDLファイルに
記述する
‒  可読性を上げるため
•  トップモジュールにべた書きは読みにくい!!
•  トップモジュールはFPGA外部の信号線定義のみに留める
‒  次の設計のときに読み込んで再利用可能
•  FPGAボードが変ってもインスタンス化して接続し直すだけで
再利用可能
11
Verilog-HDL
ファイルの
新規追加
12
新規作成をクリック
Verilog HDL Fileを
選択し「OK」
タイミングの生成
•  50MHz (DE0ボードのクロック)から25Hz
をどうやって生成?
13
25 Hz ということは, 1周期= 1 / 25 = 0.04 [sec]
25Hz	
ということは, 0.04 / 2 = 0.02 [sec] 毎にHigh と Low を切り替えればよい
50MHz	
 50 MHz ということは,
1周期= 1 / 50x106 = 0.02x10-6 [sec]
つまり, 0.02 / (0.02 x 10-6) = 100,000 クロック毎に
High と Lowを切り替えればよい
入力するVerilog-HDL
(LEDG_Slide.v)
14
入力するVerilog-HDL
(LEDG_Slide.v)
15
16
入力する
Verilog-HDL
(LEDG_Slide.v)
LEDG_Slide.vを入力したら保存
17
保存ボタンをクリック
ファイル名「LEDG_Slide.v」として「保存」
保存するとタブの表示が変ります
18
入力するVerilog-HDL
(DE0_TOP.v)
•  単にLEDG_Slideをインスタンス化するだけ
19
リセット信号は押しボタン[0]とした.
負論理であることに注意!
コンパイルを行うとプロジェクトに
認識されます
20
シミュレーションの設定
21
Project Navigatorで
「DE0_TOP」を右クリックし
「Settings」を選択
Simulation を選択
Tool name は「ModelSim-Altera」
Format は
「Verilog-HDL」
Time scale
は「1 ns」
テストベンチ・テンプレート生成
22
Processing -> Startメニューから
Start Test Bench Template
Writer を選択
テストベンチ
読み込み設定
23
Project Navigatorで
「DE0_TOP」を右クリックし
「Settings」を選択
Compile test benchを選択し,
Test Benches... をクリック
New... をクリック
テストベンチ設定
24
Test bench name は「DE0_TOP」
Top level module in test bench
は「DE0_TOP_vlg_tst」
テストベンチファイルを追加
テストベンチファイル読み込み
25
プロジェクトを置いているフォルダに
「simulation」フォルダができているので、
「modelsim」フォルダをクリック。
すると、テンプレート「DE0_TOP.vt」が
あるはず。
テストベンチ「DE0_TOP.vt」を選択
確認を行う
26
シミュレーションの設定確認
27
ModelSim起動
28
29
テストベンチ
を編集
1. Library タブをクリック
2. rtl_work を展開
3. DE0_TOP_vlg_tst を右クリックし
「Edit」を選択
30
タイム
スケールを
確認
入力するテストベンチ
31
32
ReCompile を実行し
シミュレーションの準備を行います
DE0_TOP_vlg_tst を右クリックし
「ReCompile」を選択
波形をWaveウインドウに追加
33
LEDG_Slideの信号を追加
34
Gen_CLK25Hzの信号を追加
35
表示を見やすくするため,
Divider を追加しましょう
36
右クリックして「Add」を選択し
「New Divider」を選択
コマンドラインに run 50ms を入力
37
Add Cursor をクリックしカーソルを追加
25Hz間隔になっているか
チェックしてみよう
FPGA上で動作を確認
38
25 Hzのクロックに同期して
4ビット毎に左右にスライド
次はカウントアップ回路を
設計してFPGA上で動作させる
39
40
•  ピン配置が面倒くさいので、デフォルト
のプロジェクトを読み込みましょう!
(DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの
プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM
Demonstrations 内の
"DE0_Top"フォルダの
ファイル全てを
C:¥verilog¥DE0_tutorial_9_CountUp_7SEG¥
内にコピー
DE0_TOP.qpfをダブルクリック
してQuartus IIを起動
41
Pin Plannerを開いてみると
ピン配置が終わっている!
Verilog-HDLを入力
42
ダブルクリック
Verilog-HDLの
テンプレートが
表示されるので
コードを入力
コード入力したら保存を忘れずに!
Verilog-HDL
ファイルの
新規追加
43
新規作成をクリック
Verilog HDL Fileを
選択し「OK」
タイミングの生成
•  50MHz (DE0ボードのクロック)から3Hzを
どうやって生成?
44
3Hz ということは, 1周期= 1 /3 = 0.04 [sec]
3Hz	
ということは, 0.04 / 2 = 0.02 [sec] 毎にHigh と Low を切り替えればよい
50MHz	
 50 MHz ということは,
1周期= 1 / 50x106 = 0.02x10-6 [sec]
つまり, 0.02 / (0.02 x 10-6) = 100,000 クロック毎に
High と Lowを切り替えればよい
自分で考えてみよう
入力するVerilog-HDL
(CountUp_7SEG.v)
45
入力するVerilog-HDL
(CountUp_7SEG.v)
46
47
入力するVerilog-HDL
(CountUp_7SEG.v)
CountUp_7SEG.vを保存
48
保存ボタンをクリック
ファイル名「CountUp_7SEG.v」として「保存」
入力する
Verilog-HDL
(DE0_TOP.v)
49
入力するテストベンチ
50
シミュレーションで動作を確認
51
FPGA上で動作を確認
52
3Hzのクロック
に同期して
4桁同時に
カウントアップ
最後に設計した各回路を
読み込んで1つの回路にする
53
54
•  ピン配置が面倒くさいので、デフォルト
のプロジェクトを読み込みましょう!
(DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの
プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM
Demonstrations 内の
"DE0_Top"フォルダの
ファイル全てを
C:¥verilog¥DE0_tutorial_9_DE0_Default¥
内にコピー
DE0_TOP.qpfをダブルクリック
してQuartus IIを起動
55
Pin Plannerを開いてみると
ピン配置が終わっている!
【準備】先程設計したVerilog-
HDLファイルをコピーしておく
2個のファイル「LEDG_Slide.v」「CountUp_7SEG.v」を
C:verilogDE0_tutorial_9_DE0_Defaultにコピー
56
Verilog-HDLを入力
57
ダブルクリック
Verilog-HDLの
テンプレートが
表示されるので
コードを入力
コード入力したら保存を忘れずに!
先程設計したVerilog-HDL
ファイルを読み込みましょう
58
右クリックして
「Settings ...」を
選択
「Files」を選択
「...」を選択
Verilog-HDLファイルの選択
59
先程コピーしたファイル
「CountUp_7SEG.v」
「LEDG_Slide.v」
を選択して「開く」を
クリック
60
【Tips】他のファイルをインスタンシェー
ション(呼出し)する場合は, コピペすると楽!
Verilog-HDLの記述 (DE0_Top.v)
「LEDG_Slide」をテキストエディタで
開いて, モジュール宣言部をコピペ
あとは信号を記述しましょう
61
同様にコピペ…
62
「CountUp_7SEG」を
テキストエディタで
開いて, モジュール宣言部をコピペ
記述するVerilog-HDL
(DE0_TOP.v)
63
今回設計した回路
64
DE0_Top
LED_Slide_inst
CountUp_7SEG_inst
CLOCK_50
RESET_N
LEDG
CLOCK_50
RESET_N
HEX_D
HEX_DP
CLOCK_50
BUTTON[0]
LEDG
HEX0_D
HEX0_DP
HEX1_D
HEX1_DP
HEX2_D
HEX2_DP
HEX3_D
HEX3_DP
【別ファイルで設計するメリット】
FPGAボードを変更しても使い回しできる!
65
Spartan III FPGA Boardに変更!!
(インスタンシエーションの信号名を付け替えるだけでOK)
LED_Slide_inst
CountUp_7SEG_inst
CLOCK_50
RESET_N
LEDG
CLOCK_50
RESET_N
HEX_D
HEX_DP
CLK50
PUSH[0]
LED_GREEN
HEX0_D
HEX0_DP
HEX1_D
HEX1_DP
HEX2_D
HEX2_DP
7セグが減っても増えてもOK
別ファイルで設計するメリット
はたくさんある!
•  FPGAボードが変わっても、インスタンシエーョ
ン時に信号線名を変えるだけでOK
•  回路を分割設計するので, 設計対象が小さくな
る.
‒ 設計がしやすくなる
‒ ミスも減る
‒ バグ検出も容易
•  設計毎に過去の資産として使い回しできる
66
コンパイルを行う
67
「保存アイコン」を
クリックして保存
「コンパイルアイコン」を
クリックして
コンパイルを行う
コンパイル後、このウインドウが
表示されればOK
コンパイル後, 読み込んだファイルが
Project Navigator に表示されます
68
FPGA上で動作を確認
69
3Hzのクロック
に同期して
4桁同時に
カウントアップ
25 Hzのクロックに同期して
4ビット毎に左右にスライド
まとめ
•  複雑な回路は並列化して状態遷移図をわける
‒ 設計が楽になるので、是非わけましょう!
‒ Verilog-HDLファイルを読み込む方法を学習
‒ 状態遷移図間の通信は次回で
•  所望のクロックを生成する方法を学習
‒ 入力周波数から所定の周波数を
生成できるようになった
•  ただし、誤差あり
•  入力周波数以上の周波数は生成できない…
 (実はFPGA内のある回路を使うとできます)
70
課題
•  下記のLEDGを指定した周波数で点滅する
回路を作成し, FPGA上で動作を確認
‒ LEDG[0]: 2 Hz
‒ LEDG[1]: 1 Hz
‒ LEDG[2]: 0.333 Hz
‒ LEDG[3]: 0.5 Hz
•  各LED表示回路毎にプロジェクトを作成し
て, 全てが完成したら1つのプロジェクト
に読み込むように設計しよう
71

More Related Content

PPTX
過量服薬の再発予防に向けた臨床疫学研究
PDF
JMDC Claimsデータベースとレセプト情報・特定健診等情報データベースを活用した臨床疫学研究の事例と留意点
PDF
バリデーション研究の入門
PDF
国際会議運営記
PDF
明日から読めるメタ・アナリシス
PPTX
2014 3 13(テンソル分解の基礎)
PPTX
対話テキストの自動要約
PDF
サブカルのためのWord2vec
過量服薬の再発予防に向けた臨床疫学研究
JMDC Claimsデータベースとレセプト情報・特定健診等情報データベースを活用した臨床疫学研究の事例と留意点
バリデーション研究の入門
国際会議運営記
明日から読めるメタ・アナリシス
2014 3 13(テンソル分解の基礎)
対話テキストの自動要約
サブカルのためのWord2vec

What's hot (20)

PPT
「診断精度研究のメタ分析」の入門
PDF
優れた問いを見つける(中京大学講演)
PDF
猫でも分かりたい線形回帰の自由度
PDF
構造方程式モデルによる因果探索と非ガウス性
PPTX
疑問の調べ方
PDF
熱傷についての基礎知識
PDF
コンピュータ将棋・囲碁における機械学習活用
PDF
書籍「計算社会科学入門」第9章 統計モデリング
PPTX
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
PDF
特徴選択のためのLasso解列挙
PPTX
K shapes zemiyomi
PDF
Learning Process-Based Therapy_Chapter 1 (Book Club Japan).pdf
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PDF
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
PPTX
対人的コミュニケーション研究・実践における行動分析学の可能性
PPTX
統計的検定と例数設計の基礎
PPTX
20170618論文読み会 伊藤
PPTX
自己対照研究デザインの概要
PPTX
20170608 srws第四回pubmed検索その2
PDF
敵対的生成ネットワーク(GAN)
「診断精度研究のメタ分析」の入門
優れた問いを見つける(中京大学講演)
猫でも分かりたい線形回帰の自由度
構造方程式モデルによる因果探索と非ガウス性
疑問の調べ方
熱傷についての基礎知識
コンピュータ将棋・囲碁における機械学習活用
書籍「計算社会科学入門」第9章 統計モデリング
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
特徴選択のためのLasso解列挙
K shapes zemiyomi
Learning Process-Based Therapy_Chapter 1 (Book Club Japan).pdf
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
対人的コミュニケーション研究・実践における行動分析学の可能性
統計的検定と例数設計の基礎
20170618論文読み会 伊藤
自己対照研究デザインの概要
20170608 srws第四回pubmed検索その2
敵対的生成ネットワーク(GAN)
Ad

Viewers also liked (19)

PDF
Verilog-HDL Tutorial (14)
PDF
FPL15 talk: Deep Convolutional Neural Network on FPGA
PDF
Verilog-HDL Tutorial (12)
PDF
Nested RNSを用いたディープニューラルネットワークのFPGA実装
PDF
FPGAX2016 ドキュンなFPGA
PDF
Verilog-HDL Tutorial (15) hardware
PDF
Verilog-HDL Tutorial (13)
PDF
Verilog-HDL Tutorial (11)
PDF
Verilog-HDL Tutorial (15) software
PDF
Naist2015 dec ver1
PDF
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
PDF
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
PDF
Altera sdk for open cl アンケート集計結果(公開版)
PDF
Tensor flow usergroup 2016 (公開版)
PDF
A Random Forest using a Multi-valued Decision Diagram on an FPGa
PDF
(公開版)FPGAエクストリームコンピューティング2017
PDF
(公開版)Reconf研2017GUINNESS
PDF
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
PDF
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Verilog-HDL Tutorial (14)
FPL15 talk: Deep Convolutional Neural Network on FPGA
Verilog-HDL Tutorial (12)
Nested RNSを用いたディープニューラルネットワークのFPGA実装
FPGAX2016 ドキュンなFPGA
Verilog-HDL Tutorial (15) hardware
Verilog-HDL Tutorial (13)
Verilog-HDL Tutorial (11)
Verilog-HDL Tutorial (15) software
Naist2015 dec ver1
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
Altera sdk for open cl アンケート集計結果(公開版)
Tensor flow usergroup 2016 (公開版)
A Random Forest using a Multi-valued Decision Diagram on an FPGa
(公開版)FPGAエクストリームコンピューティング2017
(公開版)Reconf研2017GUINNESS
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Ad

Similar to Verilog-HDL Tutorial (9) (20)

PDF
Verilog-HDL Tutorial (7)
PDF
Verilog-HDL Tutorial (3)
PDF
Verilog-HDL Tutorial (8)
PDF
Verilog-HDL Tutorial (6)
PDF
Verilog-HDL Tutorial (5)
PDF
高位合成でDeep learning
PDF
Verilog-HDL Tutorial (2)
PDF
Synthesijer.Scala (PROSYM 2015)
PDF
kagami_comput2016_11
PDF
2012研究室紹介(大川)
PDF
Synthesijer fpgax 20150201
PPTX
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
PDF
kagamicomput201711
PDF
Verilog-HDL Tutorial (4)
PDF
Synverll
PPTX
Androidとfpgaを高速fifo通信させちゃう
PPTX
自作RISC-VチップでLチカをやってみた
PDF
kagami_comput2015_11
PPT
Uart受信設計2013
PDF
コンピュータシステムの理論と実装1
 
Verilog-HDL Tutorial (7)
Verilog-HDL Tutorial (3)
Verilog-HDL Tutorial (8)
Verilog-HDL Tutorial (6)
Verilog-HDL Tutorial (5)
高位合成でDeep learning
Verilog-HDL Tutorial (2)
Synthesijer.Scala (PROSYM 2015)
kagami_comput2016_11
2012研究室紹介(大川)
Synthesijer fpgax 20150201
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
kagamicomput201711
Verilog-HDL Tutorial (4)
Synverll
Androidとfpgaを高速fifo通信させちゃう
自作RISC-VチップでLチカをやってみた
kagami_comput2015_11
Uart受信設計2013
コンピュータシステムの理論と実装1
 

More from Hiroki Nakahara (9)

PDF
FCCM2020: High-Throughput Convolutional Neural Network on an FPGA by Customiz...
PDF
ROS User Group Meeting #28 マルチ深層学習とROS
PDF
FPGAX2019
PDF
SBRA2018講演資料
PDF
DSF2018講演スライド
PDF
ISCAS'18: A Deep Neural Network on the Nested RNS (NRNS) on an FPGA: Applied ...
PDF
ISMVL2018: A Ternary Weight Binary Input Convolutional Neural Network
PDF
FPGA2018: A Lightweight YOLOv2: A binarized CNN with a parallel support vecto...
PDF
FPT17: An object detector based on multiscale sliding window search using a f...
FCCM2020: High-Throughput Convolutional Neural Network on an FPGA by Customiz...
ROS User Group Meeting #28 マルチ深層学習とROS
FPGAX2019
SBRA2018講演資料
DSF2018講演スライド
ISCAS'18: A Deep Neural Network on the Nested RNS (NRNS) on an FPGA: Applied ...
ISMVL2018: A Ternary Weight Binary Input Convolutional Neural Network
FPGA2018: A Lightweight YOLOv2: A binarized CNN with a parallel support vecto...
FPT17: An object detector based on multiscale sliding window search using a f...

Verilog-HDL Tutorial (9)