VHDL中函数中原始向量的索引
我想用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
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
。