Ich überprüfe, was ich beim Aggregieren und Verketten in VHDL tun kann und was nicht.
Während ich zwei Vektoren kombinieren kann, indem ich sie verkette, erhalte ich immer wieder Fehler, wenn ich Aggregate verwende.
Ich habe hier eine Antwort gesehen, die zeigt, dass es möglich ist.
Kann jemand erklären, warum sie Fehler geben, oder ist es vielleicht die Sprache, die dies nicht zulässt?
Ich schätze jeden Vorschlag.
Hier ist mein Code. Ich habe die richtigen und die falschen Zeilen markiert. Ich benutze ModelSim. Ich kommentiere/kommentiere beim Überprüfen, um mehrere Treiber zu vermeiden.
architecture RTL of example_array is
--signal Z_BUS : std_logic_vector(7 downto 0);
--signal R_BUS : std_logic_vector(3 downto 0);
--signal A_BIT, B_BIT, C_BIT, D_BIT : std_logic;
signal T_BUS : std_logic_vector(7 downto 0);
signal Y_BUS : std_logic_vector(7 downto 0);
signal U_BUS : std_logic_vector(3 downto 0);
signal P_BUS : std_logic_vector(3 downto 0);
signal E_BIT, F_BIT, G_BIT, H_BIT : std_logic;
BEGIN
Z_BUS <= A_BIT & R_BUS & B_BIT & C_BIT & D_BIT; -- correct
--Z_BUS <= W_BUS & R_BUS; -- correct
P_BUS <= (E_BIT, F_BIT, G_BIT, H_BIT); -- correct
U_BUS <= (E_BIT, F_BIT, G_BIT, H_BIT); -- correct
(E_BIT, F_BIT, G_BIT, H_BIT) <= std_logic_vector'("1011"); -- correct
(E_BIT, F_BIT, G_BIT, H_BIT) <= P_BUS(3 downto 0); -- correct
(E_BIT, F_BIT, G_BIT, H_BIT) <= P_BUS; -- correct
Y_BUS <= (2 => '1', 3 => F_BIT, 1 downto 0 => '0', others => '0'); -- correct
--T_BUS(7 downto 0) <= (U_BUS(3 downto 0), P_BUS(3 downto 0)); -- WRONG!!
--T_BUS <= (U_BUS, P_BUS); -- WRONG!!
--(U_BUS(3 downto 0), P_BUS(3 downto 0)) <= T_BUS(7 downto 0); -- WRONG!!
END architecture RTL;
Verwenden Sie die VHDL-2008-Bibliothek in ModelSim und Ihr Fehler ist behoben. VHDL-93/2002-Pakete unterstützen keine Aggregationsvektoren, wie Sie es ausgedrückt haben.
Benutzer8352
(U_BUS(3 downto 0), P_BUS(3 downto 0));
ist eine Aggregation, keine Verkettung (z. B.T_BUS <= U_BUS & P_BUS;
). Für die aggregierte Zuordnung haben Sie die VHDL-Version nicht vor oder -2008 angegebentype nybble_array is array (0 to 1) of std_logic_vector(3 downto 0);
und(U_BUS, P_BUS) <= nybble_array'(T_BUS (7 downto 4), T_BUS (3 downto 0));
Sie benötigen für jedes Element auf der linken Seite ein Element auf der rechten Seite. Der Typ muss aus dem Kontext erkennbar sein. Der Elementtyp muss gleich sein.Paebbels
Benutzer8352
Paebbels
Benutzer8352