「取りあえず手を動かす」では通用しない
表示回路では、講師の方に回路のブロック分けや信号名(変数名)まで決めていただき、内部の記述を学生がそれぞれのやり方で行いました。キャプチャー回路では、外部とつながるAXIバスやカメラ、CPUなどの仕様は明確にされていますが、内部のブロック分けやどういった信号を用いるかについては、すべて学生が設計します(AXIバスについては「表示回路」の回を参照)。
我々学生は、どうしても「設計は後にして、取りあえず手を動かしたい!」と考えがちです。実際、通常の授業で出る課題程度の プログラムであれば、取りあえず作ってみてから徐々に修正するような方法でも何とかなります。しかし、H/Wの設計はそう簡単にはいきません。H/W記述言語(HDL:Hardware Description Language)ではバグの検証に多大なコストが掛かるため、堅実に進める必要があります。
そこで、キャプチャー回路をどのようなモジュールに分けるか、どういった信号が必要か、ステートマシンはどう動かすかなどを順番に考え、最終的には自分の理想とするタイミングチャートを書き出すところまで事前に設計しました。ただし、素人が完璧な設計などできるはずもなく、実際に取り掛かってみると「不必要な信号がある」「意図したタイミングでは動かせない」など不十分な点が次々と浮き彫りになってきました。 それでも、設計せずに取り掛かっていたらもっと大変なことになっていたと思います。初めに設計することで、つくり上げるイメージが具現化されたので、取り掛かってからの改善点も次々と思い浮かびました。
ここで、簡単にキャプチャー回路の仕様を説明します。キャプチャー回路の主な仕事は、カメラからYUV422*という形式で送られてくるデータを表示回路が処理するRGB形式に変換して主記憶に格納することです。主記憶に保存するフレームの解像度はVGA(640×480)、XGA(1024×768)、SXGA(1280×1024)の3種類ですが、カメラから出力されるフレームの解像度はVGAとSXGAのみなので、XGAはSXGAをトリミングすることで実現します。さらに、表示回路と同様にレジスター回路を搭載し、CPUとやり取りをする機能も搭載します。