FPGA の学習を進めると DDS(Direct Digital Synthesis、直接デジタル合成) という概念が登場します。本記事では、FPGA における DDS の本質的な意味、動作原理、そして実践的な活用方法 について詳しく解説します。
目次
1. DDS(Direct Digital Synthesis)とは?
🔹 DDS の基本的な役割
DDS は クロック信号を基にして、デジタル的に波形を生成する技術 です。特に、以下のような目的で使われます。
- 高精度な周波数の波形を生成(整数倍でなくてもOK)
- 任意の波形を生成(正弦波、方形波、三角波など)
- 周波数、位相、振幅を瞬時に変更可能
- 通信、レーダー、信号処理、音響などに活用
PLL はクロックの整数倍しか作れませんが、DDS は 自由な周波数を生成できる のが大きな特徴です。
2. DDS の基本構成と動作原理
DDS の基本ブロックは以下のようになっています。
クロック(CLK) → 位相累積レジスタ(フェーズアキュムレータ)
→ 波形ルックアップテーブル(LUT)
→ D/A 変換(DAC) → アナログ波形
🔹 DDS の主要コンポーネント
- フェーズアキュムレータ(Phase Accumulator)
- クロックごとに 位相の増分(Phase Increment)を加算 し、波形のどの部分を出力するかを決定。
- 位相増分の大きさで出力周波数が決まる!
- 波形LUT(Look-Up Table, ルックアップテーブル)
- 正弦波などの波形データを事前に格納。
- フェーズアキュムレータの出力を元に、LUT から波形のデジタル値を取得。
- DAC(Digital-to-Analog Converter, D/A変換)
- DDS の出力はデジタル信号なので、DAC を使ってアナログ波形に変換する。
3. DDS の周波数制御
DDS では、出力周波数は以下の式で決まります。
$$ fout= \frac{M \times f_{\text{clk}}}{2^N}$$
- $f_{\text{out}}$ : 出力周波数
- $M$ : フェーズアキュムレータの 位相増分
- $f_{\text{clk}}$ : クロック周波数
- $2^N$ : 位相アキュムレータのビット数(例: N=32 なら $2^{32}$)
💡 M を変えるだけで周波数を自由に変更できる!
✅ 例:100MHz のクロックで DDS を動かす
- フェーズアキュムレータが 32ビット の場合(N=32)
- M = 2,147,483(約 $2^{31}$)とすると
$$fout = \frac{2,147,483 \times 100 \text{MHz}}{2^{32}} \approx 50 \text{Hz}$$
👉 100MHz のクロックから 50Hz の正弦波を生成!
4. FPGA での DDS 実装
✅ 方法1: ルックアップテーブル(LUT)方式
- 事前に正弦波のデータをテーブル(ROM)に格納
- フェーズアキュムレータの値に応じて、LUT から出力
process(clk)
begin
if rising_edge(clk) then
phase_accum <= phase_accum + phase_increment;
sine_out <= sine_LUT(to_integer(phase_accum(31 downto 24)));
end if;
end process;
💡 LUT に「時間とともに周波数が変化するデータ」を入れれば、チャープ信号も作れる!
✅ 方法2: CORDIC(COordinate Rotation DIgital Computer)方式
- LUT を使わずに、三角関数の数値計算で波形を生成
- 高精度な正弦波をリアルタイムで計算可能
メリット:
- LUT を使わずにメモリ節約
- 任意の波形を高精度で生成可能
デメリット:
- 計算負荷が高く、FPGA のリソースを多く消費する
5. DDS の用途
✅ 無線通信
- キャリア波の生成(例: 2.4GHz Wi-Fi 信号)
- 変調信号(AM, FM, PSK, FSK)
✅ レーダー信号生成
- チャープ(LFM)を用いたパルス圧縮レーダー
- 周波数ホッピング(FH)を用いた LPI レーダー
✅ 計測機器
- ファンクションジェネレータ(信号発生器)
- 電子負荷装置(特定の電圧/電流波形を発生)
✅ 音響・楽器(電子シンセサイザー)
- デジタル音源(FM音源、波形合成)
- オシレーター(LFO、エンベロープ)