One-hot
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を使うことで、他のエンコーディング方法を使った場合よりも速いクロック周波数で状態機械を動作させることができる。