如何传递长度为0的空integer_vector(即NULL数组)?
解决VHDL中传递空integer_vector给过程的问题
错误原因
你使用的""是字符串字面量,和过程参数要求的integer_vector类型完全不匹配,VHDL没有对应的隐式转换规则,因此编译器无法找到匹配的子程序入口,抛出vcom-1600错误。
正确实现方式
VHDL中创建空数组的标准语法是类型名'(),直接用这个语法生成空的integer_vector即可:
方法1:标准空数组语法
Transaction(RX_BYTES => integer_vector'());
方法2:通过颠倒范围生成空数组(可选)
如果需要显式指定范围(空数组的范围上下界只需满足上界小于下界即可):
Transaction(RX_BYTES => integer_vector(0 downto 1));
完整可运行代码
entity foo is end entity foo; architecture bar of foo is procedure Transaction ( constant RX_BYTES : integer_vector ) is begin report "RX_BYTES'length = " & to_string(RX_BYTES'length); end procedure; begin Transaction(RX_BYTES => integer_vector'()); -- 此处修正为正确的空数组传递 end architecture bar;
运行后,ModelSim会输出预期结果:
** Note: RX_BYTES'length = 0
内容的提问来源于stack exchange,提问作者El-Coder-SB
相关产品推荐
相关产品推荐

