Forum: FPGA, VHDL & Co. Array in Entity


von Stephan (Gast)


Lesenswert?

Hallo zusammen,

ich möchte gerne in meiner Entity ein Generic als Array-Typ definieren:
1
filter_coef_g : array( 0 to 3, 0 to 3 ) of std_logic_vector;

Dieser Code besteht leider den Syntaxcheck nicht.

Gibt es eine Lösung ohne ein Package benutzen zu müssen?

Vielen Dank und Grüße
Stephan

von Duke Scarring (Gast)


Lesenswert?

Stephan schrieb:
> Dieser Code besteht leider den Syntaxcheck nicht.
Kannst Du uns die komplette Datei, inklusive Fehlermeldung zur Verfügung 
stellen?

Duke

von Stephan (Gast)


Lesenswert?

Hej,

hier hab ich die Entity.
1
entity generic_fir is
2
  Generic (
3
          taps_g           : positive := 3; -- number of filter taps
4
        poly_g           : positive := 2; -- number of polyphases
5
filter_coef_g : array( 0 to 3, 0 to 3 ) of std_logic_vector;       
6
        addr_width_g     : positive := 1; -- width of coefficient address
7
        din_width_g      : positive := 18; -- width of data in
8
        dout_width_g     : positive := 36; -- width of data out
9
        coef_width_g     : positive := 18; -- width of coefficients
10
        coef_str_width_g : positive := 20; -- field width of coefficients inside init string; coefficients assumed right-justified
11
        marker_width_g   : positive := 1; -- width of marker port
12
        channel_g        : positive := 1); -- number of input channels
13
  
14
    Port ( clk : in  STD_LOGIC;
15
           ce : in STD_LOGIC; -- unused
16
           din : in STD_LOGIC_VECTOR(din_width_g-1 downto 0);             -- data input
17
           en_in  : in  STD_LOGIC;                                      -- data enable                    
18
           marker_in : in STD_LOGIC_VECTOR(marker_width_g-1 downto 0);    -- marker in 
19
           calc_en_in : in STD_LOGIC;                                   -- filter enable
20
           addr_in : in STD_LOGIC_VECTOR(addr_width_g-1 downto 0);        -- address line for polyphase
21
           dout : out STD_LOGIC_VECTOR(dout_width_g-1 downto 0);          -- filter output
22
           calc_en_out : out STD_LOGIC;                                 -- filter output valid
23
           marker_out : out STD_LOGIC_VECTOR(marker_width_g-1 downto 0);  -- marker out; delayed marker in signal
24
           rst : in STD_LOGIC);                                         -- rst signal, not used because fitler is operated in streaming mode
25
end generic_fir;


Der Fehler ist folgender:
Line 36. parse error, unexpected ARRAY

und bezieht sich genau auf die beschriebene Codezeile!
Vielleicht ist eine solche Konstruktion auch nicht VHDL konform.

Vielen Dank

von Duke Scarring (Gast)


Lesenswert?

Ich fürchte Du kommst da um ein package nicht drumherum. Ich würde es 
z.B. so machen:
1
package generic_fir_pack is
2
3
  type filter_coef_t is array(0 to 3, 0 to 3) of natural;
4
5
end package generic_fir_pack;
6
7
8
library ieee;
9
use ieee.std_logic_1164.all;
10
11
use work.generic_fir_pack.all;
12
13
14
entity generic_fir is
15
  generic (
16
    taps_g           : positive := 3;   -- number of filter taps
17
    poly_g           : positive := 2;   -- number of polyphases
18
    filter_coef_g    : filter_coef_t;
19
    addr_width_g     : positive := 1;   -- width of coefficient address
20
    din_width_g      : positive := 18;  -- width of data in
21
    dout_width_g     : positive := 36;  -- width of data out
22
    coef_width_g     : positive := 18;  -- width of coefficients
23
    coef_str_width_g : positive := 20;  -- field width of coefficients inside init string; coefficients assumed right-justified
24
    marker_width_g   : positive := 1;   -- width of marker port
25
    channel_g        : positive := 1    -- number of input channels
26
    );
27
  port (
28
    clk         : in  std_logic;
29
    ce          : in  std_logic;                                    -- unused
30
    din         : in  std_logic_vector(din_width_g-1 downto 0);     -- data input
31
    en_in       : in  std_logic;                                    -- data enable                    
32
    marker_in   : in  std_logic_vector(marker_width_g-1 downto 0);  -- marker in 
33
    calc_en_in  : in  std_logic;                                    -- filter enable
34
    addr_in     : in  std_logic_vector(addr_width_g-1 downto 0);    -- address line for polyphase
35
    dout        : out std_logic_vector(dout_width_g-1 downto 0);    -- filter output
36
    calc_en_out : out std_logic;                                    -- filter output valid
37
    marker_out  : out std_logic_vector(marker_width_g-1 downto 0);  -- marker out; delayed marker in signal
38
    rst         : in  std_logic                                     -- rst signal, not used because fitler is operated in streaming mode
39
    );
40
end generic_fir;

Duke

von Stephan (Gast)


Lesenswert?

Ok, das hatte ich schon geahnt. Trotzdem vielen Dank.

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.