从数组中选择VHDL列 type matrixsignal是标准逻辑向量(NBIT-1向下到0)的数组(级别向下到0); 信号p_矩阵,g_矩阵:矩阵信号; 信号列温度、列温度:标准逻辑向量(电平降至0); ... col_temp_p

从数组中选择VHDL列 type matrixsignal是标准逻辑向量(NBIT-1向下到0)的数组(级别向下到0); 信号p_矩阵,g_矩阵:矩阵信号; 信号列温度、列温度:标准逻辑向量(电平降至0); ... col_temp_p,vhdl,fpga,Vhdl,Fpga,您应该将matrixsignal定义为二维数组,而不是嵌套另一个一维数组的一维数组 type matrixsignal is array (LEVELS downto 0) of std_logic_vector(NBIT-1 downto 0); signal p_matrix, g_matrix: matrixsignal; signal col_temp_g, col_temp_p : std_logic_vector(LEVELS downto 0); ... col_temp_p&

您应该将
matrixsignal
定义为二维数组,而不是嵌套另一个一维数组的一维数组

type matrixsignal is array (LEVELS downto 0) of std_logic_vector(NBIT-1 downto 0);
signal p_matrix, g_matrix: matrixsignal;
signal col_temp_g, col_temp_p : std_logic_vector(LEVELS downto 0);

...

col_temp_p<=p_matrix(LEVELS downto 0)(j-1);
col_temp_g<=g_matrix(LEVELS downto 0)(j-1);
该软件包提供了这种类型的as(std_logic_matrix)以及大量的操作函数和程序。例如,PoC定义了如下功能:

type matrixsignal is array(LEVELS downto 0, NBIT - 1 downto 0) of std_logic;
用法:

function get_col(slm : T_SLM; ColIndex : natural) return std_logic_vector is
  variable slv      : std_logic_vector(slm'range(1));
begin
  for i in slm'range(1) loop
    slv(i)  := slm(i, ColIndex);
  end loop;
  return slv;
end function;
子类型矩阵信号为T_SLM(级别降至0,NBIT-1降至0);
信号p_矩阵,g_矩阵:矩阵信号;
信号列温度、列温度:标准逻辑向量(电平降至0);
...

col_temp\p您既不提供也不识别错误。可以从代码段构造MCVe,但它不做您想要的事情,而是从前缀为切片名称的索引名称中获取一个级别,而不是获取一个列。当NBIT-1不等于级别时,可能会发生边界错误。(切片名称是其前缀的完美子集)。如果目标长度正确,可以对一维数组的元素(std_logic_vector)进行列切片,并使用函数构造std_logic_vector。“转角”功能并不意味着任何硬件只是命名组织。Patrick和他的PoC合著者开发了整个库。现在还不清楚整个作品是否适用于这里,推广它似乎有点像鼓励,但没有强调在没有一些开销的情况下创建衍生作品的权利。@user1155120我已经介绍了回答他的问题所需的解决方案(函数)。通过对所用软件包的正确归属,I)遵守PoC的Apache 2.0许可证;b) 我保护该代码不会成为StackOverflow许可的CC-BY-SA;c) 我不会假装我们每天都要重新发明轮子。
subtype matrixsignal is T_SLM(LEVELS downto 0, NBIT - 1 downto 0);
signal p_matrix, g_matrix     : matrixsignal;
signal col_temp_g, col_temp_p : std_logic_vector(LEVELS downto 0);

...

col_temp_p <= get_col(p_matrix, j - 1);
col_temp_g <= get_col(g_matrix, j - 1);