VHDLでFMラジオを作る(シミュレーションレベル)
概要
改訂版 FPGAボードで学ぶ論理回路設計(パソコンのプリンターポートと接続)の付属基板(CQ出版社)を購入した。
使用しているFPGAはALTERA EP110Kであり仕様は以下の通りです。
有効ゲート規模 約10000ゲート規模 |
ロジックエレメント数 576 |
4kビット組み込みメモリブロック3個 |
PLL 1個 |
なぜ、買おうかと思ったのはオーディオDAC用にFIFOをスマートに組めないかと思ったからである。
が、なかなか組む気にもならずふとDACのディジタルフィルタに興味を持ったので、その手の本を読んでいたら、デジタルFMラジオを作るコンテストがあったので、がんばったが間に合わなかった。が、一様、信号の波形は汚いがシミュレーション上で動いた。
ブロック図
ADコンバータでIF(352.8KHz)の16倍でサンプリングされたIF信号にIF信号と同じ周波数のsin,cos信号を掛け合わせる。
掛け合わせたときに発生する高周波を移動平均フィルタで低減させる。
これらの信号を除算回路を通した後にatan回路を通し、微分後再び移動平均を掛けるとFMが復調される。
三角波を周波数変調したものを復調したものである。あまりきれいな波形でないがとりあえず復調できた。
各ブロックはパイプライン処理を行っている。
各ブロックの詳細
符号拡張
8bit符号付を9bit符号付に変換する。符号ビッド
局発(OSC)
サンプリングクロックをカウントしその値でテーブルを読み出しSIN,COSに出力する。
MPX
9bitに拡張された信号をOSCの値を元にそのまま出力したり符号を反転したりする。
LPF
シフトレジスターを使用して移動平均を取る。
除算回路
パイプラインを使用して、CLKの8倍のクロックを元に動作する。
tan-1
入力は256倍の値で入力される。
0~255領域を16分割し、それぞれを1次関数で近似する。
VHDLソース
ソースはQuartus Ⅱ
fm.txt 56.8kByte