Hallo ich versuche gerade etwas in VHDL zu schreiben, habe aber ein Problem mit konvertierung, wo ic hnicht weiter komme - hoffe jemand kann mir sagen was die sache ist. Also ich habe 4 Komponenten, die folgendermaßen zusammengesetzt sein sollen: ______________________________________________________ | system_modul | | | | __________ __________ _________ | | | | | | | | | | | RX_modul | sig_in | my_mux | sig_out | TX_modul | | |_| |________| |_________| |_| | | | | | | | | | |___________| |__________| |__________| | |________________________________________________________| jetzt haben die RX und TX module unter anderen folgende ports sig_in : in unsigned(7 downto 0); -- TX port sig_out : out unsigned(7 downto 0); -- RX port während my_mux folgende schnittstelle hat: entity my_mux is port ( ... sig_in : in std_logic_vector(3 downto 0); sig_out : out std_logic_vector(6 downto 0) ); end entity my_mux; ich möchte dabei folgende port map erstellen: make_my_mux : my_mux port map ( ... sig_in => conv_std_logic_vector ( sig_out, 4 ), sig_out => conv_std_logic_vector ( sig_in, 7 ) ); D.h. für die konvertierung von unsigned ( 7 downto 0) möchte ich in std_logic_vector ( 3 downto 0) bzw ( 6 down_to 0 ) versuche ich die conv_std_logic_vector funktion zu verwenden, welche laut dieser http://www.cs.sfu.ca/~ggbaker/reference/std_logic/arith/conv_std_logic_vector.html Beschreibung genau das machen sollte. Habe dazu die ieee.std_logic_arith.ALL bibliothek eingebunden. Die überflüssige zeichen können ruhig abgeschnitten werden, es ist kein problem. Jedoch erhalte ich nur fehler zurück: 2x conv_std_logic_vector can not have such operands in this context Formal sig_in of mod_sync_sevenseg with no default value must be associated with an actual value Was mache ich falsch, wieso kommen diese meldungen? Danke p.s. RX, TX und MUX sind nicht von mir, deswegen möchte ich da nichts verändern, sondern nur zusammen mappen
Dima Schmitt schrieb: > Habe dazu die ieee.std_logic_arith.ALL bibliothek eingebunden. Dir fehlt vermutlich noch die use IEEE.STD_LOGIC_UNSIGNED.ALL; oder die use IEEE.STD_LOGIC_SIGNED.ALL; !!!ABER!!! Ich verweise da mal auf den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete" Und dann auf die tollen und durchgängigen Konvertierungsfunktionen und Casts der numeric_std: http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html
Dima Schmitt schrieb: > Hallo > > ich versuche gerade etwas in VHDL zu schreiben, habe aber ein Problem > mit konvertierung, wo ic hnicht weiter komme - hoffe jemand kann mir > sagen was die sache ist. Wir wollen es versuchen... > > Also ich habe 4 Komponenten, die folgendermaßen zusammengesetzt sein > sollen: > > ________________________________________________________ > | system_modul | > | | > | __________ __________ _________ | > | | | | | | | | > | | RX_modul | sig_in | my_mux | sig_out | TX_modul | | > |_| |________| |_________| |_| > | | | | | | | | > | |___________| |__________| |__________| | > |________________________________________________________| > > jetzt haben die RX und TX module unter anderen folgende ports > sig_in : in unsigned(7 downto 0); -- TX port > sig_out : out unsigned(7 downto 0); -- RX port > > während my_mux folgende schnittstelle hat: > entity my_mux is > port > ( > ... > sig_in : in std_logic_vector(3 downto 0); > sig_out : out std_logic_vector(6 downto 0) > ); > end entity my_mux; > > ich möchte dabei folgende port map erstellen: > make_my_mux : my_mux > port map > ( > ... > sig_in => conv_std_logic_vector ( sig_out, 4 ), > sig_out => conv_std_logic_vector ( sig_in, 7 ) > ); Das geht einfacher. make_my_mux : my_mux port map ( ... sig_in => sig_out(3 downto 0), sig_out => sig_in -- Wenn sig_out und sig_in die gleiche Laenge haben. ); > > D.h. für die konvertierung von unsigned ( 7 downto 0) möchte ich in > std_logic_vector ( 3 downto 0) bzw ( 6 down_to 0 ) versuche ich die > conv_std_logic_vector funktion zu verwenden, welche laut dieser > http://www.cs.sfu.ca/~ggbaker/reference/std_logic/arith/conv_std_logic_vector.html > Beschreibung genau das machen sollte. Habe dazu die > ieee.std_logic_arith.ALL bibliothek eingebunden. Die überflüssige > zeichen können ruhig abgeschnitten werden, es ist kein problem. Im Allgemeinen wird davon abgeraten die Bibliother zu verwenden die die Funktion conv_std_logic_vector beinhaltet (std_logic_arith). Verwende stattdessen, wenn mal was konvertieren/casten musst die numeric_std Bibliothek. Lothar Miller hat ein schönes Diagramm dass die Wandlung zwischen den Typen darstellt: http://www.lothar-miller.de/s9y/uploads/Bilder/Usage_of_numeric_std.pdf ... hoffe das ist OK den Link hier zu posten. > > Jedoch erhalte ich nur fehler zurück: > 2x conv_std_logic_vector can not have such operands in this context > Formal sig_in of mod_sync_sevenseg with no default value must be > associated with an actual value > > Was mache ich falsch, wieso kommen diese meldungen? > > Danke > > p.s. RX, TX und MUX sind nicht von mir, deswegen möchte ich da nichts > verändern, sondern nur zusammen mappen Gruß, Hendrik
Heinrich H. schrieb: > Lothar Miller hat ein schönes Diagramm Dankesehr... ;-) Aber ich darf das Lob an einen mir unbekannten Autor weitergeben, der diese sehr übersichtliche Darstellung herausgefunden hat. Ich habe sie dann nur noch ein wenig "aufpoliert". Dima Schmitt schrieb: > jetzt haben die RX und TX module unter anderen folgende ports > sig_in : in unsigned(7 downto 0); -- TX port > sig_out : out unsigned(7 downto 0); -- RX port Mein Vorschlag: nimm an den Ports std_logic und dessen Vektoren.
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.