DSD mod

ADで取り込んだPCMをDSD (Delta Sigma Modulation)にしてみます。

テスト用ハードウェア解説こちら(びっくりするようなHiFiです)。

下記のようなコードになります。

module DeltaSigmaMod(DSD_out, DA_in, clk, rst_n);

input clk, rst_n;

input [23:0] DA_in;

output DSD_out;

reg [24:0] DSD_reg;

always @(posedge clk or negedge rst_n)

begin

if (!rst_n) begin

DSD_reg = 0;

end

else begin

DSD_reg <= DSD_reg[23:0] + (DAin ^ 24'b1000_0000_0000_0000_0000_0000);

end

end

assign DSD_out = DSD_reg[24];

endmodule

コードは非常に簡単で、サンプリングごとに(今回の場合はDACのMCLKを使用しました)積算していき、msbを取り出すというものです。

※加算するときに、0x800000とXORをとっていますが、これはADから出力される2の補数表現をオフセットバイナリに変更しているからです。