Vhdl 将n个长位逻辑向量拆分为n个单独的二进制值

Vhdl 将n个长位逻辑向量拆分为n个单独的二进制值,vhdl,Vhdl,我想知道是否有一种方法可以拆分n位长的向量,例如: 10100111 转换成n个单独的二进制单位,以后使用?我正在尝试结合一种方法,在这种方法中,我可以得到一个8位长的向量,并根据第n个值是0还是1点亮8个LED。谷歌搜索这个问题会让人们把一个更大的向量分解成更小的向量,但如果我们有16位,那么我必须使用以下方法为它生成16个独立的变量: entity test is port ( myVector : in std_logic_vector(16 downto 0); LED : out

我想知道是否有一种方法可以拆分n位长的向量,例如:

10100111

转换成n个单独的二进制单位,以后使用?我正在尝试结合一种方法,在这种方法中,我可以得到一个8位长的向量,并根据第n个值是0还是1点亮8个LED。谷歌搜索这个问题会让人们把一个更大的向量分解成更小的向量,但如果我们有16位,那么我必须使用以下方法为它生成16个独立的变量:

entity test is
port (
 myVector : in std_logic_vector(16 downto 0);
 LED : out std_logic_vector(16 downto 0)
);
END test

architecture behavior of test is
 SIGNAL led1 : std_logic;
 ...
 SIGNAL led16 : std_logic;
BEGIN

 led1 <= myVector(0);
 ...
 led16 <= myVector(16);

 LED(1) <= '1' when led1 = '1' else '0';
 ...
 LED(16) <= '1' when led16 = '1' else '0';
END behavior
实体测试不可用
港口(
myVector:标准逻辑向量(16到0);
LED:输出标准逻辑向量(16至0)
);
结束测试
测试的架构行为是
信号led1:std_逻辑;
...
信号led16:std_逻辑;
开始

led1如果要声明并分配给具有不同名称的标识符,则必须为每个名称创建一行,因为VHDL中没有用于标识符名称操作的循环语句

但是VHDL提供了数组,您可以在其中循环条目,如下面的示例代码:

...
   signal led_sig  : std_logic_vector(16 downto 0);
begin
  loop_g: for idx in myVector'range generate
    led_sig(idx) <= myVector(idx);
    LED(idx)     <= '1' when led_sig(idx) = '1' else '0';
  end generate;
...
。。。
信号led_信号:标准逻辑_矢量(16至0);
开始
循环:对于myVector范围内的idx,生成

led_sig(idx)从代码上看,看起来你可以做
led我写的东西没有什么问题(尽管有一些语法修正)。问题是为了把一个16位向量分解成16个独立的变量,然后在N处为每个LED逐个调用它们。这样,我将得到32行代码,我想知道是否有更有效的方法。抱歉,我没有充分强调这个问题。谢谢你的帮助:)
led_sig <= myVector;
LED     <= led_sig;