Liebe Kollegen!
Ich habe ein Design mit 60 PWM´s als Ausgang. Jeder Ausgang hängt an
einer eigenen Entity (eine Entity 60 mal verwendet).
Wenn ich das ganze simuliere gehen alle 60. Wenn ich das Desing auf den
FPGA spiele gehten etliche nicht.
Ich habe schon die Project Files gelöscht, ein anderes FPGA Board
genommen und versucht die Zuordnung im UCF zu drehen (PWM3 Ausgang mit
PWM4 Ausgang getauscht. Wobei 3 geht und 4 nicht).
1
--...
2
NET"pwm[2]"LOC=am20;
3
NET"pwm[4]"LOC=ap32;
4
NET"pwm[3]"LOC=an25;
5
NET"pwm[5]"LOC=ah25;
6
--...
7
--ML605 Board
Die Simulation sieht auch eigenartig aus. Für andere (!) Ausgänge sollen
Signale vorbereitet werden und dann seriell rausgetaktet. Alle 16-Bit
Signale werden in einem For Loop generiert. In der Simulation sollten
alle Singale gleich sein da ich ihnen auch den gleichen
Vergleichsparameter vorgebe (am Board wird da gemessen).
Interessanterweise sind einige Singale 0 !?
Dazu kommt, dass mein Counter von 7 auf 16 Springt!!?? (Bild angehängt)
Günter schrieb:> Ich hab schon erfolglos nach Vieren gesucht.
Mal echt: ist das ein Witz?
Häng doch mal die VHDL-Datei hier an. Der Fehler steckt vermutlich nicht
im geposteten Code...
Günter schrieb:> Wenn ich das ganze simuliere gehen alle 60.> ...> Die Simulation sieht auch eigenartig aus.
Ja, was denn nu?
Eine Frage: brauchst du wirklich 60 komplett unabhängige PWM Signale,
oder würde auch ein einziger Zähler und 60 Vergleicher reichen? Muss das
unbedingt eine symmetrische PWM (mit Auf und Ab-Zähler) sein?
Günter schrieb:> Wenn ich das ganze simuliere gehen alle 60. Wenn ich das Desing auf den> FPGA spiele gehten etliche nicht.
Da gibt es eine Angabe im Datenblatt, wie viele IO gleichzeitig schalten
dürfen (SSO). Vielleicht ist das bei Dir ein Problem.
Beim Spartan6 z.B. ist die Angabe im DS192 zu finden. Ein Auszug davon
im Anhang.
Duke
Das Limit bezieht sich aber nur auf die Zahl dahingehend, dass die in
der SPEc schalten. Bei mehr, geht die Flanke mehr in den Keller, als in
de SPECs berücksichtigt. Da muss man sich eine flachere Fanke denken,
mehr nicht. Die PWM muss trottzdem zu sehen sein, gfs minimal schlechter
dem Wert folgen.
Heinrich schrieb:> Das Limit bezieht sich aber nur auf die Zahl dahingehend, dass die in> der SPEc schalten. Bei mehr, geht die Flanke mehr in den Keller, als in> de SPECs berücksichtigt. Da muss man sich eine flachere Fanke denken,> mehr nicht.
Sicher?
Ich hätte da u.A. erwartet, das die Stromversorgung nicht mehr
hinterherkommt und die Spannung einbricht.
Günter schrieb:> Die Simulation sieht auch eigenartig aus.
Ist Deine foor loop innerhal eines getakteten Prozesses?
Wo werden die Signale s_ddc246_in(i) und c_ddc246_comp(i) generiert?
Duke
P.S.: Mit kompletten Code und funktionierender Testbench, wäre die
Fehlersuche für das Forum nachvollziehbar.
-- No clocks detected in port list. Replace <clock> below with
37
-- appropriate port name
38
39
40
41
BEGIN
42
reset<='0'after37ns;
43
conv<=notconvafter7.5ns;
44
45
-- Instantiate the Unit Under Test (UUT)
46
uut:DAC088S085_dataPORTMAP(
47
conv=>conv,
48
reset=>reset,
49
sollwert=>sollwert,
50
ddc246_in=>ddc246_in,
51
data_o=>data_o,
52
pattern=>pattern
53
54
);
55
56
-- Clock process definitions
57
58
59
60
-- Stimulus process
61
stim_proc:process
62
begin
63
-- hold reset state for 100 ns.
64
waitfor100ns;
65
ddc246_in<=(others=>"0000000011111000");
66
67
waitfor100ns;
68
ddc246_in<=(others=>"1111111111111111");
69
70
waitfor100ns;
71
ddc246_in<=(others=>"1111111011111000");
72
73
waitfor100ns;
74
ddc246_in<=(others=>"0001111100000000");
75
76
waitfor100ns;
77
ddc246_in<=(others=>"1111111011111000");
78
79
waitfor100ns;
80
-- insert stimulus here
81
82
wait;
83
endprocess;
84
85
END;
Auf dem Board wird s_ddc246_in(i) seriell eingelesen (externer IC) und
von einer Entity parallel weitergegeben.
c_ddc246_comp(i) steht hardcoded in einem Package. (60 x
std_logic_vector (16 downto 0).
Heinrich schrieb:> Da muss man sich eine flachere Fanke denken, mehr nicht.
Und weshalb? Weil die Versorgung für die IO-Zellen /im FPGA/ kurzzeitig
wegknickt. Bei genügend großer Überschreitung des Werts evtl. so stark,
dass die IO-Zellen ihre Konfiguration verlieren, oder sonstwas
passiert...
Günter schrieb:> Wenn ich das ganze simuliere gehen alle 60. Wenn ich das Desing auf den> FPGA spiele gehten etliche nicht.
Und was passiert, wenn du das mal Schritt für Schritt angehst, und erst
mal 1 in Betrieb nimmst, dann 10, dann 30, dann 60?
Wie sagten schon die römischen Kaiser?
http://de.wikipedia.org/wiki/Divide_et_impera
Gute Idee. Ich werde das reduzieren.
Im ersten Design laufen nur 6 PWM´s. Da geht alles.
Leider laufen genau diese 6 PWM´s auch im Design mit 60 also kann ich
keine Aussage dazu treffen.
Naja, ich kann die Packages abgespeckt dazugeben. Sobald ich aus meiner
Besprechung wieder am Platz bin mache ich das.
LG
Günter
Ohje. Da ist ja gar kein Takt im Spiel :-(
Für eine PWM nimmt man einen Zähler, der im Takt inkrementiert wird. Der
Zählerstand wird mit einem bestimmten Wert verglichen. Wenn der
Zählerstand größer als der Vergleichswert ist, dann wird '1' ausgegeben,
sonst '0'.
Die Bitbreite des Zählers ergibt die mögliche PWM-Auflösung.
Taktfrequenz des Zählers dividiert durch 2^Bitbreite ergibt die
entsprechende PWM-Frequenz.
Duke
Das wäre kombinatorische Schleife... :-o
http://www.lothar-miller.de/s9y/archives/42-Kombinatorische-Schleifen.html
Ich vermute aber eher, dass da zuviel rausgelöscht wurde, denn die TB
hat einen Takt wie Günter schrieb:> conv <= not conv after 7.5 ns;>> -- Instantiate the Unit Under Test (UUT)> uut: DAC088S085_data PORT MAP (> conv => conv,
Und dieser conv (was ist das eigentlich für ein Name für einen Takt...
hmmm... Wieviele Takte gibt es denn in dem Design?) taucht ja auch in
der Sensitivliste des Prozesses auf:
> p_regelung : process (conv, reset)Günter schrieb:> Dieser Teil hat auch nichts mit der PWM zu tun.
Nein? Ich würde schwören, das sind die Zähler für die PWM...
Günter schrieb:> Sorry, ich muss einiges an Kommentaren rauslöschen deshalb nicht als> Datei. Sonst bekomme ich probleme wegen der Verschwiegenheitsklausel> usw.
Hä? Was hat das Eine mit dem Anderen zu tun? - Es gibt auch Programme,
sogenannte "Texteditoren", die das Bearbeiten von Textdateien vor dem
Hochladen ermöglichen. Und es gibt auf allen mir bekannten
Betriebssystemen die Möglichkeit, eine sogenannte "Kopie" anzulegen und
diese dann abzuspecken, zu bearbeiten und hochzuladen.
Sorry, aber so wird nur die Geduld der Hilfsbereiten unnötigerweise auf
die Probe gestellt.
Guten Morgen!
Kann mir schon jemand einen Tip geben wo mein Fehler ist?
Ich werde auf jeden Fall heute versuchen die Anzahl der PWM´s auf 10 zu
reduzieren und hoffe auf ein positiveres Ergebnis.
Günter schrieb:> Der Quelltext von der nicht funktionierenden Simulation ist schon> eingestellt (Test Bench auch).
Die Testbench hab ich gefunden.
Wo ist der komplette Quelltext am Stück?
Ich kopiere mir doch nicht aus x-Postings den möglichen Quelltext des
Threaderstellers zusammen :-(
Duke
Ich hab einen neuen Versuch bezüglich PWM´s gestartet. Ganz einfaches
Design. Alle PWM´s auf fix '0' und sonst nichts im Design.
Eigenartigerweise invertieren die P Ausgänge vom FPGA (?) - alle
Ausgänge somit auf '1' - und die PWM´s die nicht gehen funktionieren
immer noch nicht.
Laut Liste sind das aber ganz normale I/O´s!?
z.B.: der AP32 gent nicht aber AN25 geht???
Ich kann doch nicht zu dumm sein einen I/O auf 1 zu legen?? (bitte keine
Antwort auf darauf!!!) ;)
LG
Günter