【问题标题】:Assigning a vector of variable length to a static sized vector in VHDL在VHDL中将可变长度的向量分配给静态大小的向量
【发布时间】:2020-04-22 22:29:02
【问题描述】:

我有一个 32 位输出 (rd_data),它应该将 '0' 与一个 w 位信号 (mux_out) 连接起来,但我不确定如何将两者结合起来。

signal mux_out : std_logic_vector(w-1 downto 0);
signal rd_data : std_logic_vector(31 downto 0);
signal rd : std_logic;

with rd select

       rd_data <= (OTHERS => '0') when '0',
                 **32-BIT CONCATENATION OF ZEROES AND MUX_OUT** when '1';

我该怎么做???? w 永远不会大于 32

【问题讨论】:

  • 这是一个例子,说明minimal reproducible example 或工具链上的信息可能会有所帮助。 -2008 有包 numeric_std_unsigned 和函数 RESIZE ,其中您的连接可能是 RESIZE(mux_out, 32) 左填充零,将 std_logic_vector 视为无符号二进制值,注意覆盖所选信号分配中 rd 的所有值还需要 others选择(IEEE Std 1076-2008 10.5.4 选定的信号分配,10.9 案例声明)。 Synopsys 包 std_logic_arith 中的等效串联可能是 EXT(mux_out, 32)
  • -2008 之前的 IEEE 包 numeric_std 可用于类型转换(std_logic_vector 和 unsigned 密切相关):std_logic_vector(resize(unsigned(mux_out, 32))) 用于连接表达式。
  • 这能回答你的问题吗? VHDL: Zero-Extend a fixed signal value

标签: generics aggregate vhdl


【解决方案1】:

没有 VHDL-2008:

   rd_data <= (OTHERS => '0') when '0',
             (rd_data'length-1 downto MUX_OUT'length => '0') &  MUX_OUT when '1',
             (others => 'X') when others ;  -- since rd is std_logic

请注意,如果 MUX_OUT'length = rd_data'length,则 "(rd_data'length-1 downto MUX_OUT'length => '0')" 仍然合法,因为它返回 NULL 数组 (value = "")。

使用 VHDL-2008:

use ieee.numeric_std_unsigned.all; -- in context clause
. . . 
   rd_data <= (OTHERS => '0') when '0',
            resize(MUX_OUT, rd_data'length) when '1',
             (others => 'X') when others ;  -- since rd is std_logic

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多