我想知道是否有一种方法可以拆分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
在代码中需要重复多次时,似乎并不整洁。
答案 0 :(得分:3)
如果要声明并分配给具有不同名称的标识符,则必须为每个名称创建一行,因为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_sig <= myVector;
LED <= led_sig;