2x std_logic pasten zu std_logic_vector

Gast #1926712
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
Moderator (Firma: Titel) Persönliche Seite #1927162
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.
Gast #1927290
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 ?
Gast #1927298
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
Moderator (Firma: Titel) Persönliche Seite #1927313
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.