actual必须是静态名称 - portmap中的索引向量

时间:2016-08-09 13:24:35

标签: vhdl ghdl

我认为这个错误是GHDL不支持VHDL 2008的结果。当ff0 D被赋予来自vector din的值时,错误发生在第27/28行。从端口映射中索引向量的正确方法是什么?

我创建了count_temp以试图绕过错误,但它没有帮助,我宁愿没有额外的变量。感谢。

library ieee;
  use ieee.std_logic_1164.all;
  use ieee.numeric_std.all;

entity conv_encoder is
    generic (d_width : positive := 16);
    port (
        clk    : in std_logic;
        din    : in std_logic_vector(d_width-1 downto 0);
        ff_set : in std_logic;
        count  : in std_logic_vector(5 downto 0);
        dout   : out std_logic_vector(d_width*2-1 downto 0));
end conv_encoder;

architecture behavioral of conv_encoder is
  component d_ff is
    port ( clk, ff_set, D : in std_logic;
           Q : out std_logic);
  end component;
  signal a, b       : std_logic;
  signal count_temp : integer range 0 to d_width;
  begin
    count_temp <= to_integer(unsigned(count));
    ff0 : d_ff
      port map (clk    => clk,
                ff_set => ff_set,
                D      => din(count_temp),
                -- D      => din(to_integer(unsigned(count))),
                Q      => a);
    ff1 : d_ff
      port map (clk    => clk,
                ff_set => ff_set,
                D      => a,
                Q      => b);
    -- conv encoder is r=1/2 A=111 B=101
  process (clk, ff_set)
  begin
    if (ff_set = '0') then
      if (rising_edge(clk)) then
        dout(count_temp*2)   <= din(count_temp) xor a xor b;
        dout(count_temp*2+1) <= din(count_temp) xor b;
      end if;
    end if;
  end process;
end behavioral;

错误:

ghdl -a  conv_encoder.vhd
conv_encoder.vhd:28:30: actual must be a static name
ghdl: compilation error

1 个答案:

答案 0 :(得分:1)

这不是GHDL中的VHD2008支持问题。您解决此问题的两次尝试在概念上足够简单,但正如错误所述,您无法将端口连接到非静态的端口。这意味着简单的英语是你不能将一个端口与一些组合逻辑相关联。即使make runtest也不允许。

我在这里要做的是包括多路复用器。这可以很简单:

D => not din(0)

...

signal selected_din : std_logic;

然后,您将selected_din <= din(count_temp); 替换为D => din(count_temp),

您也可以编写D => selected_din,函数,然后您的行看起来像mux。该函数将根据D => mux(din, count_temp),的值返回din中的一个元素。

根据@ user1155120的评论,这个&#39;功能&#39;在撰写本文时,GHDL编译器不支持该方法。