在Verilog中,您可以将逻辑向量用作另一个向量的索引:
assign idx = 4'b0010;
assign value = array[idx]; // same as array[2]
在VHDL中无法做到这一点,必须将类型转换为整数:
idx <= "0010";
value <= array(to_integer(idx)); -- same as array(2)
如果索引中包含X或Z会发生什么?就我而言,我有一个未初始化的索引寄存器:
idx <= "xxxx";
value <= array(to_integer(idx)); -- to_integer("xxxx") ???
在我公司,我们使用内部类型转换例程库,因此我实际上并没有直接使用to_integer,但是我们乐观地将X转换为0。从Verilog的背景来看,这似乎非常错误,并且X乐观的严重案例。在Verilog中,X会传播:
assign idx = 4'bxxxx;
assign value = array[idx]; // same as array[x], which is equal to X
VHDL是否可以在索引表达式中使用X?是否有建议的最佳实践来避免x乐观(“使用Verilog”之外)?