VHDL通用多维数组

3
我使用这个实体:
ENTITY SPI_PT100 IS
GENERIC
(
    PT100_DATA_SIZE     : INTEGER := 8; --nombre de data à envoyer par trame
    PT100_NB_MOSI       : INTEGER := 3; --nombre de ligne MOSI
    PT100_10ms_CNT      : INTEGER := 400000; --nb tick in_clk entre deux trames (défaut 10ms @ 40Mhz) 
    PT100_500ns_CNT     : INTEGER := 20 --nb de tick in_clk entre deux changement d'état sur SCLK (1/2 periode) (défaut : sclk = 1Mhz)
);
PORT
(
    --input
    in_clk          : IN  STD_LOGIC; --40Mhz
    in_data         : IN STD_LOGIC_VECTOR((PT100_DATA_SIZE-1) DOWNTO 0); --data à envoyer
    --output
    out_spi_sclk    : OUT  STD_LOGIC := '0'; --clk du SPI 
    out_spi_u_sync  : OUT STD_LOGIC := '1'; -- u_sync du SPI
    out_spi_mosi    : OUT  STD_LOGIC := '0' -- mosi du SPI
);
END ENTITY;

我希望将PT100_NB_MOSI用作通用的多维数组大小。
in_data : IN STD_LOGIC_VECTOR((PT100_DATA_SIZE-1) DOWNTO 0); ==> 
in_data : IN STD_LOGIC_VECTOR((PT100_NB_MOSI-1) DOWNTO 0)) OF ((PT100_DATA_SIZE-1) DOWNTO 0);

我知道可以使用类型或子类型来完成,但在这种情况下,我认为必须使用包。 是否有仅使用通用机制的解决方案?


2
这可以在VHDL-2008中完成。目前尚不清楚需要多少年才能得到工具供应商的支持。 - Kevin Thibedeau
1个回答

2
很遗憾,不能这样做。您可以使用一维向量:in_data : IN STD_LOGIC_VECTOR((PT100_NB_MOSI*PT100_DATA_SIZE-1) DOWNTO 0); 并访问 in_data(i*PT100_DATA_SIZE+j) 来访问 (i, j) 数组元素。
否则,您必须在包文件中将其声明为数组:type my_arr is array(natural range <>) of std_logic_vector(PT100_DATA_SIZE-1 DOWNTO 0); 然后包括该数组:use work.my_pkg.my_arr; (或者对整个包使用 use work.my_pkg.all;),并在接口中使用它:in_data : IN my_arr((PT100_NB_MOSI-1) DOWNTO 0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接