首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实数必须是静态名称??portmap中的索引向量。

实数必须是静态名称??portmap中的索引向量。
EN

Stack Overflow用户
提问于 2016-08-09 13:24:35
回答 1查看 2.6K关注 0票数 1

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

我创建count_temp是为了试图绕过错误,但是它没有帮助,我不希望有额外的变量。谢谢。

代码语言:javascript
复制
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;

错误:

代码语言:javascript
复制
ghdl -a  conv_encoder.vhd
conv_encoder.vhd:28:30: actual must be a static name
ghdl: compilation error
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-09 13:59:10

这不是GHDL中的VHD2008支持问题。解决这个问题的两次尝试在概念上都很简单,但是正如错误说的那样,您不能将端口连接到非静态的东西。在简单的英语中,这意味着您不能将端口与某些组合逻辑相关联。即使是D => not din(0)也不被允许。

我在这里要做的是包括一个复用器。这可以简单到:

代码语言:javascript
复制
signal selected_din : std_logic;

..。

代码语言:javascript
复制
selected_din <= din(count_temp);

然后将行D => din(count_temp),替换为D => selected_din,

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

根据@user1155120的注释,在编写本报告时,GHDL编译器不支持这种“函数”方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38852093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档