Vhdl 如何将std_逻辑_向量的一位分配给1,将其他位分配给0
我正在从外部接收带有二进制值的Vhdl 如何将std_逻辑_向量的一位分配给1,将其他位分配给0,vhdl,decoder,Vhdl,Decoder,我正在从外部接收带有二进制值的std_logic_vector,这表示应该设置为1的位,其他设置为0。据我所知,它是解码器,但用“when”语句解决这个问题需要很多行代码,而且它是不可重新配置的 例如: signal number : std_logic_vector(7 downto 0); signal output : std_logic_vector(255 downto 0); output <= output(to_integer(unsigned(number))) an
std_logic_vector
,这表示应该设置为1的位,其他设置为0。据我所知,它是解码器,但用“when”语句解决这个问题需要很多行代码,而且它是不可重新配置的
例如:
signal number : std_logic_vector(7 downto 0);
signal output : std_logic_vector(255 downto 0);
output <= output(to_integer(unsigned(number))) and (others=>'0');
信号编号:标准逻辑向量(7到0);
信号输出:标准逻辑向量(255至0);
输出“0”);
有很多方法可以做到这一点。所有(语法和语义上有效的)方式都可以模拟。有些可以合成,有些不能,但这取决于你的合成器,很难说。首先,让我们将output
重命名为result
:output
不是VHDL语言的关键字,而是在std.textio
包中定义的标准输出流的名称。因此,最好避免将其用作用户标识符
(其他=>'0')
):
过程(编号)
变量tmp:std_逻辑_向量(255到0);
开始
tmp:=(其他=>'0');
tmp(to_整数(无符号(数字)):='1';
结果“0”);
...
开始
...
流程(编号)
开始
结果“1”,其他=>“0”);
...
开始
...
结果我将在值为“1”的向量上使用移位运算符。可能的
process(number)
variable tmp: std_logic_vector(255 downto 0);
begin
tmp := (others => '0');
tmp(to_integer(unsigned(number))) := '1';
result <= tmp;
end process;
process(number)
begin
result <= (others => '0');
result(to_integer(unsigned(number))) <= '1';
end process;
architecture foo of bar is
...
constant one: std_logic_vector(255 downto 0) := (0 => '1', others => '0');
...
begin
...
process(number)
begin
result <= one sll to_integer(unsigned(number));
end process;
...
end architecture foo;
architecture foo of bar is
...
constant one: std_logic_vector(255 downto 0) := (0 => '1', others => '0');
...
begin
...
result <= one sll to_integer(unsigned(number));
...
end architecture foo;