2002.11.22

汎用発振器の実験

時間切れで尻切れ、読みづらいですが...内容はおもしろいですよ。

概要

 SpartanIIで遊んでいると、いろいろな案が浮かんできますが、メモリと共にちょっと困るのが、クロック源です。
 SDRAMを使うなら100MHzや133MHz,USBなら48MHzや24MHz,ビデオ信号なら14.318MHzや27MHzなどアプリケーションによって必要な周波数は色々です。
 これらは外部から供給する必要がありますが、アマチュアユースでは、3.3V動作のクリスタルオシレーターは手軽に購入できませんし、特殊な周波数の場合になれば、なおのこと入手難です。

 現在、PCなどではX'talOSCVCOPLLを組み合わせて任意の周波数を作り出す方法が主流です。
 通常、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掲示板