VHDLでFMラジオを作る(シミュレーションレベル)

icon 項目のみ表示/展開表示の切り替え

概要

改訂版 FPGAボードで学ぶ論理回路設計(パソコンのプリンターポートと接続)の付属基板(CQ出版社)を購入した。
使用しているFPGAはALTERA EP110Kであり仕様は以下の通りです。
有効ゲート規模 約10000ゲート規模
ロジックエレメント数 576
4kビット組み込みメモリブロック3個
PLL 1個

なぜ、買おうかと思ったのはオーディオDAC用にFIFOをスマートに組めないかと思ったからである。

が、なかなか組む気にもならずふとDACのディジタルフィルタに興味を持ったので、その手の本を読んでいたら、デジタルFMラジオを作るコンテストがあったので、がんばったが間に合わなかった。が、一様、信号の波形は汚いがシミュレーション上で動いた。

ブロック図

block.svg

ADコンバータでIF(352.8KHz)の16倍でサンプリングされたIF信号にIF信号と同じ周波数のsin,cos信号を掛け合わせる。

掛け合わせたときに発生する高周波を移動平均フィルタで低減させる。

これらの信号を除算回路を通した後にatan回路を通し、微分後再び移動平均を掛けるとFMが復調される。


三角波を周波数変調したものを復調したものである。あまりきれいな波形でないがとりあえず復調できた。

各ブロックはパイプライン処理を行っている。

pip.svg

各ブロックの詳細

符号拡張

8bit符号付を9bit符号付に変換する。符号ビッド

extend.svg

局発(OSC)

サンプリングクロックをカウントしその値でテーブルを読み出しSIN,COSに出力する。

osc.svg

MPX

9bitに拡張された信号をOSCの値を元にそのまま出力したり符号を反転したりする。

neg.svg

LPF

シフトレジスターを使用して移動平均を取る。

除算回路

パイプラインを使用して、CLKの8倍のクロックを元に動作する。

div.svg

tan-1

atan.svg

入力は256倍の値で入力される。

0~255領域を16分割し、それぞれを1次関数で近似する。

VHDLソース

ソースはQuartus Ⅱ

fm.txt 56.8kByte