函数能否返回子类型?Xilinx编译器编译异常是否为Bug?
VHDL函数返回子类型的正确写法
首先明确:你写的function foo() return signed(15 down 0)不符合VHDL语法规范,Xilinx编译器报错不是Bug,是正常的语法检查结果。
VHDL要求函数的返回类型必须是一个已经定义好的类型或子类型,不能直接在返回位置用范围限定(比如(15 down 0))来指定子类型。要实现返回特定范围的signed类型,有两种正确写法:
- 方法一:提前定义子类型,函数返回该子类型
subtype signed_16 is signed(15 downto 0); -- 预先定义16位signed子类型 function foo return signed_16 is begin -- 函数逻辑示例:返回全0的16位signed值 return (others => '0'); end function foo;
- 方法二:返回基类型
signed,在函数内部生成符合目标范围的返回值
function foo return signed is begin -- 使用to_signed生成指定长度的signed值,确保返回16位数据 return to_signed(0, 16); end function foo;
你之前改成return signed能编译通过,就是因为符合了“返回已定义类型”的语法要求,此时函数返回的是可变长度的signed类型,你需要在函数内部或调用处保证返回值的位宽符合需求。
内容的提问来源于stack exchange,提问作者Howard Lovatt
相关产品推荐
相关产品推荐

