2017-09-28 2 views
0

Ich versuche tun, um eine Art erklären im Hafen zu benutzen, aber ich bin mit einem Problem wenn ich wie folgt vorgehen ich eine Fehlermeldung erhalten, dass std_logic_vector nichtVHDL-Paket und std_logic_vector

erklärt
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.numeric_std.all; 
-- Custom types -- 
package Common is 
    type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0); 
    type DinDout is range 11 downto 0; 
end package Common ; 
-- Use Custom Type 
use work.Common.all; 

entity MUX is 

    Port (
     D  : in Mem_in; 
     Q  :   out DinDout; 
     SEL  :   in  STD_LOGIC_VECTOR (11 downto 0) 
     ); 
end MUX; 

Warum kann ich STD_LOGIC_VECTOR nicht verwenden? Wenn ich es zu DinDout ändere, bekomme ich ein anderes Problem in der Architektur: to_integer wird nicht deklariert; Der indizierte Name ist kein Dindout.

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.numeric_std.all; 
-- Custom types -- 
package Common is 
    type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0); 
    type DinDout is range 11 downto 0; 
end package Common ; 

Und das Unternehmen mit Paket Häufig:

-- Use Custom Type 
use work.Common.all; 

entity MUX is 

    Port (
     D  : in Mem_in; 
     Q  :   out DinDout; 
     SEL  :   in  DinDout 
     ); 
end MUX; 

architecture Arc of MUX is 
begin 
    Q <= D(to_integer(unsigned(SEL))); 
end Arc; 

wie kann ich std_logic_vector meinem Paket hinzufügen oder lösen diese zwei Fehler: to_integer wird nicht erklärt; indizierter Name ist kein Dindout?

dank

+0

Zusätzlich zu der MUX Entitätsdeklaration fehlende Kontexteinträge in der vorhergehenden Kontextklausel hat Ihr 'Mem_in' Array Typ 2 \ * \ * 6 + 1 (2 \ * \ * 6 ** downto ** 0) Elemente Gehen Sie die gleiche Anzahl von verschiedenen Indizes nicht 2 \ * \ * DinDout'length verursacht eine Einschränkung Einschränkungen für einige Werte von SEL. Ihre Speichergröße sollte eine Potenz von 2 sein, die der Länge von SEL entspricht. Es scheint ungewöhnlich, einen Port mit so vielen "Bits" (2 \ * \ * 6 + 1 * 12 - die Länge eines Speicherelements oder 780) zu versehen. Dieser Speicher liest MUX, der sich wahrscheinlich mit dem tatsächlichen für D besonders befinden sollte – user1155120

+0

Typ DinDout ist ein abstrakter numerischer Typ mit einem Wertebereich von 11 downto 0, während D (to_integer (unsigned (SEL))) ein indiziertes Element von D ist, das ein Array von std_logic_vectors mit einem Indexbereich von 11 downto ist 0. Sie sind verschiedene Arten. Beachten Sie, dass Ihre angenommene Antwort nicht adressiert * ... ODER diese zwei Fehler beheben: ... indizierter Name ist kein Dindout? * Sie haben mehrere Fehler. – user1155120

Antwort

2

Sie haben zwei Bibliothekseinheiten in einer Datei (wenn es sich um eine einzelne Datei haben Sie zitiert). Obwohl ich nicht sicher bin, was passiert, schätze ich, dass es den Kontext mit jeder Einheit neu startet.

Das würde bedeuten, dass Sie library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.numeric_std.all; vor use work.Common.all; wiederholen müssen.

Auch 2**6 to 0 ist ein Nullbereich, der 0 to 2**6 oder 2**6 downto 0 sein sollte.

+0

danke es funktionierte, aber jetzt habe ich eine Problem hier: D (to_integer (unsigned (SEL))); es sagt "indexed name ist kein dindout." Wie kann ich indexieren, um zum Beispiel Mem_in (int (X)) zu bekommen x 2 ** 6 bis 0? – user169808

Verwandte Themen