Ich habe eine einfache Zustandsmaschine in VHDL geschrieben. Die Größe jedes Vektors und jeder Variablen wird durch eine generische Konstante "n" bestimmt. Die Idee ist: Wenn ich "n" ändere, möchte ich sofort in der Lage sein zu synthetisieren. Teil des Designs ist ein Vektor in "1 of N" -Code.Generischer Vektor in VHDL, mit Position der Zuweisung, bestimmt durch Variable
Ports & Signale Definitionen:
tester: out std_logic_vector(n-1 downto 0); -- port
signal I: integer range 0 to n-1:=0; -- signal
Was ich habe:
process(I)
begin
if I=0 then
tester<="0001";
elsif I=1 then
tester<="0010";
elsif I=2 then
tester<="0100";
else
tester<="1000";
end if;
end process;
Dies funktioniert natürlich nur für n = 4. Was ich will:
process(I)
begin
tester<=(I=>'1', others=>'0');
end process;
Diese Synthese nicht jedoch wegen „Wahl ist nicht konstant“ -Fehler. Ich werde durch einen der Zustände geändert und es kann in jedem Muster geändert werden, daher das Problem.
funktioniert perfekt! Vielen Dank. Ich fühle mich irgendwie dumm, versuche das nicht früher auszuprobieren. Aus Neugier - warum funktioniert diese Syntax, und der andere "Tester <=(I=> '1', andere => '0');" nicht? – Palkah
Index muss konstant sein, wahrscheinlich zur Vereinfachung; zum Beispiel, wie man behandelt, wenn man tut (a => '1', b => '0', ...) ', und a und b sind manchmal gleich; dann sollte Priorität definiert werden. Das Schreiben als sequentielle Anweisungen behandelt das Problem der Priorität unter Verwendung anders definierter Konstruktionen. –