Hallo zusammen, ich habe 2 std_logic signals und einen FiFo der einen std_logic_vector(1 downto 0) als ausgang hat. Gibt es eine einfache Möglichkeit in VHDL die 2 Signale zu einem vector zu casten um sie direkt beim instanzieren des FiFo´s zu übergeben ? Also mein Versuch sah so aus: component async_fifo is generic( DATA_WIDTH :integer := 8; ADDR_WIDTH :integer := 4 ); port( -- Reading port. Data_out :out std_logic_vector (DATA_WIDTH-1 downto 0); Empty_out :out std_logic; ReadEn_in :in std_logic; RClk :in std_logic; -- Writing port. Data_in :in std_logic_vector (DATA_WIDTH-1 downto 0); Full_out :out std_logic; WriteEn_in :in std_logic; WClk :in std_logic; Clear_in:in std_logic ); end component; entity parallelizer is port( clk18432: in std_logic; din: in std_logic; data: out std_logic_vector(7 downto 0); crcok: out std_logic; startpacket: out std_logic; startbyte: out std_logic; en_datafifo: in std_logic; synctime: out std_logic_vector(15 downto 0); en_syncfifo: in std_logic ); end entity parallelizer; architecture behv of parallelizer is -- signals ... signal data_fromfifo: std_logic; signal prea_fromfifo: std_logic; ... begin ... DATAFF: pkg.async_fifo generic map(2,8) port map((data_fromfifo&prea_fromfifo),rden_dfifo,clk18432, data_tofifo,Full_out,'1',clk_sync,'0'); end architecture; wobei data_fromfifo und prea_fromfifo zu einem std_logic_vector verbunden werden sollten. Gruß krater
Welchen Fehler bekommst du? Schau mal, ob das zusammenpasst: component async_fifo is port( -- Reading port. Data_out :out std_logic_vector (DATA_WIDTH-1 downto 0); Empty_out :out std_logic; ReadEn_in :in std_logic; RClk :in std_logic; -- Writing port. Data_in :in std_logic_vector (DATA_WIDTH-1 downto 0); Full_out :out std_logic; WriteEn_in :in std_logic; WClk :in std_logic; Clear_in :in std_logic ); ---> 9 Ports map((data_fromfifo&prea_fromfifo),rden_dfifo,clk18432, data_tofifo,Full_out,'1',clk_sync,'0'); ---> nur 8 davon sind gemappt... :-o Mach statt "Mapping by Order" besser das "Mapping by Name", dann können solche Fehler nicht passieren.
Danke für den Hinweis nochmal die Zeile: DATAFF: dect_sniff_pkg.async_fifo generic map(2,8) port map((data_fromfifo&prea_fromfifo),empty_dfifo,rden_dfifo,clk18432,data_t ofifo,Full_out,'1',clk_sync,'0'); Ich mag "Mapping by Order" lieber, von wegen Schreibaufwand usw. Dieser Fehler wär mir allerdings sehr schnell aufgefallen, die Fehlermeldung kommt schon ein Argument vorher, deshalb hab ich weiter garnicht mehr gelesen... Diese Fehlermeldungen bekommen ich: # ** Error: C:/Dokumente und Einstellungen/Desktop/arbyte/DectSniffer/DectSniffer/simu/parallelizer.v hdl(54): (vcom-1162) Formal "data_out" of mode OUT cannot be associated with an expression. # ** Error: C:/Dokumente und Einstellungen/Desktop/arbyte/DectSniffer/DectSniffer/simu/parallelizer.v hdl(55): Signal "data_tofifo" is type ieee.std_logic_1164.std_logic; expecting type ieee.std_logic_1164.std_logic_vector. # ** Error: C:/Dokumente und Einstellungen/Desktop/arbyte/DectSniffer/DectSniffer/simu/parallelizer.v hdl(61): VHDL Compiler exiting Ich weiß halt nicht wie die Syntax ist um 2 std_logic zu einem std_logic_vector zu verbinden. Falls es überhaupt eine Möglichkeit gibt so wie ich das gern hätte. Was gäbs für Alternativen ?
Okay, und hier die Lösung: Leider muß man Mapping by Name benutzen, oder unschöne temporäre signale anlegen. Deshalb hier meine Lösung: DATAFF: dect_sniff_pkg.async_fifo generic map(2,8) port map( Data_out(0)=>data_fromfifo,Data_out(1)=>prea_fromfifo, Empty_out=>empty_dfifo, ReadEn_in=>rden_dfifo, RClk=>clk18432, Data_in(0)=>data_tofifo,Data_in(1)=>preamble, Full_out=>full_dfifo, WriteEn_in=>'1', WClk=>clk_sync, Clear_in=>'0'); weitere Infos hier: http://objectmix.com/vhdl/255860-connecting-std_logic-inout-ports-std_logic_vector-inout-port.html
Andreas Schuler schrieb: > Ich mag "Mapping by Order" lieber, von wegen Schreibaufwand usw. Aber wenn du diesen Code, wo sich an jedem Port die Namen ändern, in einem halben Jahr wieder anschaust, wirst du an dem Mapping by Name froh sein. Von wegen Nachvollziehbarkeit. Glaubs mir... ;-) > Leider muß man Mapping by Name benutzen... Ich mache das ausschliesslich so, deshalb hatte ich mich auch gewundert, dass es bei dir nicht geht...
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.