たまには同期式リセットのことも思い出してあげてください

前回まではお決まりのパターンに従って順序回路を設計した。
今回はリセット信号の扱いについて述べる。
前回まではalways@()のイベント式にリセット信号を加えていたが、

always@( posedge clock)begin
  if( reset == 1'b1)begin
    (記憶素子の初期化)
  end
    (...以下は順序回路の記述)

このように記述してもよい。
この記述は「クロックの立ち上がりにリセット信号がONになっていれば初期化」を実行する。
これは「クロック同期式リセット」という。
一方、

always@( posedge clock or posedge reset)begin
  if( reset == 1'b1)begin
    (記憶素子の初期化)
  end
    (...以下は順序回路の記述)

この記述は「クロックの立ち上がりに関係無く、リセット信号がONになれば初期化」を実行する。
これは「クロック非同期式リセット」という。

それぞれ長所短所がある。

  • 同期式リセット
    • 長所:うまく書けると回路がコンパクトになる
    • 短所:初期状態にするまでが大変
  • 非同期式リセット
    • 長所:常に初期状態になるから設計が楽
    • 短所:回路が大きくなる

現在は「少々回路規模が大きくなっても早く設計を終わらせる」というのが主流なので(参考:Time To Market,DTF,DFM)
非同期式リセットを使うことを強くお勧めする。
一度職人の方が設計された同期式リセットの記述を読ませていただいたことがあるが、
とても回路がコンパクトになっていた。ただし、記述を理解するのが大変だった(-_-;)
どうしてもリソースが足りないときに人手で設計することもあるらしい。。

初心者は素直に非同期式リセットを使ってください…。

順序回路は組合せ回路を記述できる!?【Altera DE0】へ進む
Verilog入門へ戻る


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-04-15 (金) 16:42:53 (2265d)