我有一个 FIFO,它的大小是根据包中的参数确定的:
signal fifo : std_logic_vector(FIFO_SIZE*8 -1 downto 0);
我还有一个 4 位向量 (numOfBytes),表示在任何给定时间 FIFO 中有多少字节(最多 8 个)。
我希望根据 numOfBytes 信号确定 FIFO 中的数据输出(单个字节):
Do <= fifo(to_integer(unsigned(numOfBytes)*8 -1 downto to_integer(unsigned(numOfBytes)*8 -8) when numOfBytes /= x"0" else (others => '0');
在模拟时,这很好用,但是当我尝试合成它(使用 Synopsys DC)时,我在链接设计时得到一个详细说明错误“需要恒定值 (ELAB-922)”。
ELAB 代码的意思是“出现此错误消息是因为 RTL 描述的指示行中的表达式未按照语言要求计算为常量值。”
我还能如何制作输出多路复用器以便它进行合成?如果不是参数,我会将 Do 行更改为常规多路复用器,但它不能与参数一起使用。(当 fifo 为 4 字节时,我不能调用 fifo(63 downto 54)...)
ps 我一开始尝试使用 conv_integer ,但由于在网上找到了答案,所以改为 to_integer(unsigned()) 。