2002.11.22
汎用発振器の実験
時間切れで尻切れ、読みづらいですが...内容はおもしろいですよ。
概要
SpartanIIで遊んでいると、いろいろな案が浮かんできますが、メモリと共にちょっと困るのが、クロック源です。
SDRAMを使うなら100MHzや133MHz,USBなら48MHzや24MHz,ビデオ信号なら14.318MHzや27MHzなどアプリケーションによって必要な周波数は色々です。
これらは外部から供給する必要がありますが、アマチュアユースでは、3.3V動作のクリスタルオシレーターは手軽に購入できませんし、特殊な周波数の場合になれば、なおのこと入手難です。
現在、PCなどではX'talOSC、VCO、PLLを組み合わせて任意の周波数を作り出す方法が主流です。
通常、VCOやPLLは専用ICを使用しますが、個人で1〜2個入手できるものではありません。
そこで、SpartanIIの力と技(裏技)を使い、専用IC無しで任意の周波数を作ってみようというものです。
必要な回路構成と説明
●クリスタル発振器
●VCO
●PLL
●周波数カウンタ
動作確認の為に搭載してあります。
クリスタル発振器の一定カウントする間に、VCO発振器が何パルス発生するかを測定する単純なものです。
集計型のため、短時間内の周波数安定度などは測定できません。
外付け部品と回路図
HDL製XSP005に、追加回路を取り付けて構成しています。
追加回路図はこれだけです。
回路の詳細説明は、各ブロックの見出しをクリックしてください。
SpartanIIデザインソース
XSP005用のソースファイルはここです。
ファイル構成
−top.v : ポートタイプ定義、X'talOSC,VCO,PLL制御などのロジック
−pll.v : PhaseDitect回路、周波数比較器も入っている
−freq_mon.v : 周波数モニタ
−hex4_led.v : 7セグメントLEDデコーダー、表示に使う
−top.bit : コンパイル済みビットストリームファイル
−top.ucf : ピンアサイン
動作仕様
7セグメントLED
現在のVCO周波数を0.5秒おきに集計/表示する。
通常10KHz〜10MHzの桁まで表示、SW5を押すと100Hz〜100KHzの桁を表示
SW5を押すと、X'talOSCのクロックを測定します。
LED2 : 周波数モニタ更新毎にトグル
LED3 : VCOがロックしたとき消灯
LED4 : VCO周波数が6%以上低い時点灯
LED5 : VCO周波数が6%以上高い時点灯
LED6 : SW4を押したとき点灯
LED7 : SW3を押したとき点灯
LED8 : SW2を押したとき点灯
LED9 : SW5を押したとき点灯
VCO周波数(分周比)の選択
なにもしない=25MHz
SW4押している間=50MHz
SW3押している間=33MHz
SW5を押すと、VREF端子が強制放電されます。
参考文献
・CQ出版社 定本 発振回路の設計と応用
・FEXT-PLL'97
・Kiyoshiさんのおもちゃ箱の発振回路
・有限会社ヒューマンデータのHDL掲示板