Forum: FPGA, VHDL & Co. Concatenate in Instanziierung


von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Hallo!

Ich versuche folgendes:
1
  fifo_inst: entity work.FIFO
2
    generic map (
3
      FIFO_ADDRWIDTH => FIFO_ADDRWIDTH_C,
4
      FIFO_WORDWIDTH => FIFO_WORDWIDTH_C)
5
    port map (
6
      data_in  => data_received_s & reg_addr, -- data_in: std_logic_vector(15 downto 0)
7
      data_out => data_out,
8
      wr_i     => reg_wea,
9
      rd_i     => rd_i,
10
      empty_o  => empty_o,
11
      full_o   => full_o,
12
      clk_i    => clk_i);

Die Stelle die Probleme bereitet ist der '&' Operator bei der Zuweisung 
an data_in.
Die Synthese läuft ohne Probleme durch, aber die Simulation schmeisst 
den folgenden Fehler und bricht ab:
../rtl/camera_control_top.vhd:264:36: actual expression must be globally 
static

Ich werde mir jetzt erstmal mit einem Signal helfen, dass die beiden 
Signale vom Typ std_logic_verctor(7 downto 0) data_received_s und 
reg_addr zu einem 16 bit std_logic_vector vereint und diesen dann an 
data_in übergeben.

Aber gibt es eine Möglichkeit das in der Instantiierung zu machen?

Gruß,

     hhanff

von PittyJ (Gast)


Lesenswert?

Ich habe das so gemacht, und es funktionierte bei mir prima.
Also kein Concenate, sondern die Bits explizit zugewiesen.

 DDROutport : DDR_OUT
 port map
 (
   datain_h(3 downto 0) => OutByte(3 downto 0),
   datain_h(4)          => TXOut,
   datain_l(3 downto 0) => OutByte(7 downto 4),
   datain_l(4)          => TXOut,
   ...


müßte bei dir in etwa sein
 data_in(15 downto 8  => data_received_s,
 data_in( 7 downto 0) => reg_addr,

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

PittyJ schrieb:
> Ich habe das so gemacht, und es funktionierte bei mir prima.
> Also kein Concenate, sondern die Bits explizit zugewiesen.
>
>  DDROutport : DDR_OUT
>  port map
>  (
>    datain_h(3 downto 0) => OutByte(3 downto 0),
>    datain_h(4)          => TXOut,
>    datain_l(3 downto 0) => OutByte(7 downto 4),
>    datain_l(4)          => TXOut,
>    ...
>
>
> müßte bei dir in etwa sein
>  data_in(15 downto 8  => data_received_s,
>  data_in( 7 downto 0) => reg_addr,

Das isses... daran hab' ich nicht gedacht. Vielen Dank aus Bremen,

     hhanff

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.