デジタル回路設計の一般常識
ここでいうデジタル回路設計とはFPGA/ASICの設計のことを想定しているのだが、それができるようになるためにはどんな知識が必要だろうか。
◇
いちばん基礎的な知識は、
・ フリップフロップや組合せ回路の動作
・ ブール代数、真理値表、状態遷移図、タイミングチャートの書き方
・ 部品となる基本回路(各種カウンタ、マルチプレクサ、加算器、RAM)の動作
・ HDLの文法
・ 論理合成できるRTL記述の書き方
・ シミュレータやコンパイラなどのツールの使い方
といったところで、この範囲ならば市販の本でも勉強できる。しかし、実際のアプリケーション、すなわち画像や音声や符号などの信号処理や、通信の制御や、汎用プロセッサといったものを、デジタル回路で実装しようとすると、アプリケーションの知識と上記の基礎知識だけではギャップがあって、たぶん無理である。
◇◇
通常はお手本となる設計が存在していて、それを理解することでギャップを埋めていると思うが、以前から、アプリケーションに依存しない共通的な知識もあるような気がしていて、一般常識としてまとめられたらというのが本稿を書いたきっかけである。演算回路については、数式やプログラムで仕様を明確に書けるし、実装自体もFPGAツール付属のIPで結構できてしまう。一方、制御回路については、ソフトウェアでも使う排他制御や同期化の概念、ハードウェア固有のクロック同期やパイプライン制御の概念など、一般常識といえそうなものはあるが、仕様の書き方や用語も定まっておらず、実装も人間がやるしかないので、こちらの話題を書いてみたい。