VHDL中函数中原始向量的索引

VHDL中函数中原始向量的索引,vhdl,Vhdl,我想用VHDL编写一个函数,它被赋予std_logic_vector的前几位,并对它们进行处理,但我的函数的索引似乎仍然从整个向量的底部开始计数 我可以先把向量分配给一个临时信号,然后用它来解决这个问题,但我担心我不明白这里发生了什么 有人能解释一下为什么a和b在下面的例子中没有得到相同的输出吗 architecture rtl of inds is function top_bit (c : std_logic_vector) return std_logic is begin

我想用VHDL编写一个函数,它被赋予
std_logic_vector
的前几位,并对它们进行处理,但我的函数的索引似乎仍然从整个向量的底部开始计数

我可以先把向量分配给一个临时信号,然后用它来解决这个问题,但我担心我不明白这里发生了什么

有人能解释一下为什么
a
b
在下面的例子中没有得到相同的输出吗

architecture rtl of inds is
  function top_bit (c : std_logic_vector) return std_logic is
  begin
    return c(c'length-1);
  end top_bit;
  signal temp : std_logic_vector(2 downto 0);
begin
  temp <= input(3 downto 1);
  a <= top_bit(temp);
  b <= top_bit(input(3 downto 1));
end rtl;
然后它就如我所期望的那样工作了。 我假设向量
c
从给定的向量中获取索引


我希望看到一个函数,它获取向量的任意切片并返回该切片的顶部位。

您使用的是
'length
属性,其中可以使用
'high
。我想这会满足你的要求


我在桌子的墙上有一个打印件,作为可用属性的参考。

您使用的是
'length
属性,您可以使用
'high
。我想这会满足你的要求


我在表格的墙上有一个打印件,作为可用属性的参考。

问题是,
c'length
返回的向量长度不一定是有效的索引。例如,假设我声明了以下信号:

signal temp : std_logic_vector(7 downto 4);
这将导致调用
top\u位时出现范围错误。正如您在对jeff答案的评论中所指出的,并非所有向量都是
x到0
。它们可以是
x到y
。或者,他们甚至可以通过
0到x
x到y
。假设
c'length-1
为顶部位,则只有当
c
声明为
std\u logic\u vector(N-1向下至0)
(您在答案中发现)时,才为真

作为澄清。杰夫的回答是正确的。但是,您需要解决“顶部位”的含义。如果给您一个
to
向量,例如:

signal temp : std_logic_vector(4 to 7)

什么是顶部位?第4位还是第7位?如果您使用
'high
,您将得到位7。这是最上面的吗?如果希望第4位是最高位,则需要使用
'low

问题在于
c'length
返回的向量长度不一定是有效索引。例如,假设我声明了以下信号:

signal temp : std_logic_vector(7 downto 4);
这将导致调用
top\u位时出现范围错误。正如您在对jeff答案的评论中所指出的,并非所有向量都是
x到0
。它们可以是
x到y
。或者,他们甚至可以通过
0到x
x到y
。假设
c'length-1
为顶部位,则只有当
c
声明为
std\u logic\u vector(N-1向下至0)
(您在答案中发现)时,才为真

作为澄清。杰夫的回答是正确的。但是,您需要解决“顶部位”的含义。如果给您一个
to
向量,例如:

signal temp : std_logic_vector(4 to 7)

什么是顶部位?第4位还是第7位?如果您使用
'high
,您将得到位7。这是最上面的吗?如果您希望第4位成为顶部位,则需要使用
'low

谢谢,我不知道这一点。我忘了你可以有没有编号的向量
x到0
。谢谢你,我不知道。我忘了你可以有没有编号的向量
x到0