我正在开发 BIST 引擎的描述,我的经理要求我从 Verilog 过渡到 VHDL。我对 VHDL 非常生疏,我无法找出正确的数据类型来提供给我的代码中的地址寄存器。大多数时候,地址用于索引到数组中。
data : std_logic_vector (2**W-1 downto 0);
...
output = data(addr);
但有时,我需要执行按位运算(例如,在地址中找到最低有效 1 的代码):
least_one(0) <= addr(0);
PRIORITY_ENCODER : for i in 1 to (W-1) generate
least_one(i) <= addr(i) and not or_reduce(addr(i-1 downto 0));
end generate PRIORITY_ENCODER;
least_one(W) <= not or_reduce(addr);
最后,我还依赖地址在溢出时环绕而不会出现问题(即 1111+1 = 0 和 0-1 = 1111)。
那么,考虑到所有这些不同的用途,我应该为地址提供什么数据类型或子类型?当我使用整数和相关类型时,执行按位运算时会出错:
ncvhdl_p: *E,APNPFX (filename,17|20): can not make sense of P(...)
当我使用 std_logic_vector 或类似方法时,尝试将地址用作数组索引时会出错:
ncvhdl_p: *E,INTYMM (filename,52|17): array index type mismatch [6.4]
我在这里似乎处于一个没有胜利的境地。我使用什么数据类型?请注意,解决方案必须是可合成的。谢谢