Vhdl 如何声明可变长度std_逻辑_矢量信号

Vhdl 如何声明可变长度std_逻辑_矢量信号,vhdl,xilinx,vivado,Vhdl,Xilinx,Vivado,我在程序中声明了一个std_逻辑_向量输入, 说出数字:标准逻辑向量(7到0)。 我想声明一个std_逻辑_向量类型的信号,其长度一直增加到输入“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; 对于num

我在程序中声明了一个std_逻辑_向量输入, 说出数字:标准逻辑向量(7到0)。 我想声明一个std_逻辑_向量类型的信号,其长度一直增加到输入“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;
对于num_length下至0循环中的j--num_length=number'length-1

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

因此,使用std_逻辑_向量和所需的“MAX”长度,然后只读取所需的位:

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
常数零:标准逻辑向量(MAX-1向下至0):=(其他=>'0');
信号a、b:std_逻辑_向量(最大值-1至0);
...

a使用
数字长度
。但是你的代码示例毫无意义。我会解释我的问题。例如:我有number=“10101010”(一个大小为8的标准逻辑向量),我想声明一个信号“A”,当它在For循环中下降时,它应该取A=“1”A=“10”A=“101”A=“1010”,以此类推。我正在寻找一个简单的方法来做到这一点。谢谢那么您想要一个长度可变的
std\u逻辑\u向量
?你认为这是怎么回事?您需要动态内存分配。VHDL是一种硬件描述语言<代码>标准逻辑向量
表示多条导线。如何在系统中动态添加或删除导线?你可以在实例化过程中固定任何数组的长度。简言之:不,这是不可能的。我建议你读一本关于VHDL和强类型的主要原理的书或在线文章。VHDL是一种硬件仿真和描述语言。您不能在运行时创建或删除芯片中的导线。(这就是你要求的…)是的。目前,我正在尝试最大长度,并试图调整我的信号大小。在您的解决方案中,如何定义掩码?同样,它需要可变长度,对吗?否则我们会出错。事实上,我的意思是零填充,即使你也可以用一个面具。。。答案已编辑。
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