Marco schrieb:
müsste ich jedes Mal mehrmals auf das Prozessende warten.
Aha, ein Softwareprogrammierer. In der Hardware ist das aber kein Problem, denn so ein VHDL-Prozess hat per Definition eine Laufzeit von 0.
Ich bräuchte den Inhalt auf einmal
und habe leider keine Idee wie ich das bewerkstelligen könnte.
Du musst alle FFs parallel taktsynchron Setzen bzw. Zurücksetzen.
einen std_logic_vector(119 downto 0) mit einem wiederkehrenden Bitmuster
von je 24 Bit Breite befüllen. Beispielsweise x"1f1f1f".
Geht das irgendwie, ohne den gesamten Vektor hinschreiben zu müssen?
Das "Hinschreiben" ist das allerkleinste Problem, das geht mit einer for-Schleife im Grunde völlig problemlos:
1 |
for i in 0 to 5 loop
|
2 |
vect( ((i+1)*24)-1 downto i*24 ) = x"1f1f1f";
|
3 |
end loop;
|
Und das ist mit einem konstanten Wert mit konstanter Breite auch noch nicht so schlimm, das kann sogar über die Set/Reset-Leitungen der beteiligten FFs angesteuert werden.
Wenn sich allerdings der 24-Bit-Wert ändert, dann ist vor jedem Flipflop ein Multiplexer nötig.
Außerdem ist der Vektor, je nach Parameter, nicht immer gleich lang und
das Muster müsste abhängig von der Vektorbreite unterschiedlich oft
hinein geschoben werden.
Während des Betriebs zur Laufzeit oder nur zur Synthesezeit als "generic" Wert?
Denn wenn das zur Laufzeit 1 Takt funktionieren soll, dann ist die Logik, die diese Herkulesaufgabe letztendlich in Hardware lösen muss, ein "Megamonstermultiplexer".
Und dabei ist es völlig egal, ob man das in eine Zeile schreiben kann oder ob es eine Funktion braucht oder wie auch immer das in VHDL aussieht.
Also ich suche die Logik, um genau zu sein.
Genau das musst du tun. Und wenn du die Logik (also die Hardware) die diese Aufgabe lösen kann, auf einem Blatt vor dir hingemalt hast, dann nimmst du die Hardwarebeschreibungssprache VHDL und beschreibst diese hingemalte logische Hardware in Worten.