aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

Everything You Wanted to Know About LFSRs (But Were Too Afraid to Ask)

 同じくEEJournalの記事というかエッセイより。Linear Feedback Shift Registerについての薀蓄:)

www.eejournal.com

例えば、3ビットのレジスタがあり、そこに2進数で100という値をプリロードするとします。おそらく最もシンプルな実装は、最終段のSIPO出力を直接入力に接続することです。この場合、レジスタにクロックを供給すれば、100、010、001、100…というシーケンスが生成されます。これはリングカウンタと呼ばれます。

ここで、SPIOに000をプリロードし、最終段のSPIO出力の反転版を入力に戻すと仮定します。この場合、レジスタをクロックすると、000、100、110、111、011、001、000…というシーケンスが生成されます。これはジョンソンカウンタとして知られています( 「ジョンソン10進カウンタを発明したのは誰か(そしてなぜ発明したのか)」も参照)。

 

 シフトレジスタフィードバックループから話が入って行きますがジョンソンカウンタと言えばステートマシンのベースカウンタとワタシ的には捉えてしまいます(懐かし)。ステートマシンのベースカウンタとしてのジョンソンカウンタの効能についてはCQ出版からIBMの小林さんが書かれていた「ASICの論理回路設計」が当時の私のスキルアップに大変役立った名著でありました(深謝):

 

 

本書を更に解りやすくというか下界向け(言葉が適切か否かは別にして、実用的と言うか:)バージョンとしてのPLDの論理回路設計本も熟読させて頂いておりました↓

 

当時(1990年代半ば頃)はGALが普及し始めた頃で今で言うFPGA(当時はXlinixはLCA:Logic Cell Arrayと呼んでいた)の時代だったと記憶しております。XC3000/3100から4000の時代で上記書籍は当時開発していたチップのステートマシン(まあ、メモリコントローラな訳ですが)開発に非常に参考になりました。

 ジョンソンカウンタベースとすることでスタティックハザードから開放され、〇〇の一つ覚えのSFのタップをデコードしてタイミング生成・・・といった手法を使わず求める状態を直接デコードして長めのステートにはパスカウンタを設けるといった構成もジョンソンカウンタベースで効率的に(まあ、自己満足ですが)構成し、スケマ(当時はHDLはAbelしか知らなかったので)で入力してネットリストを生成しXACT(懐かし)でAPR(なつかし)しておりました。

 まあ、そういう訳で(すみません、昔の事は不思議と覚えているもので・・・)LFSRの中でもジョンソンカウンタには一際思い入れがあるのでありました。

 話を戻して:

私にとって本当に面白くなるのは、複数の出力(「タップ」)を単純な論理関数(XORなど)を通して入力にフィードバックする時です。その結果得られるのは線形フィードバックシフトレジスタ(LFSR)で、一見ランダムに見えるものの実際には予測可能で、一定の長さごとに繰り返されるビット列を生成します。こうした小さなスカンプは、疑似乱数生成、スクランブル、エラーチェック(CRCなど)、暗号化アプリケーションなどでよく使われます。

引用おわり。ここからが本記事の本番なのですが上述の如くステートマシンのベースカウンタが主用途だったので殆ど使用した事は無かったのですが・・・割と最近道楽でステートマシンのベースカウンタにジョンソンではなくグレイコードを用いる様になりました。

 これはグレイコードの特徴であり(ジョンソンの弱点でもある)どんなステートをデコードしてもスタティックハザードが出ないというご利益を賜りたかった(まあ、当方のステートのデコードが下手だった)為です。

 verilogでステートマシンを記述する際には(記述、手法にもよりますが)ベースカウンタはステート毎の状態を割り振れば(定義すれば)どんなカウンタでも実現可能なのでそれならばグレイコードにしようかと(以下略)。

 昨今では5V系(トレラントは存在する様ですが)のFPGAは絶滅状態でCPLDの中で比較的規模の大きい物はXもAも流通在庫のみでXはほぼ絶滅状態。Digi-key等で検索するとM(旧A)のCPLDぐらいしか5V品ではヒットしない様なので(というかPLD,CPLDは徐々にロストテクノロジ化しつつある様な・・・集積度が低すぎて製品には向かないというか・・・時代を感じます:)、時代の流れとはいえ気がつけば某アマチュア無線真空管オーディオマニアの如き過去に(のみ)生きる変な人になっている自分に気付くのでありました(老後であればまた楽しからずや、でありましょうか:)。

 顛末としてはEEJournalの記事を肴にして脳内時間遡行を刹那楽しんだのでありました(当方の自己満足にお付き合い頂き有難うございました)。