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;