用XST综合工具check syntax工程时,提示如下错误

2019-03-25 09:15发布

ERROR:HDLParsers:3375 - "D:/FPGA_code/p240_fir2/p240_fir2.vhd" Line 66. Choices for an array aggregate (Attribute name) must be locally static unless there is only one choice. (LRM 7.3.2.2)

代码如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity p240_fir2 is
    GENERIC(n : integer := 4;
    m : integer := 4
);
Port ( x : in SIGNED(m-1 downto 0);
        clk : in STD_LOGIC;
        rst : in STD_LOGIC;
        y : OUT SIGNED(2*m-1 DOWNTO 0));
end p240_fir2;

architecture Behavioral of p240_fir2 is
       TYPE registers IS ARRAY (n-2 DOWNTO 0) OF SIGNED(m-1 DOWNTO 0);
       TYPE coefficients IS ARRAY (n-1 DOWNTO 0) OF SIGNED(m-1 DOWNTO 0);
        SIGNAL reg : registers;
        CONSTANT coef : coefficients := ("0001","0010","0011","0100");
begin
        PROCESS(clk, rst)
        VARIABLE acc, prod : SIGNED(2*m-1 DOWNTO 0) := (OTHERS => '0');
        VARIABLE sign : STD_LOGIC;
BEGIN
        -----------------------RESET------------------------------
        IF(rst = '1') THEN
        FOR i IN n-2 DOWNTO 0 LOOP
            FOR j IN m-1 DOWNTO 0 LOOP
                reg(i)(j) <= '0';
            END LOOP;
        END LOOP;
         --------------register inference + MAC-------------------
        ELSIF(clk'EVENT AND clk = '1') THEN
            acc := coef(0)*x;
            FOR i IN 1 TO n-1 LOOP
                sign := acc(2*m-1);
                prod := coef(i)*reg(n-1-i);
                acc := acc + prod;
          -----------check overflow-----------------------
                IF((sign = prod(prod'left))AND(acc(acc'left) /= sign)) THEN
                    acc := (acc'LEFT => sign, OTHERS => (NOT sign));
                END IF;
           END LOOP;
           reg <= x&reg(n-2 DOWNTO 1);


        END IF;
        y <= acc;

END PROCESS;

end Behavioral; 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
eeleader
1楼-- · 2019-03-25 19:14
< /

 

eeleader
2楼-- · 2019-03-25 23:43

 

  IF((sign = prod(prod'left))AND(acc(acc'left) /= sign)) THEN
这个句话使用的有点问题,要求PROD是准确的定义。例如PROD: STD_LOGIC_VECCTOR(3 DOWNTO 0), 同理ACC一样!
innerpeace
3楼-- · 2019-03-26 01:07
首先谢谢您的解答。

但不太理解什么叫做“准确的定义”。
eeleader
4楼-- · 2019-03-26 06:50
我的意思:不要参数化!

一周热门 更多>