初めてでも使えるVerilog HDL文法ガイド ―― 記述スタイル編

小林 優

2.4 alwaysによる順序回路

 順序回路とは,値を保持するフリップフロップやラッチを含む回路です.alwaysを使って記述します.組み合わせ回路とは記述スタイルが若干異なります.

● ラッチ(レベル・センシティブ)

 ラッチはリスト4のように記述します.@*が使われているので,入力GとDのいずれかが変化したとき,begin~end内を実行します.一見組み合わせ回路の記述と同じですが,値を保持するラッチになります.動作を説明します.

リスト4 ラッチの記述

 内部のif文により,

  • G=1 ... DからQへデータが筒抜け
  • G=0 ... Dが変化してもQは変化しない

となり,値を保持します.

 組み合わせ回路になるかラッチになるかは,じつは紙一重です.組み合わせ回路を記述したつもりでも,値を保持するような記述の場合,論理合成ツールは忠実にラッチを生成してしまいます.

フリップフロップ(エッジ・センシティブ)

 Dフリップフロップの記述例をリスト5に示します.クロックCKの立ち上がりでデータを取り込み,リセットRBが'0'のときリセットします.リスト5(a)は同期リセット付き,リスト5(b)は非同期リセット付きです.

リスト5 リセット付きDフリップフロップ

 同期リセット付きでは,出力が変化する条件はCKの立ち上がり(positive edge)だけなので,always文のイベント式は(posedge CK)だけです.そしてRBが'0'ならリセットし,'0'でなければD入力の値をQ出力に伝えます.

 一方,非同期リセット付きでは,RBの立ち下がり(negative edge)もイベント式に含まれ,CKとは非同期にリセットします.結局,同期か非同期の違いは,イベント式に含むか含まないかの違いだけです.

 

● 代入記号は2種類ある

 値を保持する変数には,=と<=の2種類の代入記号を使うことができます.=は順次処理向き,<=は同時処理に向いた代入記号です.一般に,順序回路の記述では<=,組み合わせ回路の記述やテストベンチでは=を使います.

 

● カウンタ,シフト・レジスタ

 フリップフロップの応用として,カウンタとシフト・レジスタの例を示します.リスト6(a)はロード優先のイネーブル付きカウンタです.ロード信号LDが'1'ならパラレル・ロードし,イネーブル信号ENが'1'ならカウント・アップします.リスト6(b)はイネーブル付きのシリアル-パラレル変換シフト・レジスタです.連接演算を使ってシフト動作を実現しています.

リスト6 カウンタとシフト・レジスタ


 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日