「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



A.C.さんにクロック同期設計を教えていただいて、
髭を剃りました。



綺麗、綺麗!

最終出力部分をこんな風に一旦FFに入れておいて、
クロック毎のエッヂで出力するかんじです。

-- calculate V-out
process (C_signal,Y_signal)
begin

Vout_tmp <= Y_signal + C_signal;

end process;


-- synchronizer
process (clock_in)
begin

if (clock_in'event and clock_in = '1') then

V_out <= Vout_tmp;

end if;

end process;


(不等号は全角に換えてあります)
で、それを使ってこの間のビデオ出力のVHDLを
もう一回うごかしてみたんですが、なんとなく
チラチラと信号が安定しないのが気になってました。

TINY2313のクロック源がブレッドボードで安定してない
ことが原因かなぁと思っていたんですが、どうやら
そうではなさそうな気が…

修正後のVHDLを動かしてみたあと、A.C.さんが
「3ビットDAC」のお話をされていたのを受けて、
出力する抵抗の下位から1個、2個と取り外していって
3ビットDACまで減らしてみたんですが、そしたら
なんとなく映像がクリアになったんですよね。

ということは、原因はCPLD側にある様な気が…

VHDLの内容は後でもうちょっとブラッシュアップ
する必要がある気がするな…

ちなみに3ビットDACにしてみた時の映像です。



例によって水色が緑っぽく見えますが、これは
ビデオキャプチャーのせいです。テレビには水色で
表示されます。5ビットDACとは若干発色が
ことなりますが、8色表示として変ではありません。

うーん、3ビットでも結構いけてるジャン!
4ビットについては5ビットとの違いが殆どわかり
ませんでした。もともと5ビットなんでいらなかった
ってことかな?

4ビットにするなら、フルアダーの回路規模ももう少し
小さく出来るだろうし、抵抗もカーボン皮膜で
充分じゃないかなぁ?




コメント ( 0 )




VHDLをシミュレーションすると、髭がいっぱい
生えちゃうんですよね。



この図はちょっと極端な例かもしれませんが、
グレーコードとか意識して出力できるような
信号じゃないので、どうしてもクロックとクロック
の間で髭が生えてしまう…

このての話はどう捉えて、どう対処していけば
いいのやら…

CPLDは比較的遅延が少ないからアレなんだけど、
FPGAは遅延がマチマチだろうから、そういう
場合にどう捉えればいいんでしょうねぇ?

特に、合成を行うたびに遅延の現れ方も変わってくる
だろうし…



コメント ( 5 )




この間のCPLDで作ったコンポジットビデオ表示の
VHDL。入力するビデオ信号の水平同期期間が少し
ズレる場合、実験の結果から見ると横方向に周期的
な歪みが生じて、映像が横に揺れる感じになって
しまうっぽいとわかりました。

こんな風に、映像がフニャフニャうねうねします。
多分、14.3Mhzの1クロック分に相当するのでは?

水平同期期間が63.4usからズレていることによって、
CPLD側のクロックとTINY2313側のクロックそれぞれ
の微妙なズレがこのうねうねとしたウネリを作り
出しているものと予想してみました。

では、水平同期期間をもう少し正確にしたらどうなるか。
それを実験してみました。TINY2313に入れたプログラム
を少し修正し、水平同期期間を64.3us→63.4usにして
みます。


こんな風になりました。一見してうねうねが少なくなって
いるのが判るかと思います。
ゼロにはなってませんけどね…。

というわけで、とりあえず63.4usに近づけることで
うねうねは軽減することは出来そうだけど、
一方、1クロック単位でタイミングを合わせないと
うねうねは消せそうに無いということが見えてきました。
(もっと言うと、14.3Mhzの4クロック単位で
 上手くシンクロすれば、うねうねは消える
 はずなんですが…)

この構成であれば、CPLD用のクロック源を
マイコン側にも流用することによって
プログラム上でも正確に910クロックで1ライン
描くといった感じの処理にすれば綺麗に表示
できる様な気がします。

でもいちばん簡単なのはやっぱり、CPLD内部
で映像信号自体を作り出すことだな…
そうすれば、クロックがずれるということは
(理論上)起らないので。

VHDLは一応できちゃったから、これをもとに
してもう少し大きなCPLD…たとえばトラ技
2006年4月号付録とか使って、簡単なカラー
映像の表示処理でもやってみればハッキリする
んだけどな…。



コメント ( 0 )




CPLDでカラービデオ表示をしてしまおうという
ネコ8。VHDLや回路図など一式アップしました。
http://picavr.uunyan.com/vhdl_composite.html

TINY2313のプログラムが単純にカラーバー的なものを
表示するだけなのでつまらないんですが、マイコン側
でちゃんと「動くRGB信号」を出力すれば、テレビ画面
にカラー映像が動いて表示されます。

まぁ、このVHDLをこのまま使うという人はあまり
いないと思いますが、他のモジュールと組み合わせて
使えばお手軽でそこそこ面白いことが出来るのでは?と
思っています。

なお、VHDLなどは、商用/非商用を問わず
好きなように使って頂いて構いませんが、何か不都合が
起きても私は責任を負わないということでお願いします。


今回これを作ってみた結果、幾つか気付いたことが
あったので、ページの最後に纏めておきたいと思っています。

ひとつは水平同期の間隔が規格とズレていることで映像に
揺れが出ていること。

あとはC信号の周波数は目下最大で14.3Mhzになっちゃってて、
入力するRGB信号をこの程度の細かさにしてしまうと、
C信号がマトモな波形にならなくなってしまいます。
NTSCの規格を考慮して、C信号がきちんと色信号として
認識されるようにしないと…。

Y信号の帯域は高いままでも良いんだけど、C信号は
3.58Mhzの「波」として認識されるように帯域を落とす
必要があります。デジタル的なLPFですね。
http://www.geocities.jp/kwhr0/hard/pc8001.html
こちらのサイトの情報によると、色信号は半波形分
(14.3Mhzでは2クロック分)で色が付くようなので、
その線で攻めたいところ。

などなど。
まぁ、今回はもう修正しませんが、今度何かを
作るときの注意事項として纏めておくのは大事かな…と。



コメント ( 2 )




CPLDやFPGAのクロック源について調べて
います。

XC95xxXLシリーズとかCoolRunner-XPLAなどは、
3.3V電源でも5V入力のトレラントがある
ので何の問題もないんですが、普通のCPLDや
FPGAは5V入力が許容されていないので、
電圧変換が必要になってしまいます。

で、いざオシレータを買いに行こうとすると
秋月などでは5V品ばかり置いてあるし、
品揃えも5V品の方が多いみたいです。

あんなコトやこんなコトをしようとすると、
色んな種類のオシレータが欲しくなるんです
けど、3.3Vは品揃えが…
特に14.31818Mhzがね…


というわけで、品揃えの良い5VをCPLDの
クロック源として使っちゃおうという作戦を
考えています。

普通はやっぱり↓
http://www.semicon.toshiba.co.jp/product/logic/faq/answer21.html
こんなふうに74VHCxxシリーズの電源を3.3V
にしておいて、こいつに5Vオシレータの
出力を繋ぐ方法。まぁ、正攻法ですね。

でもこの1回路だけのためにロジックIC1個
使うのは嫌だ…

というわけで、抵抗の分圧はどうかなぁ…

http://blog.livedoor.jp/k_yon/archives/51662613.html

http://blogs.yahoo.co.jp/gomisai/25240358.html
の様に、抵抗の分圧を使って繋げられない
モノかなぁ…

オシレータ自体は一種のICなので、出力端子
は普通のICと同じような出力バッファが内蔵
されているんじゃないかと思うんですが、
この出力電圧を抵抗で分圧し、約3.3Vにして
CPLDに入れたらどうなるか、という妄想です。

当然、インピーダンスが大きくなるので波形が
なまるとか、ファンアウトの数がべらぼうに
減りそうだとか、周波数が高くなった時に
ちゃんと働いてくれるのか?とか、抵抗の
分圧となると電流が流れる(電力を消費する)
けど、抵抗はどこまで大きくして良いのか?
とか、その辺りを実験できれば面白いかな、と。

もしくは、CPLD内部に2個(1個?)ほど
NOT回路を組んでおいて、
http://www.hdl.co.jp/oldrt/max_xosc.html
こんな風に3.3Vのままクリスタルを
発振させて使うっていう手も有るかも知れない
けど、やはり安定性とかって点では似たような
感じかな?


というわけで、方法としては4通りありそう。

(1)74VHCシリーズを使ってレベル変換をする
としたら、5Vオシレータ、74VHC244(例)、
そして5Vと3.3Vのレギュレータが必要。
部品代がちょっとねぇ…

(2)
3.3V電源とMOS-IC(74HCU04もしくは74AC04)
でクリスタルをドライブするとしたら、
3.3Vレギュレータ、クリスタル、MOS-IC
と部品台は安め。

(3)
CPLD内部にインバーター回路を合成して
それを発振回路に使うとなると、回路としては
74HCU04と近い感じになると思いますが、
どの程度安定するのかは未知数だし、そもそも
CPLDによって特性もマチマチとなりそう。
CPLDのリソースも消費しちゃうし。

(4)
5V用オシレータを分圧して使うとなれば、
5Vと3.3Vのレギュレータ、5V用の
オシレータ、抵抗2個が必要になります。
そもそもクロック源としてOKなのかどうか…


といった感じでしょうか。
あとは実験あるのみなんですが、個人的には
(4)か(2)あたりで安定して動いたら
嬉しいな。
(3)は便利なんですが、CPLDによって
動いたり動かなかったりするだろうから、
実はあまり嬉しくないかも…


時間が出来たら実験してみよう…



コメント ( 2 )



« 前ページ 次ページ »