最近遊んでいるAlteraのFPGA MAX10にはADCが搭載されているモデルがありますが、DACは搭載されていません。
マイコンやFPGAで実装するDACとしてよく使われる方式としてPWM方式がありますが、今回は将来的なADCへの応用も考えΔΣ方式としてみました。
実装したΔΣ型DACの構成
構成としては非常に簡単です。
誤差フィードバック構造と呼ばれる構成で、MSB以外のデータを誤差として入力にフィードバックする形となっています。
図中の遅延素子(Z^-1)は単なるDFFとしています。
FPGA上に実装したΔΣ変調器の出力は高い周波数成分を含むものになるため、外部にLPFを接続してアナログ信号を取り出します。
CQ出版のMAX10のFPGAボードに上記のDACを実装し、8kHz程度(周波数は適当です(^^;))の正弦波信号を生成してみました。
手元にあった1kΩの抵抗と0.01uFのセラコンでカットオフ周波数16kHzのLPFを簡単につくり、所望の正弦波が得られるかを実験します。
ΔΣ変調器のクロック(内部遅延素子のDFFのクロック)は50MHz、正弦波のデータは8bitとしました。
実験回路
ブレッドボードで実装(今回使ってない部品もたくさん載っています...)
出力波形
雑音がのっているものの、正弦波信号が出力されていることを確認しました。
今回はブレッドボードで回路を構成しましたが、基板を起こせばもっとSNRを向上できるかもしれません。
ひとまずこれで簡単なDACを使用できるようになりました。
少ない外付け部品で実装できるのは魅力ですね。
ADCと併せて音声信号処理でもやってみようかと思います。
今回実装したΔΣ型DACのVerilogコード
module DSM_8bit(
input res,
input clk,
input [7:0] data,
output reg mod
);
wire [7:0] pcm_sig;
wire [8:0] add_sig;
reg [7:0] dse_reg;
assign pcm_sig = data;
assign add_sig = {1'b0,pcm_sig} + {1'b0,dse_reg};
always @(posedge res, posedge clk)
begin
if(res) begin
dse_reg <= 8'h00;
mod <= 1'b0;
end else begin
dse_reg <= add_sig[8:0];
mod <= add_sig[8];
end
end
endmodule
0 件のコメント:
コメントを投稿