One-hot
二進法 | グレイコード | One-hot |
---|---|---|
000 | 000 | 00000001 |
001 | 001 | 00000010 |
010 | 011 | 00000100 |
011 | 010 | 00001000 |
100 | 110 | 00010000 |
101 | 111 | 00100000 |
110 | 101 | 01000000 |
111 | 100 | 10000000 |
one-hot (ワン・ホット) は、デジタル回路のビット列において、1ビットだけHigh(1)であり、他はLow(0)である状態を指す[1]。類似のものとして、0が1つだけで、他がすべて1であるようなビット列をone-cold(ワン・コールド)と呼ぶことがある。
応用
[編集]one-hotエンコーディングはしばしば状態機械の状態を表すのに用いられる。二進法やグレイコードを使うときにはその状態を決定するためにデコードが必要だが、one-hotを使うときには不要である。というのも、one-hotではビット列のn番目のビットがHighであればn番目の状態を表していることになるからである。
15個の連続する状態を持つリング・カウンタは状態機械の一例である。one-hotでこれを実現するには、15個のフリップフロップを一列に並べて、それぞれのフリップフロップのQ出力が次のフリップフロップのD入力に入るようにする。ただし初段のフリップフロップのD入力には終段のフリップフロップのQ入力が入るようにする。最初のフリップフロップは1番目の状態を表し、2番目のフリップフロップは2番目の状態を表す。それ以降も同様で、15番目(終段)のフリップフロップは最後の状態を表す。状態機械をリセットすると、最初のフリップフロップには「1」が、それ以外のフリップフロップにはすべて「0」がセットされる。クロック信号の立ち上がりによって、Hotビット(1であるビット)が次のフリップフロップに移動する。このようにしてHotビットは15番目のフリップフロップまで移動し、その次には最初のフリップフロップに戻る。
アドレス・デコーダは二進数またはグレイコードをone-hot表記に変換する。
プライオリティ・エンコーダはone-hot表記を二進数またはグレイコードに変換する。
他のエンコーディング方法との違い
[編集]利点
[編集]- 状態の決定に必要なコストが少ない。1つのフリップフロップにアクセスする定数コストで済む
- 状態遷移も2つのフリップフロップにアクセスする定数コストで済む
- 設計と修正が容易である
- 不正な状態を検出するのが容易である
- FPGAの豊富なフリップフロップを活用できる
one-hotを使うことで、他のエンコーディング方法を使った場合よりも速いクロック周波数で状態機械を動作させることができる。[2]
欠点
[編集]- 他のエンコーディング方法よりも多くのフリップフロップが必要であり、PALでは現実的ではない
- 起こりうる状態の多くが不正な状態ということになる
参考文献
[編集]- ^ Harris, David and Harris, Sarah. Digital design and computer architecture (2nd ed. ed.). San Francisco, Calif.: Morgan Kaufmann. p. 129. ISBN 978-0-12-394424-5
- ^ Xilinx. "HDL Synthesis for FPGAs Design Guide". section 3.13: "Encoding State Machines". Appendix A: "Accelerate FPGA Macros with One-Hot Approach". 1995.