mirror of
https://github.com/MiSTer-devel/MacPlus_MiSTer.git
synced 2024-11-23 22:31:29 +00:00
34 lines
934 B
Verilog
34 lines
934 B
Verilog
//
|
|
// PWM DAC
|
|
//
|
|
// MSBI is the highest bit number. NOT amount of bits!
|
|
//
|
|
module sigma_delta_dac #(parameter MSBI=7, parameter INV=1'b1)
|
|
(
|
|
output reg DACout, //Average Output feeding analog lowpass
|
|
input [MSBI:0] DACin, //DAC input (excess 2**MSBI)
|
|
input CLK,
|
|
input RESET
|
|
);
|
|
|
|
reg [MSBI+2:0] DeltaAdder; //Output of Delta Adder
|
|
reg [MSBI+2:0] SigmaAdder; //Output of Sigma Adder
|
|
reg [MSBI+2:0] SigmaLatch; //Latches output of Sigma Adder
|
|
reg [MSBI+2:0] DeltaB; //B input of Delta Adder
|
|
|
|
always @(*) DeltaB = {SigmaLatch[MSBI+2], SigmaLatch[MSBI+2]} << (MSBI+1);
|
|
always @(*) DeltaAdder = DACin + DeltaB;
|
|
always @(*) SigmaAdder = DeltaAdder + SigmaLatch;
|
|
|
|
always @(posedge CLK or posedge RESET) begin
|
|
if(RESET) begin
|
|
SigmaLatch <= 1'b1 << (MSBI+1);
|
|
DACout <= INV;
|
|
end else begin
|
|
SigmaLatch <= SigmaAdder;
|
|
DACout <= SigmaLatch[MSBI+2] ^ INV;
|
|
end
|
|
end
|
|
|
|
endmodule
|