SSブログ

Quartusで遊ぼう (4) [プログラム三昧]このエントリーを含むはてなブックマーク#

WS000219-320.png

前回の「Quartusで遊ぼう (3)」で4値のアップ・ダウンカウンタを作成しました。 さて、このカウンタで論理合成後に使われているフリップ・フロップは、何個(何ビット)でしょうか?

ワン・ホット・コード

WS000177.png

図のテクノロジ・マップを見てわかるように、正解は4個です。 HDL では、2ビットのレジスタに4種類のコードをキレイに割り当てて、ジョンソン・カウンタを作らせようとしていました。 ところが、出来上がったのは、ワン・ホット・コードのカウンタ。 ワン・ホット・コードとは、ステート・マシンの個々の状態に対して一つのフリップ・フロップを割り当てる手法です。 このため、同時には単一のフリップ・フロップ出力がホットになる(アサートされる)ので、この名前で呼ばれています。

ワン・ホット・コードの利点は、状態コードをデコードする論理が不要なので、デコード回路が縮小できることです。 また、欠点は、フリップ・フロップの数が増えることです。 CPLD の場合には、デコード回路とフリップ・フロップの比率がはじめから決まっているので、双方を天秤にかけることになると思います。

ジョンソン・カウンタにしておくれ

ワン・ホット・コードなんか使っていられるか。 という向きには、 "syn_encoding" という属性を付けて、別のコーディングを使うこともできます。 以下の例では、ジョンソン・カウンタで構成させています。

  :
  reg           q;
  // synthesis syn_encoding = "johnson"
  reg[1:0]      st;
  
  always @(posedge clk or negedge reset_b) begin
    if (!reset_b) begin
  :

出来上がった状態遷移表がこれです。 もうひとつ、納得できない割り当てだなあ。

ST_0   0  0
ST_1   1  0
ST_3   1  1
ST_2   0  1
WS000176.png

設定選択肢には、 "gray" (グレイ・コード)や "compact" (最小ビット数)なんてのもありますが、4状態の場合にはどれもジョンソンと同じになってしまうので、ここでは省略。 論理合成ツールが信用できない場合には、 "user" を指定すると、 HDL に記述したとおりのコードを割り当ててくれます。

論理合成時の設定を変えることもできる

逐一、論理合成の方法を指定していられないという場合には、すべての論理合成で使用される設定を変更することも出来ます。

まず、 Task ペインの "Compile Design → Analysis & Synthesis → Edit Settings" から "Analysis & Synthesis Settings" ダイアログを開きます。 さらに、そのダイアログの "More Settings..." ボタンで "More Analysis & Synthesis Settings" ダイアログを』開きます。 このダイアログで "State Machine Processing" を変更します。 深すぎだよ。

初期設定は、 "Auto" となっています。 マニュアルによれば、 "Auto" を設定すると、「FPGA の場合にはワン・ホット・コードを使い、 CPLD の場合には最小ビット数を使う」と書いてあります。 あれ? 何で、ワン・ホット・コードを使ってくれたんだろう?

ワン・ホット・コードの問題点

ワン・ホット・コードは、 FPGA などに適用すると、論理が簡単になるという利点はあるのですが、状態遷移のときに必ず二つのフリップ・フロップが状態を変えます。 そのため、ステート・マシンの状態をデコードして出力を得るような場合には、状態遷移時にグリッチが発生する可能性があります。 また、他の設定でもヘタなコード割り当てをすると同じ問題が起こります。 次回は、シミュレータでグリッチが発生する様子が観測出来るか試してみます。

参考サイト

Quartus II Development Software Literature

ステート・マシンの選択肢に関する説明は、"Volume 1: Design and Synthesis → Section III. Synthesis → Chapter 8. Quartus II Integrated Synthesis" の "State Machine Processing" (page 8-35) と "Manually Specifying State Assignments Using the syn_encoding Attribute" (page 8-36) に記述があります。

参考文献

トランジスタ技術 (Transistor Gijutsu) 2008年 12月号 [雑誌]

トランジスタ技術 (Transistor Gijutsu) 2008年 12月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/11/10
  • メディア: 雑誌

付録 : 「Quartus で遊ぼう」索引

Quartus で遊ぼう (1)
Altera の EPM2210F324 が話題になっているので、私も使ってみました。 ただし、ハードウェアは購入していないので、ソフトウェアで遊んだだけです。
Quartus で遊ぼう (2)
「Quartus で遊ぼう」の二回目は、組み合わせ論理回路の合成を調べます。
Quartus で遊ぼう (3)
論理合成後の状態を表示してくれるツールを探しました。
Quartus で遊ぼう (4)
前回作成した4値のアップ・ダウンカウンタで論理合成後に使われているフリップ・フロップは、何個(何ビット)でしょうか?
Quartus で遊ぼう (5)
今回は、ワン・ホット・コードを使ったステート・マシンでグリッチが発生すかどうかを観測します。
Quartus で遊ぼう (6)
トランジスタ技術誌に「リセット信号生成回路」のHDL記述がありました。 この記述は、ちょっともったいないですよ。
Quartus で遊ぼう (7)
トランジスタ技術誌に書かれていたインストラクション・デコーダは、3項演算子が連なっていました。 もっと、別の書き方はできないかな。
Quartus で遊ぼう (8)
Verilog の代入には、 <= と = の二種類が使われています。 これって、何が違うんでしょうかね。
Quartus で遊ぼう (9)
2進数の足し算で、キャリーを取り出したい時、どうしましょうか。
Quartus で遊ぼう (10)
作らせてみました。 リップル・キャリーカウンタ。
Quartus で遊ぼう (11)
先ごろ、請求していた"DVD"が届きました。

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。