【问题标题】:port map in structural VHDL code结构 VHDL 代码中的端口映射
【发布时间】:2014-01-16 14:26:26
【问题描述】:

我有以下代码用于 VHDL 中的结构建模。当我尝试编译它(ghdl -a filename.vhdl)时,我在下面注释的 4 行中得到了这个错误: "

顺便说一句,我已经在下面的代码块之前定义了使用的组件。

我的代码有什么问题?我是否不允许在进程/if 语句中使用port map

我能做些什么来解决这个问题?谢谢!

-- Entity Definition
entity jk is
    port(
        CP: in std_logic; -- clock signal
        J : in std_logic; -- J signal
        K : in std_logic; -- K signal
        Q : inout std_logic; -- Q signal
        QN : inout std_logic; -- Q' signal
        reset : in std_logic -- reset signal
    );
end entity jk;

architecture dev1 of jk is

    -- declare the singals that outputs the results of some gates
    signal a, b, internal_q, internal_qn : std_logic;

    -- get each component needed
    component and3 is
        port(o0 : out std_logic; i0, i1, i2: in std_logic);
    end component and3;
    component nor2 is
        port(o0 : out std_logic; i0, i1: in std_logic);
    end component nor2;

begin

    internal_q <= Q;    -- used to show internal Q value
    QN <= not Q;        -- inverse of Q
    internal_qn <= QN;  -- used to show internal QN value

    process is
    begin
        if (reset = '0') then -- asynchronous reset
            Q <= '0';
            internal_qn <= '0';
        elsif rising_edge(CP) then -- on positive clock edge
            -- AND gate outputs
            g0: and3 port map(a, internal_q, K, CP); -- error
            g1: and3 port map(b, internal_qn, J, CP); - error

            -- NOR gate outputs
            g2: nor2 port map(Q, a, internal_qn); -error
            g3: nor2 port map(QN, b, internal_q); -error
        end if;
    end process;

end architecture dev2;

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    不,您不能在进程内实例化组件(使用端口映射)。

    您应该在架构的开始语句下方实例化您的组件。将它们适当地连接到那里。您的流程应该驱动所有已注册的逻辑。实际上,在这段代码中,我根本看不到任何流程语句的需要。由于您的所有输入都来自您的实体(我假设),因此您确实不需要在此文件中执行任何注册逻辑。

    您也可以发布您的实体吗?我看不到信号 J 和 K 以及 CP 和 Q 和 QN 的定义位置。

    【讨论】:

    • 他的组件声明在正确的位置:但是他应该在组合区域中实例化它们(在“开始”之后和进程之外)
    • @Russell - 我已经添加了组件。我需要这个过程,因为如果没有它,if 语句就不能放在任何地方。我还需要 CP 的rising_edge() 的 if 语句。
    • 对不起,我的第一句话是正确的,第二句话是错误的。我将“您应该声明您的组件”更改为“您应该实例化您的组件”快乐@BrianDrummond? :)
    • @BurnzZ,这里不需要使用进程。您不需要 if 语句。所有这些代码都只能使用组合逻辑来连接!
    • 是的,但是我怎样才能表示rising_edge(CP)?还有重置?
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多