如何将信号的单个位映射到Vector的多个位?

时间:2015-11-29 18:59:22

标签: vhdl fpga hardware-programming

我试图在这样的结构描述中映射一些信号(此处为addS类型的签名(32 downto 0)):

add2 : entity work.adderSigned(behavioral) 
  generic map(N => 64)
    port map(a(63 downto 32) => mulssS, --concat 
        a(31 downto 0) => signed(muluuS), --concat
     -- b(63 downto 48) => addS(32 downto 32),
        b(63 downto 48) => (others => addS(32)), --the critical line
        b(47 downto 16) => addS(31 downto 0),
        b(15 downto 0) => (others => '0'),
        std_logic_vector(y) => y);

但编译器抱怨这不是静态映射。我该如何执行此映射?

1 个答案:

答案 0 :(得分:0)

在VHDL-2008中,行b(63 downto 48) => (others => addS(32)),有效,因此如果工具允许,请启用VHDL-2008。

对于VHDL-2002,如果表达式用作实际(端口映射中的右侧),则它必须是全局静态表达式(VHDL-2002 1.1.1.2端口),但(others => addS(32)) ain&#39 ; t,因为addS(32)不是静态的。解决方法可以是:

signal b_63_dt_48 : std_logic_vector(63 downto 48);
...
b(63 downto 48) => b_63_dt_48,
...
b_63_dt_48 <= (others => addS(32));

顺便说一下。看起来行std_logic_vector(y) => y可能有些奇怪。