昨日絵に描いたNTSCのカラーデコード処理のスキーム
をVHDLに書き出して見ました。
一部不要な機能があったり(burst信号用の内部カウンタ)、
必要な機能が書いてなかったり(クロック入力端子)と、
不備はあったものの、なんとなくそれっぽい感じに
できました。
水平同期信号については、その立下りからバースト信号の
開始までをカウントしないといけないんですが、
クロック入力のエッジと水平同期信号のエッジを
両方いっぺんに使うことはできないよ、と警告が出て
しまうので、仕方なく水平同期信号はひとまずHIGHか
LOWかを判別するような条件文に修正。
…タイミング計算がちょっとズレちゃうんですが、まぁ
その程度はあまり映像には影響しないはず。
要は、burst信号(の延長上)とsub-carrierの位相さえ
ずれてなければok。
シミュレーションかけてみた結果、タイミングのわずかな
ズレに目をつぶれば、あとは出力内容的におおよそ想定
どおりの動作をしてくれました。
ピンアサイン後のフィッティングも特に問題なし。
・Macrocells: 23 /36 ( 64%)
・Product Terms: 117 /180 ( 65%)
・Function Block: 34 /108 ( 31%)
・Registers: 10 /36 ( 28%)
・Pins: 15 /34 ( 44%)
といった感じ。XC9536XLでも十分入ってしまいます。
RGB各2ビットまで拡張できるかなぁ?どうだろう?
入力は3ビット、出力も数ビット増える程度なんだけど、
内部の回路が入りきるかどうか…
とりあえず、8色RGBならもうゴールは間近。
c-sync信号、Y信号の処理はもう完成したけど、
残作業はC信号。
処理内容・タイミング的にはもうsub-carrier÷4
の各出力タイミングで色に合わせたビットパターン
がきちんと出せるようになっていますが、その
ビットデータ自体は現状ロジックの機能確認用の
テストパターンなので、これから実際に使う信号の
アナログ値計算とビット値への変換をちゃんと
やらないと… 手計算で行列変換やらないと…
ここらへんは抵抗値とも絡む話になるので、
CPLDの外部の回路とも一緒に考える必要が
あるんですが、どうせ8色RGBだし、大雑把に
済ませようと思います。
要は、Cb、Crに変調かける角度(位相)が
ずれていなければ色はちゃんと出るはず。
そうそう。リソースは多少余っているから、
S信号だけじゃなくてコンポジット出力も
入れられるといいな。
あと、if文とcase文の巨大な塊になっている
ので、もう少し可読性を良くするために配列とか
つかって整理したいな。
|