Hallo, kann ich in einem langen std_logic_vector einzelne Bits bzw. Stellen zuweisen? Ein 240 Stellen langer Vektor mit ausschließlich Nullen soll an Position 23-16 Einsen bekommen. Meine Idee war (die offensichtlich falsch ist): VEKTOR(23 downto 16) <= x"ff"; Oder muß ich eine Zuweisung für den gesamten Vektor machen? Grüße
Student schrieb: > Meine Idee war (die offensichtlich falsch ist): > VEKTOR(23 downto 16) <= x"ff"; Passt doch. Wer sagt, dass das falsch ist? Welcher Teil der Toolchain meldet bei welchem Code welchen Fehler?
Student schrieb: > Ein 240 Stellen langer Vektor mit ausschließlich Nullen soll an Position > 23-16 Einsen bekommen. Na, dann mach doch:
1 | VEKTOR <= ( 23 downto 16 => '1', others => '0'); |
Duke
Danke euch beiden für die Antworten. Duke Scarring schrieb: > Student schrieb: >> Ein 240 Stellen langer Vektor mit ausschließlich Nullen soll an Position >> 23-16 Einsen bekommen. > > Na, dann mach doch:1VEKTOR <= ( 23 downto 16 => '1', others => '0'); > > Duke Der Code ist für meine Projektarbeit und möchte ihn nicht im Netz posten. Aber das ist was ich gesucht hatte. Ich habe mehrere Bücher, aber nirgends steht diese Schreibeweise drin… Danke, das hat geholfen. Das Problem lag nicht an meiner Schreibeweise, aber so konnte ich es dann wenigstens ausschließen. Grüße
Student schrieb: > Aber das ist was ich gesucht hatte. Ich habe mehrere Bücher, > aber nirgends steht diese Schreibeweise drin… Das steht deshalb "nirgends" drin, weil man sich das erschlussfolgern kann, wenn man den Konstrukt an sich ansieht. Würde man komplette Vektoren zuweisen können oder müssen, dann würde man nur sehen : y <= x und es brächte kein "downt to" und die Zahlen. :-)
Student schrieb: > Aber das ist was ich gesucht hatte. Ich habe mehrere Bücher, > aber nirgends steht diese Schreibeweise drin… Doch schon, aber manche eben so sperrig, das ein "Student" das nicht wahrnimmt. Insbesonders wenn er das Buch nur nach Syntaxbeispielen überfliegt, statt die Erläuterungen da neben zu lesen. Anhang aus ISBN: 3-69959-163-1 . Der Autor dieser Dissertationsschrift lehrt im Hamburg und hat dort einiges zu VHDL veröffentlicht, was man auch beachten sollte: https://tams-www.informatik.uni-hamburg.de/vhdl/vhdl.html
Fred Focus schrieb: > Student schrieb: >> Aber das ist was ich gesucht hatte. Ich habe mehrere Bücher, >> aber nirgends steht diese Schreibeweise drin… > > Doch schon, aber manche eben so sperrig, das ein "Student" das nicht > wahrnimmt. Insbesonders wenn er das Buch nur nach Syntaxbeispielen > überfliegt, statt die Erläuterungen da neben zu lesen. Das ist quatsch. Aber deine Vorschläge nehme ich gerne mit. Wenn ich nur lange genug nach einem Fehler suche, zweifle ich an allem und brauchte einfach eine Bestätigung. Hat ja auch geholfen. Bastler schrieb: > Student schrieb: >> Aber das ist was ich gesucht hatte. Ich habe mehrere Bücher, >> aber nirgends steht diese Schreibeweise drin… > > Das steht deshalb "nirgends" drin, weil man sich das erschlussfolgern > kann, wenn man den Konstrukt an sich ansieht. Würde man komplette > Vektoren zuweisen können oder müssen, dann würde man nur sehen : y <= x > und es brächte kein "downt to" und die Zahlen. :-) Ja ist so. Ich hatte einen Konflikt aufgrund zweier Prozesse, wo in beidem versucht wurde dem Vektor einen Wert zuzuweisen. In dem einen die Nullen und im anderen die Einsen an genannter Stelle. Das hätte eig. nie gleichzeitig passieren können, hatte mir in der Simulation aber trotzdem für den Stellen 23-16 „XX“ ausgegeben. Das konnte ich nun lösen.
Student schrieb: > Wenn ich nur > lange genug nach einem Fehler suche, zweifle ich an allem und brauchte > einfach eine Bestätigung. Hat ja auch geholfen. Noch so ne Bockmistige Studenteneransgehensweise. Erst mal Mist schreiben und dann den Fehler suchen (lassen). Anstatt ab Start zu lernen wie man es richtig macht, bevor man mit Code losstochert. VHDL als standardisierte Sprache hat den Vorteil, das es ein zugängliche Language Reference Manual (LRM) gibt, in dem nachschlagen kann wie es korrekt lautet: https://edg.uchicago.edu/~tang/VHDLref.pdf S.106
Fred Focus schrieb: > Student schrieb: >> Wenn ich nur >> lange genug nach einem Fehler suche, zweifle ich an allem und brauchte >> einfach eine Bestätigung. Hat ja auch geholfen. > > Noch so ne Bockmistige Studenteneransgehensweise. > > Erst mal Mist schreiben und dann den Fehler suchen (lassen). Anstatt ab > Start zu lernen wie man es richtig macht, bevor man mit Code > losstochert. > > VHDL als standardisierte Sprache hat den Vorteil, das es ein zugängliche > Language Reference Manual (LRM) gibt, in dem nachschlagen kann wie es > korrekt lautet: https://edg.uchicago.edu/~tang/VHDLref.pdf S.106 Ganz ehrlich, das ist nicht wahr. Ich habe den Fehler nicht suchen lassen, sondern eine einfache Frage gestellt. Ihr habt euer Forum wieder für euch. Hier sind scheinbar nur Profis erwünscht. Wenn es so wäre wie du behauptest dürfte es kein Stackoverflow oder sonst irgendein Forum geben, weil man sich alles irgendwie herleiten kann… Ich lese hier viel mit und hatte befürchtet angehatet zu werden und frage hier nicht mehr nach. Danke nochmal, Ciao
Student schrieb: > Ganz ehrlich, das ist nicht wahr. Ist es auch nicht. Lass dich nicht von Fred Focus provozieren. Der hat die Angewohnheit, (unter verschiedenen Namen) nach Threads zu suchen, die er zur Selbstdarstellung nutzen kann. Seine Methode: er listet irgendwelche Formalien und Trivialitäten auf, und behauptet dann ins Blaue, dass der Fragesteller zu dumm oder zu faul oder zu sonstwas sei. Fred Focus würde es wahrscheinlich anders formulieren, aber in der Sprache des Rests der Menschheit ist es genau das, was er tut. Die anderen Dikussionspartner hier sind konstruktiv auf deine Frage eingegangen. Ignoriere den Selbstdarsteller einfach - ich mach es jedenfalls so. Student schrieb: > Ich hatte einen Konflikt aufgrund zweier Prozesse, wo in > beidem versucht wurde dem Vektor einen Wert zuzuweisen. In dem einen die > Nullen und im anderen die Einsen an genannter Stelle. Das hätte eig. nie > gleichzeitig passieren können Lass mich raten - du hattest ein Konstrukt der folgenden Art:
1 | a: process(clk,reset) |
2 | begin
|
3 | if reset='1' then |
4 | vektor<=(others =>'0'); |
5 | elsif rising_edge(clk) then |
6 | ...
|
7 | end if; |
8 | end process; |
9 | |
10 | b: process(clk,reset) |
11 | begin
|
12 | if reset='1' then |
13 | .....
|
14 | elsif rising_edge(clk) then |
15 | if bedingung then |
16 | vektor(23 downto 16) <= x"FF"; |
17 | end if; |
18 | end if; |
19 | end process; |
Und du dachtest, Prozess A treibt das Signal nur im Reset auf 0 und "gibt es sonst frei"? Das ist aber nicht der Fall: Im Reset setzt Prozess a das Signal auf 0. Und weil es ansonsten in Prozess a nicht mehr geändert wird, speichert er das Signal und treibt er es dauerhaft auf 0. Deswegen der Konflikt, sobald Prozess b das Signal auf 1 setzen will.
Student schrieb: > Ganz ehrlich, das ist nicht wahr. Ich habe den Fehler nicht suchen > lassen, sondern eine einfache Frage gestellt. Mit der keiner was anfange konnte, weil der behauptete "Fehler" nicht sichtbar war: Beitrag "Re: Setzen einzelner Stellen eines std_logic_vector" Diesbezügliche Nachfragen wurden mit Hinweis auf "Nicht-Veröffentlichung" abgebügelt. > Ich lese hier viel mit und hatte befürchtet angehatet zu werden Jetzt ist also schon der Verweis auf Verständnisslücken und die Angabe von drei Literaturquellen (davon 2 online) eine Form vom "Hate-speech") ?!? https://de.wikipedia.org/wiki/Hasskommentar Kopfschüttel ...
Achim S. schrieb: > Fred Focus provozieren. Der hat > die Angewohnheit, (unter verschiedenen Namen) nach Threads zu suchen, > die er zur Selbstdarstellung nutzen kann. Seine Methode: er listet > irgendwelche Formalien und Trivialitäten auf, und behauptet dann ins > Blaue, dass der Fragesteller zu dumm oder zu faul oder zu sonstwas sei. > Fred Focus würde es wahrscheinlich anders formulieren, aber in der > Sprache des Rests der Menschheit ist es genau das, was er tut. Pups. und Verweis auf die Nutzungsbedingungen: Der Zweck dieses Forums ist der Austausch über Themen aus dem Bereich Elektronik, Informatik, sowie Technik und Wissenschaft im weiteren Sinne." Also, was regst Du dich auf, wenn man hier einen Frage auf das Lehrbuch verweist, wo die Antwort die Frage steht. Und erst recht wenn der Frager behauptet, das würde nicht in den Büchern stehen ?!?!
Achim S. schrieb: > Und du dachtest, Prozess A treibt das Signal nur im Reset auf 0 und > "gibt es sonst frei"? > > Das ist aber nicht der Fall: Im Reset setzt Prozess a das Signal auf 0. > Und weil es ansonsten in Prozess a nicht mehr geändert wird, speichert > er das Signal und treibt er es dauerhaft auf 0. Deswegen der Konflikt, > sobald Prozess b das Signal auf 1 setzen will Das trifft es fast genau. Ich habe eine Timed Moore State Machine nach dem Vorbild von https://www.amazon.de/-/en/Orhan-Gazi/dp/3030617009/ref=sr_1_1?crid=1E7I5BJ0M1Y49&keywords=state+machines+using+vhdl&qid=1673690407&sprefix=state+machines+using+vhdl%2Caps%2C76&sr=8-1 geschrieben. Der Takt und Reset ruft nur Prozess 1 auf, während darin der aktuelle Status den des nächsten annimmt, abhängig von der Zeit eines Timers. Prozess 2 wird aufgerufen, sobald das passiert. Ja, ich wollte den Vektor bei einem Reset oder nach Signalende im Prozess a auf 0 setzen und in Prozess b wieder in den definierten Ausgangszustand bringen. Das auf 0 setzen konnte ich mir mit dem Konstrukt oben nun sparen und (fast) alles läuft wie es soll. Ich dachte, da nur RST und CLK den ersten Prozess aufruft, kann ich es so machen. Nach RST und zwischen den positiven Taktflanken wird der Prozess nicht aufgerufen und ja ich dachte das Signal wäre freigegeben. Am digitalen Ausgang (erstmal einer später auch mehrere) wird ein Signal mit unterschiedlichen Pegellaufzeiten ausgegeben und beginnt nachdem Ende oder einem Reset wieder von vorn. Ich arbeite mit Vivado und experimentiere mit dem Basys 3 (Artix-7) Board von Digilent. Darauf wird auch mein Projekt laufen. Grüße
Student schrieb: > Ich dachte, da nur RST und CLK den ersten Prozess aufruft, kann ich es > so machen. Nach RST und zwischen den positiven Taktflanken wird der > Prozess nicht aufgerufen und ja ich dachte das Signal wäre freigegeben. Der erste Prozess beschreibt ja ein taktflankengesteuertes FlipFlop (bzw. Register). Und das speichert den Wert (0), der beim Reset gesetzt wurde. Der Ausgang des FlipFlops treibt diesen Wert immer, nicht nur während der Ausführung des Prozesses. (Im implementierten Design gibt es sowieso keinen Prozess mehr sondern nur noch das FlipFlop, das durch den Prozess beschrieben wird). Student schrieb: > Ich arbeite mit Vivado und experimentiere mit dem Basys 3 (Artix-7) > Board von Digilent. Darauf wird auch mein Projekt laufen. Spätestens bei der Synthese hättest du die Meldung bekommen, dass der Ausgangs des Registers nicht aus zwei Prozessen heraus getrieben werden kann ("signal has multiple sources.."). Der Simulator kann damit umgehen: wenn von einem Prozess eine 0 kommt, vom anderen eine 1, dann wird nach der Auflösungsfunktion von std_logic daraus ein X.
Student schrieb: > Ich dachte, da nur RST und CLK den ersten Prozess aufruft, kann ich es > so machen. Nach RST und zwischen den positiven Taktflanken wird der > Prozess nicht aufgerufen und ja ich dachte das Signal wäre freigegeben. Ein signal in VHDL ist kein wie in C (dynamisch) verwalteter Speicher. Ein process(clk,reset) wird durch die Toolchains zu FlipFlops umgesetzt, die permanent ein Signal treiben. Und falls hier jemand FliFlop nur vom Strandurlaub kennt: https://de.wikipedia.org/wiki/Flipflop Auch wenn es mancher nicht hören will, Analogien zwischen C und VHDL zu ziehen führt eben sehr wahrscheinlich Falschannahmen. Deshalb sollte mn erst VHDL als "Hardwarebeschreibungssprache" lernen. Dann versteht man auch, das ein process ein (Leitungs-)treiber im hardwaretechnischen Sinne ist. https://en.wikipedia.org/wiki/Device_driver https://en.wikipedia.org/wiki/Driver_circuit
Student schrieb: > Ich habe den Fehler nicht suchen lassen, sondern eine einfache Frage > gestellt. Ihr habt euer Forum wieder für euch. Hier sind scheinbar nur > Profis erwünscht. Diese sehr sensible Seite musst du dir für später noch abgewöhnen. Denn natürlich stimmt es: der Code, den du gepostet hast, erzeugt keinen Fehler. Wie soll man dir dann bei der Fehlersuche helfen? Student schrieb: > Der Takt und Reset ruft nur Prozess 1 auf Du hast eine völlig falsche Denkweise von VHDL. Das geht am Anfang den meisten so, die vorher "nur" Software gemacht haben. Der Witz ist nämlich der: du musst dich schlau machen, welche Teile eines FPGAs du für deinen Zweck verwenden kannst. Und das sind allem voran die Logikblöcke, in denen es die LUTs für Logik und die Flipflops als Speicherelemente gibt. Nur diese Bauteile stehen für dein Hardwaredesign zur Verfügung. Und wenn du das betrachtest, dann gibt es in diesen 2 Bauelementen nichts, was mit einem Takt oder einem Reset "aufgerufen" werden könnte. Und deshalb ist die Betrachtungsweise, dass da über die Sensitivliste irgendwelche Prozess irgendwie "aufgerufen" werden, grundlegend falsch. Die Sensitivliste sagt lediglich dem Simulator, bei welcher Signaländerung er deiner Meinung nach(!!) den Prozess neu berechnen sollte. Student schrieb: > aber nirgends steht diese Schreibeweise drin… Noch ein Tipp: der Synthesizer schert sich einen feuchten Kehrricht um die Sensitivliste. Die ist nur für den Simulator da! Die Synthese "nimmt" sich einfach alle Signale her, die sie zur Umsetzung deiner Beschreibung in Hardware braucht. Und meldet das dann hinterher lapidar in einer Info im Sinne von "simulation results may not match generated hardware". Student schrieb: > Der Code ist für meine Projektarbeit und möchte ihn nicht im Netz > posten. Dann extrahiere dein Problem in einen "Dreizeiler", der die selbe Fehlermeldung bringt. Meine Erfahrung: oft ist ein Nachfragen danach gar nicht mehr nötig, weil du bei dieser Extraktion selber auf die Problemösung kommst.
:
Bearbeitet durch Moderator
Danke für die Erklärungen. Ich werde mich neben dem Code schreiben in die Dokumentation von Xilinx einlesen und hoffentlich genug dabei mitnehmen. Habe einen User Guide zur Synthese von Xilinx gefunden, der mir sicher helfen wird. Bis jetzt beschäftigte ich mich überwiegend mit Büchern zu VHDL/Digitaltechnik und der der Referenz zum Board von Digilent. Ich wußte das eigentlich schon, dass man in Hardware usw. denken muss. Es fällt mir allerdings noch recht schwer. Sollte ich wieder ein Problem haben werde ich zukünftig einen Beispielcode posten. Ihr habt mir auf jeden Fall sehr geholfen. Grüße
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.