Hi @ all Ich habe ein VHDL-Programm geschrieben. Die Simulation war sehr erfolgreich und ein Fehler wurde bei der Synthese auch nicht entdeckt. Jedoch kommen beim Routen Warnmeldungen die mich beunruhigen. WARNING:Par:276 - The signal AD_Converter_Modul/add_10/cout has no load WARNING:Par:276 - The signal Create_Bit_Stream_Modul/add_197/cout has no load WARNING:Par:276 - The signal Create_Bit_Stream_Modul/add_89/cout has no load WARNING:Par:276 - The signal Create_Bit_Stream_Modul/add_232/cout has no load Das Problem ist, das die Signale andersheißen und ich somit nicht weiß wo die Fehler liegen. Kann mir jemand einen Tip geben? Grüsse Michael
Mit was für einem Programm hast du synthetisiert? Ich bekomme noch diverve Fehlermeldungen, wenn ich die Datei durch die ISE laufen lassen will... Gruß Jörn
Projekt ist mit Protel DXP 2004 erstellt worden. Dies ist auch nur ein Teil des Programms. Konnte den Fehler selber beheben. Durch das neue Service Pack 4 ist ein neuer Synthesizer "Altium Synthesizer" hinzugekommen. Mit diesem werden die Warnungen angezeit. Benutze ich jedoch den Alten Synthesizer "DXP Synthesizer" dann werden die Warnungen nicht mehr angezeigt. Vielleicht ist es ja noch ein Bug der behoben werden muss. Grüsse Michael
Hallo Michael, also einen groben Fehler habe ich schon in Deinem Code gesehen, aber ich weiß nicht, ob der irgendwas mit den Fehlermeldungen zu tun hat. Bei einem "ge-clock-ten" Prozess, erkennbar an: ... elsif(CLK'event and CLK = '1')then ... , steht in der sensitivity list nur Clock und die Reset-Bedingung, also z.B. bei Deinem 2. Prozess: process (CLR,CLK) und NICHT process (CLR,CLK,GATE,S_RESET,S_ONE_TIME,S_RESET_CONFIG) Gruß Ines
Ich glaube nicht das dies richtig ist. In dieser Liste müssen alle Eingänge und Signale, die an den Prozess übergeben werden aufgelistet sein. Ansonsten funktioniert dies nicht. Wo hast Du denn eigentlich diese Information her? Grüsse Michael
Ich programmiere halt schon eine Weile in VHDL. Es ist so, in der sensitivity list müssen sie Signale aufgelistet werden, bei deren Änderung der Prozess abgearbeitet werden soll. Und wann willst Du arbeiten? Bei Clear oder bei einer steigenden Clock-Flanke unabhängig davon, was die anderen Signale tun. Ines
Hallo Michael In der sensitivity list brauchen nur die Signale / Eingänge aufgelistet werden, die in dem Prozess ein Ereignis auslösen. Es können auch alle Signale aufgelistet werden, dass ist im übrigen aber nicht gerade sinnvoll, da bei jeder Änderung eines dieser Signale der Prozess im Simulator abgearbeitet wird. Für die Synthese hat diese Liste keine Bedeutung, da das Synthesewerkzeug aus der Beschreibung die spätere logische Verknüpfung bilden muss. MfG Holger
nur ein gut gemeinter Rat: Du hast in Deinem Design 3 Signale, die asynchrone Set / Reset Aktionen durchführen: CLR RESET_ADC_A GATE Diese werden immer wieder in anderen Kombinationen abgefragt, teilweise auch auf unterschiedliche Pegel. Ich weiss nicht wo die Signale herkommen und wie schnell das Timing ist, aber sowas kann durchaus zu Fehlern führen, an denen man wochenlang rumsucht. Idealerweise sollte max. 1 asynchroner Reset vorhanden sein, der dann entweder IMMER auf 1 oder IMMER auf 0 abgefragt wird (was anderes ergibt auch wenig Sinn) Vielleicht kannst Du das Rücksetzen der Register in den vielen Prozessen synchron machen, das könnte mögl. viel Ärger ersparen (in einer funktionalen Simulation sieht man die Probleme nicht)
Erst einmal vielen Dank für die Tips. Habe wieder etwas dazu gelernt. :-) Zu den asynchronen Resets: Bei mir muss die Logik an unterschiedlichen Stellen zurückgesetzt werden. Deshalb benutze ich 3 Resets. Diese werden nicht asynchrone ausgeführt, sondern werden von einem anderen Prozess, den ich nicht mit angegeben habe, synchrone erzeugt. Ich dachte das dies einfacher ist. Grüsse Michael
Hallo Michael, also meiner Meinung nach wäre es wie folgt schöner (am Beispiel Deines 1. Prozesses): process (CLR,CLK) begin if(CLR = '1' or Gate = '0')then S_ONE_TIME <= '0'; elsif(CLK'event and CLK = '1')then if(Gate = '0')then S_ONE_TIME <= '0'; else if(S_REGB(17) = '1')then S_ONE_TIME <= '1'; end if; end if; end if; end process; Wobei CLR ein asynchroner Reset wäre und Gate ein synchroner, den Du aber nicht schon vorher mit einem anderen Prozess erzeugst. Ines
FPGA User vielleicht hast Du ein Headset dann kann man sich über Skype oder ICQ besser unterhalten. Ich werde mal einen Account einrichten und es wäre super geil wenn wir dann mal eine Konferenzschaltung aufmachen könnten. :-) Grüsse Michael
process (CLR,CLK) begin if(CLR = '1' or Gate = '0')then S_ONE_TIME <= '0'; elsif(CLK'event and CLK = '1')then if(Gate = '0')then S_ONE_TIME <= '0'; else if(S_REGB(17) = '1')then S_ONE_TIME <= '1'; end if; end if; end if; end process; Das lässt sich vereinfachen, da im synchronen Clock Bereich Gate niemals == '0' sein kann: process (CLR,CLK) begin if(CLR = '1' or Gate = '0')then S_ONE_TIME <= '0'; elsif(CLK'event and CLK = '1')then if(S_REGB(17) = '1')then S_ONE_TIME <= '1'; else S_ONE_TIME <= '0'; end if; end if; end process; Bei der if Abfrage S_REGB(17) implementiere ich nach Möglichkeit immer beide If Zweige, sprich den If Part und auch else Part. Diese If Abfrage kann eventl. vereinfacht werden: S_ONE_TIME <= S_REGB(17); Allerdings wird dies zu einem anderen Fitting führen und je nach dem entweder besser oder schlechter im Resoucenverbrauch sein und sich ebenfalls das Gesatmtiming verändern. gruß hagen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.