Forum: FPGA, VHDL & Co. Verständnisproblem Sigma-Delta in Verilog


von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Dussel (Gast)


Lesenswert?

Die Rückführung hast du doch in
1
always @(DACin or DeltaB) DeltaAdder = DACin + DeltaB;
2
always @(DeltaAdder or SigmaLatch) SigmaAdder = DeltaAdder + SigmaLatch;
DeltaB und SigmaLatch werden von hinten nach vorne geführt.

M. W. schrieb:
> 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?
Als reine Vermutung würde ich äußern, dass da die Integralbildung 
drinsteckt. Die unteren Bits werden ignoriert und erst wenn so viel 
aufsummiert ist, dass die obersten Bit(s) sich ändern, wird das auf den 
Eingang zurückgeführt.

von Michael W. (Gast)


Lesenswert?

Irgendwie blicke ich aber nicht durch, wo und wie dort ein negativer 
Wert entsteht, der dazu führen kann, dass das Integral auch wieder 
abbnimmt. Nach  meinen bescheidenen Kenntnissen braucht es eine 
Differenzbildung in beide Richtungen, um zu entscheiden, ob das Integral 
infolge des DAC-Wertes "high" zu gross geworden ist oder ob es infolge 
des Ausgangswertes "low" zu klein geworden ist, im Vergleich zum Soll. 
Das ist ja eine Regelung.

Ehrlich gesagt, blicke ich auch beim Verilog nicht durch.

von Achim S. (Gast)


Lesenswert?

Markus W. schrieb:
> Irgendwie blicke ich aber nicht durch, wo und wie dort ein negativer
> Wert entsteht, der dazu führen kann,

wenn L(9) den Wert 1 hat und auf die höchste Stelle kopiert wird, dann 
ist das ein negativer Wert. DeltaB ist also entweder Null oder negativ 
(im Zweierkomplement)

von Michael W. (Gast)


Lesenswert?

Das stimmt, aber das kam mir spanisch vor, weil es nur ein Bit ist, 
welches rückgeführt wird. Ich werde das mal durchsimulieren, denke ich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.