Forum: FPGA, VHDL & Co. 2x std_logic pasten zu std_logic_vector


von Andreas Schuler (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Andreas Schuler (Gast)


Lesenswert?

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 ?

von Andreas Schuler (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Andreas Schuler (Gast)


Lesenswert?

Okay, da hast Du sicher Recht.

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
Noch kein Account? Hier anmelden.