我的程序中声明了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;
我该怎么做?
答案 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
不确定你想要做什么,但这些想法应该有所帮助。