2017-10-10 67 views
-1

在vhdl中返回无约束向量的最佳方式是什么?返回无约束数组vhdl

function func(selector : natural) return std_logic_vector is 
begin 
    case selector is 
     when 3 => return std_logic_vector("11"); 
     when 4 => return std_logic_vector("101"); 
     when others => return std_logic_vector("0"); 
    end case; 
end function; 

在这种情况下,我得到字符串文字不能是一个类型转换操作数,所以它不工作。信号选择器是通用的,所以它不一定是可合成的。

+4

数字文字3和4后面有语法错误。是否使用显式指定类型的限定表达式?合格表达式:'std_logic_vector'(“11”)','std_logic_vector'(“101”);''和'std_logic_vector'(“0”)'。您没有显示的错误消息会告诉您,您无法将字符串转换为std_logic_vector,它们的元素类型不同(字符和std_ulogic)。那些':'应该是“=>”。 – user1155120

+0

The:instead of <=在这里是一个错误,我为stackexchange键入了这个新的部分,没有不必要的代码。在原始代码中还有“<=”。然而,它与'你在括号之前提到的。“谢谢很多。在这种情况下,你可以给我一个关于这个函数的提示吗? 将此复制到答案中,我会将其标记为已接受! –

+0

然后编辑您的问题... – JHBonarius

回答

1

你不能这样做。函数的返回值在被调用时需要与某些东西相关联,并且某些东西必须具有固定的宽度。换句话说,你必须说的东西,如:

s <= func(n); 

s将有一个固定的宽度,所以从你的函数所有的返回值必须具有相同的宽度。

+0

我的函数返回值用于具有无约束数组类型的通用映射。像通用地图(func(n))一样。泛型的宽度在较低的层级中进行评估。 –

+1

@FranzForstmayr在这种情况下,我不明白你在问什么。你可以这么说'when 3 => return“11”;'。 –

+0

好吧,我不知道这是可能的。我看到了,我只是觉得太复杂了! –