Ich habe ein Problem, den in der Xilinx APP 154 publizerten Code mit dem darunter gezeichneten Diagramm in Einklang zu bringen. Ich vermisse da die eigentliche Delta-Bildung, also die Rückführung der Differenz, dass die Summenzählung auch wieder "rückwaerts" gehen kann und der Ausgang schwingt. Wie ist in dem Zusammnhang die gezeichnete Rückführung (die Zahl mit dem Bit 9 und den vielen Nullen) zu verstehen? Steckt da in impliziertes Abziehen durch Überläufe oder Interpretation des Vectors als Komplement drin?
1  | ‘timescale 100 ps / 10 ps  | 
2  | ‘define MSBI 7 // Most significant Bit of DAC input  | 
3  | //This is a Delta-Sigma Digital to Analog Converter  | 
4  | module dac(DACout, DACin, Clk, Reset);  | 
5  | output DACout; // This is the average output that feeds low pass filter  | 
6  | reg DACout; // for optimum performance, ensure that this ff is in IOB  | 
7  | input [‘MSBI:0] DACin; // DAC input (excess 2**MSBI)  | 
8  | input Clk;  | 
9  | input Reset;  | 
10  | reg [‘MSBI+2:0] DeltaAdder; // Output of Delta adder  | 
11  | reg [‘MSBI+2:0] SigmaAdder; // Output of Sigma adder  | 
12  | reg [‘MSBI+2:0] SigmaLatch; // Latches output of Sigma adder  | 
13  | reg [‘MSBI+2:0] DeltaB; // B input of Delta adder  | 
14  | always @(SigmaLatch) DeltaB = {SigmaLatch[‘MSBI+2], SigmaLatch[‘MSBI+2]} << (‘MSBI+1);
 | 
15  | always @(DACin or DeltaB) DeltaAdder = DACin + DeltaB;  | 
16  | always @(DeltaAdder or SigmaLatch) SigmaAdder = DeltaAdder + SigmaLatch;  | 
17  | always @(posedge Clk or posedge Reset)  | 
18  | begin  | 
19  | if(Reset)  | 
20  | begin  | 
21  | SigmaLatch <= #1 1’bl << (‘MSBI+1);  | 
22  | DACout <= #1 1‘b0;  | 
23  | end  | 
24  | else  | 
25  | begin  | 
26  | SigmaLatch <== #1 SigmaAdder;  | 
27  | DACout <= #1 SigmaLatch[‘MSBI+2];  | 
28  | end  | 
29  | end  | 
30  | endmodule  | 
