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
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...