www.mikrocontroller.net

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


Autor: Andreas Schuler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Schuler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Andreas Schuler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_lo...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Andreas Schuler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, da hast Du sicher Recht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.