常量声明时宽度不匹配vhdl

时间:2014-01-20 00:45:08

标签: vhdl

我真的不明白。这是一个简单的常量向量声明。

如果是矢量,是否应该允许它有任何值(在我的情况下为3)?

错误:

  Width mismatch, location has width 2, value 3

代码:

    constant s0: std_logic_vector := "000";

2 个答案:

答案 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食谱。