我真的不明白。这是一个简单的常量向量声明。
如果是矢量,是否应该允许它有任何值(在我的情况下为3)?
错误:
Width mismatch, location has width 2, value 3
代码:
constant s0: std_logic_vector := "000";
答案 0 :(得分:0)
原来,问题出在代码的其他地方,我试图用宽度错误的向量进行计算。问题是错误是在常量声明中报告的,而不是在错误的地方报告
答案 1 :(得分:-1)
就这样做:
constant s0: std_logic_vector(0 to 2) := "000";
或
constant s0: std_logic_vector(2 downto 0) := "000";
或
constant s0: std_logic_vector(CONSTANT_X to CONSTANT_X+2) := "000";
如果没有RANGE(大小),则无法声明常量/信号。未排列的样式仅支持功能,您必须将其分配到带范围的信号/变量。
function cast_v(vector_in: std_logic_vector; OUT_W: integer) return std_logic_vector is
constant IN_W : integer := vector_in'length;
constant CAST_W : integer := OUT_W - IN_W;
variable cast_vector: std_logic_vector(CAST_W-1 downto 0);
variable vector_out : std_logic_vector(OUT_W-1 downto 0);
begin
gen_bits: for i in CAST_W-1 downto 0 loop
cast_vector(i) := vector_in(IN_W-1);
end loop gen_bits;
vector_out := cast_vector & vector_in;
return vector_out;
end cast_v;
还有一件事,先生。请仔细阅读您的VHDL食谱。