VHDLのお勉強が少し進んだことに気をよくして、
課題だった「CPLDでNTSCカラーコンポジット」
の生成回路を考えてみました。
回路と言っても、いきなりVHDLじゃなくて、
スキームを図にするところから。
こんな感じかな…と。
CPUからの入力信号は垂直同期、水平同期、RGB。
ビデオへの出力はY信号、C信号。
S端子用の信号というわけですが、2つを単純に足し
合わせればコンポジット信号になります。
Y信号は、RGBから作り出す輝度信号と、垂直/水平
同期信号を合成するだけなので、単純に入ってきた信号
から単純な計算でOK。結構単純なprocess文で
できちゃうのではないかと。
まぁ、RGBから輝度に変換する計算式の表現が
少し規模的に懸念?
出力はカラー4ビット、シンクロ1ビットの5ビットで
足りるのでは無いかと。
C信号は2つの信号を含んでいます。burst信号と
sub-carrier信号です。
14.3Mhzで1ラインは910クロックに相当し、
1ライン分は910カウントできればよいから、
10ビットのカウンタを設けます。
burst信号は0度、90度、180度、270度の4パターンを
連続して出力できれば良いので、カウンタを0~3の間で
カウントさせておいておきます。
これらのカウンタは、水平同期でリセットします。
そしてこのカウンタ値を見ながらラインの冒頭で
burst信号を出力、その後はRGB信号の有無によって
sub-carrier信号を生成します。
C信号は、例の↓このページによると
http://www.geocities.jp/kwhr0/hard/pc8001.html
多分4ビットデータで足りるので、4ビットで
出力する方向で考えます。
入出力ピンが合計14本、レジスタが12ビットという
感じなので、これだけなら多分XC9536XLでも
入りきるはずだと思うんだけどなぁ。
というか、できれば8色RGBじゃなく、せめて
RGB各2ビットか3ビット欲しいので、これが
動いたらあとで多色化にも挑戦の予定。
その時に入りきるのかどうか…
そうそう。そもそもY/C分離で出力するんではなく、
完全にコンポジットにしてもいいですよね。
それでも8色出力程度ならレジスタ消費が少し増える
程度じゃないかな。
4~5ビット程度、最大でも9ビット程度?
そうそう。フィールド数をカウントするカウンタは
無いので、4フィールドシーケンスによる縦縞消去は
できません。でも気にしないことにします。
多分問題出るのは白黒テレビだけだろうし。
(カラーでも出るのかな???)
4フィールドシーケンスも実現したい場合は…
何とか頑張ってフィールド数をカウントしてください。
このスキームなら垂直同期信号は全然弄ってないので、
多分インターリーブでもプログレッシブでもどちらも
OKだと思うんですが、確信は持てません。
まぁ、多分大丈夫だけど。
一番厄介なのは、RGB信号とburst信号から作り出す
sub-carrier信号の計算式。8色RGBでさえ
8×4=32パターンあるので、if文が相当
大きくなりそう。入りきるかな?
配列とか上手く使えば可読性は良くできそうだけど、
規模はちょっと???だな。
という感じで作っていって、いずれRGB各2~3
ビットまで拡張すれば、マイコンと繋ぐ範囲では
必要十分じゃないかなぁ。それ以上になると、
マイコン側がRGBの全信号を一度に(1命令で)
出力することはできないだろうし。
ひとまずブレッドボード上で、8色でもいいから
カラーコンポジットが出せるようになれば、あとは
そんなに難しくはないでしょ。
S出力がいいかな?コンポジット出力がいいかな?
どちらにしても、録画やビデオキャプチャには
用は足りるはずなんだけど。
|