subtype bit_32 is bit_vector(31 downto 0); -- type bit_32_array is array (bit range <>) of bit_32; function resolve_bit_32 (driver : in bit_32_array) return bit_32; Hallo zusammen, vielleicht kann mir einer helfen. Obige Funktionen und Typen habe ich in einer Package deklariert. Versuche ich das ganz Konstrukt zu simulieren, kommt folgende Fehlermeldung, die ich nicht ganz verstehe: Resolution functions not supported on any type other than enumeration and scalar types.
subtype bit_32 is bit_vector(31 downto 0); type bit_32_array is array (integer range <>) of bit_32; function resolve_bit_32 (driver : in bit_32_array) return bit_32; Sorry bei mir hat sich ein kleiner Fehler eingeschlichen. Es muss natürlich integer range heißen.
Was macht resolve_bit_32()? Ein bit ist ein Aufzählungstyp ('0','1'), ein bit_vector nicht mehr.
Hallo, diesen Zusammenhang hatte ich auch schon gefunden. Es geht darum, wie kann ich einen 32Bit Bus Signalen treiben, wenn er ein bidirektionales Signal ist und ich nicht den Datentyp std_logic verwenden will. Mir geht es explizit darum, dieses Konstrukt für ein bit_vector Signal zu beschreiben. Wäre es aber vielleicht möglich, dass der ModelSim Simulator vom Xilinx Packet, dass nur nich auflösen kann? Die Funktion resolve_bit_32 ist einfach eine Auflösungsfunktion für Signale mit multiplen Treibern.
> Die Funktion resolve_bit_32 ist einfach eine Auflösungsfunktion für > Signale mit multiplen Treibern. Wie sieht die aus? Das muß dann explizit ein MUX sein. > wie kann ich einen 32Bit Bus Signalen treiben, wenn er ein bidirektionales > Signal ist und ich nicht den Datentyp std_logic verwenden will Gar nicht. Denn es ist ja gerade der Trick bei std_logic, dass es den Typ Z (sowie W, L und H) gibt, der sich gegen eine harte 0 oder 1 rezessiv zeigt. Bei einem Bit gibt es nur 1 und 0, beide sind gleich stark, da kann nichts aufgelöst werden...
Vielen Dank, jetzt ist es klar. Da habe ich wieder etwas dazu gelernt ;-))
Hallo, ich habe jetzt nur noch mal ne Nachfrage des Verständnisses wegen. Wenn ich mit mehreren 32 Bit Signalen auf auf einen Bidirektionalen Port zugreifen möchte, werden alle 32 Bit Signale in ein Array geschrieben. Dieses Array wird durch eine For Schleife in der Auflösungsfunktion durchgearbeitet und OR verknüpft mit dem resultierenden Port in etwa so: driver ist vom Typ in bit_32_array und result : bit_32;(siehe oben) for in driver'range loop result:=result or driver(i); end loop; return result; Durch so eine Verknüpfung von 32Bit Signalen mit einem Integer Array könnten Zustände entstehen, die weder 0 oder 1 haben. Aus diesem Grund wird obige Fehlermeldung ausgegeben? Wenn man anstelle eines Datentyps bit_vector den Typ std_logic_vector verwendet, würde die Auflösung deshalb funktionieren, weil der std_logic Datentyp mehr als nur die Zustände 0 und 1 darstellen kann. Habe ich das so richtig verstanden?
> würde die Auflösung deshalb funktionieren, weil der std_logic Datentyp > mehr als nur die Zustände 0 und 1 darstellen kann. Und weil es dafür eine Auflösungsfunktion gibt... Das steht aber in jedem halbwegs brauchbaren VHDL-Buch. http://objectmix.com/vhdl/208460-what-difference-between-types-std_logic-std_ulogic.html http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/00-intro/03-stdlogic/resolution.html
Vielen Danke für die Antworten. Ändere ich aber den bit_vector in std_logic_vector erscheint derselbe Fehler. subtype bit_32 is std_logic_vector(31 downto 0); type bit_32_array is array(integer range <>) of bit_32; function resolve_bit_32(driver : in bit_32_array) return bit_32; function resolve_bit_32 (driver: in bit_32_array) return bit_32 is constant float_value: bit_32 :=X"0000_0000"; variable result: bit_32 := float_value; begin for i in driver'range loop result := result or driver(i); end loop; return result; end resolve_bit_32; Es erscheint folgende Fehlermeldung: Resolution functions not supported on any type other than enumeration and scalar types Warum geht das std_logic_vector nicht auf array (integer range <>) bzw. Wie kann ich es lösen.
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.