Ich bin neu in diesem Bereich. Ich habe ein Problem mit der Umwandlung der Standardlogikeingabe in reale Werte. Ich habe to_float
die Funktion verwendet, aber es wurde immer ein Fehler angezeigt. Als ich das Paket verwendet habe float_generic_pkg
, wurde ein Fehler angezeigt:
Kann in der Bibliothek nicht gefunden werden.
Ich habe auch versucht, eine neue Bibliothek zu erstellen, ieee_proposed
aber es zeigte immer noch einen Fehler.
Ich habe es IEEE.numeric_std.all
auch mit versucht.
Wieder gab es einen <to_real>
nicht deklarierten Fehler.
Muss ich ein anderes Bibliothekspaket verwenden?
Ich verwende ISE Design Suite 14.7. Eine Sache noch: es ist auch für Synthsis. Bitte hilf mir.
Hier ist der Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.float_pkg.all;
use ieee.float_generic_pkg.all;
entity dafsm is
port (x : in std_logic_vector (1 downto 0);
y : out std_logic_vector (1 downto 0));
end dafsm;
architecture fpga of dafsm is
signal r,s : real range 0.0 to 15.0;
begin
r <= to_float(x);
s <= r * 0.5;
y <= to_slv(s);
end fpga;
Die Fehlermeldungen:
Zeile 4: Kann <float_pkg> nicht in Bibliothek <ieee> finden. Stellen Sie sicher, dass die Bibliothek kompiliert wurde und dass eine Bibliothek und eine Verwendungsklausel in der VHDL-Datei vorhanden sind.
Zeile 5: Kann <float_generic_pkg> nicht in Bibliothek <ieee> finden. Stellen Sie sicher, dass die Bibliothek kompiliert wurde und dass eine Bibliothek und eine Verwendungsklausel in der VHDL-Datei vorhanden sind.
Zeile 12: <real> ist nicht deklariert.
Zeile 14: <r> ist nicht deklariert.
Zeile 15: <s> ist nicht deklariert.
Zeile 16: <y> ist nicht deklariert.
Ich habe einige Änderungen an deinem Code vorgenommen. Die Änderungen werden im Folgenden erläutert.
library ieee;
use ieee.std_logic_1164.all;
library ieee_proposed;
use ieee_proposed.float_pkg.all;
entity dafsm is
port (
x: in std_logic_vector (31 downto 0) := x"0000002A";
y: out std_logic_vector (31 downto 0)
);
end dafsm;
architecture fpga of dafsm is
function to_string(inp: std_logic_vector) return string is
variable image_str: string (1 to inp'length);
alias input_str: std_logic_vector (1 to inp'length) is inp;
begin
for i in input_str'range loop
image_str(i) := character'VALUE(std_ulogic'IMAGE(input_str(i)));
end loop;
-- report "image_str = " & image_str;
return image_str;
end;
signal r,s : real range 0.0 to 15.0;
begin
r <= to_real(to_float(x));
s <= r * 0.5;
y <= to_slv(to_float(s));
monitor:
process(s)
begin
report "y = " & to_string(to_slv(to_float(s)));
end process;
end architecture fpga;
Diese analysiert, ausgearbeitet und simuliert.
Die Veränderungen:
Sie haben alle anbieteridentifizierenden Informationen sorgfältig aus Ihren Fehlermeldungen entfernt, und ich habe ihre Implementierungen sowieso nicht, ich habe ghdl verwendet.
Ich habe zuerst die Quellen in einem Verzeichnis namens ieee_proposed kompiliert, um eine Bibliothek ieee_proposed zu erstellen:
ghdl -a --work=IEEE_VORSCHLAG standard_textio_additions_c.vhdl ghdl -a
--work=IEEE_VORSCHLAG standard_textio_additions_c.vhdl ghdl -a --work=IEEE_VORSCHLAG std_logic_1164_additions.vhdl ghdl -a --work=IEEE_VORSCHLAG numeric_std_additions.vhdl ghdl -a --work =IEEE_VORSCHLAG numeric_std_unsigned_c.vhdl ghdl -a --work=IEEE_VORSCHLAG Fixed_float_types_c.vhdl ghdl -a --work=IEEE_VORSCHLAG fix_pkg_c.vhdl ghdl -a --work=IEEE_VORSCHLAG Float_pkg_c.vhdl
Wir brauchen das alles nicht, um Ihren Code zu demonstrieren, aber es gibt sie.
Analysieren, ausarbeiten und simulieren Sie dann Ihren Code:
ghdl -a -P./ieee_proposed dafsm.vhdl
ghdl -e -P./ieee_proposed dafsm
ghdl -r dafsm
dafsm.vhdl:33:9:@0ms:(Berichtshinweis): y = 0000000000000000000000000000000
dafsm.vhdl:33:9 :@0ms:(Hinweis melden): y = 00000000000000000000000000010101
Es gibt zwei Ausgänge, weil es ein Initialisierungsereignis gibt, s
bevor s
zugewiesen wird r * 0.5
. Hinweis: Ich habe den Monitorprozess sensibel für gemacht, s
da y eine Ausgabe ist und nicht in einer Prozesssensitivitätsliste erscheinen kann. Ich habe den Wert neu erstellt, y
der zugewiesen wurde.
Das zweite ist das Ergebnis, 15 in Hex ist 21 Dezimal.
Das -P./ieee_proposed weist ghdl an, im aktuellen Verzeichnis nach einem Unterverzeichnis library ieee_proposed zu suchen (der Name des Verzeichnisses ist derselbe wie der der Bibliothek). Ich hätte es in den Bibliothekssuchpfad von ghdl einfügen können, es schien für diese Demonstration unnötig zu sein.
Die Verwendung anderer Tools kann variieren.
David Bishop versichert uns, dass dies für Synthesen geeignet sein sollte. Ich habe es nicht selbst versucht.
Bitte nutzen Sie die Dokumentation auf der oben genannten Webseite.
user_1818839
aman2392
aman2392
user_1818839
mng