Array in Entity

Gast #2117147
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
Gast #2117580
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
Gast #2118306
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren