二進法 グレイコード 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)である状態を指す。類似のものとして、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を使うことで、他のエンコーディング方法を使った場合よりも速いクロック周波数で状態機械を動作させることができる。Xilinx. "HDL Synthesis for FPGAs Design Guide". section 3.13: "Encoding State Machines". Appendix A: "Accelerate FPGA Macros with One-Hot Approach". 1995.
欠点 他のエンコーディング方法よりも多くのフリップフロップが必要であり、PALでは現実的ではない 起こりうる状態の多くが不正な状態ということになる
参考文献
関連項目 一進法
XORゲート