Upload
hiroki-nakahara
View
66
Download
1
Embed Size (px)
Citation preview
2
• ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM ”Demonstrations”内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_5¥ 内にコピー
5
いよいよ順序回路編です • ほぼ全ての実用的な回路は順序回路です • 順序回路の記述法をマスターすることが、FPGAを使いこなせるかどうかのポイント
• 頑張って理解しましょう! ‒ とはいえ、言語ですから 「たくさん書いて慣れろ」
6
順序回路とは? • 組合せ回路の出力:現在の入力 • 順序回路の出力: ‒ 現在の入力+現在の状態 (現在の状態=過去の入力)
• つまり、順序回路は現在と過去の 入力に応じて出力する回路といえる • 過去の入力を記憶 状態を記憶
• 状態を記憶する記述!?
組合せ 回路
組合せ 回路
記憶 素子
外部 入力
外部 出力
外部 入力
外部 出力
状態 出力
状態 入力
組合せ回路
順序回路
9
解説 4ビット 加算器
4ビット レジスタ
レジスタ宣言 レジスタを宣言します
クロック信号の 立ち上がり
リセット信号の 立ち下がり or
(または) に always@ 以下の 処理が行われる
10
解説(続き) always@( クロック信号 or リセット信号) begin
if( クロック信号 )begin (レジスタ初期化); end else begin (順序回路の処理); end
end
always@() は定型文で記述
レジスタに代入するときは 「 <= 」を使う!(ノンブロッキング代入)
左辺はレジスタ値にする
12
シミュレーション結果の確認
リセットがかかるまで 値が決まらないので 出力は不定
リセット中は 初期値が出る
リセット後は クロックの立ち上がりで カウントする
LEDG[3:0]を COUNT_VALUEに纏めた
14
原因の考察 • 基準クロック 50MHz に同期 • LEDの点滅が早すぎる!
4ビット 加算器
4ビット レジスタ
クロック (50MHz)
考えてみよう: 50MHz のとき 点滅の間隔は ____[nsec]である.
リセット信号
17
右から左に流れるLED • 以下の動作をする回路を記述せよ ‒ ただし、LEDが切替るのは1秒間隔とする
?
4ビット レジスタ
クロック (50MHz)
どこを書き換えればよいか? リセット信号
20
課題1 ただしLEDの点灯間隔は全て1秒とする 1. LEDを点滅させよ 2. スライドスイッチがOFF: ダウンカウンタ スライドスイッチがON: アップカウンタ となる回路を作成せよ
3. スライドスイッチがOFF: LEDが右→左 スライドスイッチがON: LEDが左→右 となる回路を作成せよ