gpt4 book ai didi

vhdl - 如何将 std_logic_vector 的一位分配给 1,将其他的分配给 0

转载 作者:行者123 更新时间:2023-12-04 15:55:15 25 4
gpt4 key购买 nike

我从外面收到 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');

最佳答案

有很多方法可以做到这一点。可以模拟所有(语法和语义上有效的)方式。有些可以合成,有些不能,但这取决于您的合成器,因此很难说。首先,让我们重命名 outputresult :output不是 VHDL 语言的关键字,而是 std.textio 中定义的标准输出流的名称。包裹。因此最好避免将其用作用户标识符。

  • 处理变量和寻址位(练习:研究聚合符号并理解 (others => '0')):
    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;
  • 在 VHDL 2002 中使用桶形移位器进行处理(您的工具可能仍然不支持):
    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;
  • 使用 VHDL 2002 中的桶形移位器进行并发信号分配(练习:理解并发信号分配是过程,想象等效过程):
    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;
  • 关于vhdl - 如何将 std_logic_vector 的一位分配给 1,将其他的分配给 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031300/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com