DSD mod
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の補数表現をオフセットバイナリに変更しているからです。