如何声明一个可变长度的std_logic_vector信号

时间:2017-06-16 07:17:09

标签: vhdl xilinx vivado

我的程序中声明了std_logic_vector输入, 说数:std_logic_vector(7 downto 0)。 我想声明一个std_logic_vector类型的信号,其长度一直在增加,直到我的输入'number'的长度。具体来说,我想要一个信号来做到这一点 -

for j in num_length downto 0 loop  --num_length=number'length-1
a <= number(num_length downto j); -- variable length signal 'a'
end loop;

我该怎么做?

1 个答案:

答案 0 :(得分:-1)

VHDL是一种硬件描述语言(HDL)。您的std_logic_vector由连线和寄存器(物理组件)表示。因此,大小不能动态变化,但必须在合成前确定。

所以使用你需要的'MAX'长度的std_logic_vector,然后只读取你需要的位:

constant zeros : std_logic_vector(MAX-1 downto 0) := (others => '0');
signal a,b     : std_logic_vector(MAX-1 downto 0);
...
a <= something;
...
b <= zeros(MAX-1 downto i) & a(i-1 downto 0); -- i is your dynamic index

这不包括您需要阅读完整向量的情况。

你可以使用面具......有点乱:

use ieee.numeric_std.all; 
...
constant mask  : std_logic_vector(MAX-1 downto 0) := (others => '1');
signal a,b     : std_logic_vector(MAX-1 downto 0);
...
a <= something;
...
b <= std_logic_vector(shift_right(unsigned(mask), MAX-i)) and a; -- i is your dynamic index

不确定你想要做什么,但这些想法应该有所帮助。

相关问题