结构VHDL代码中的端口映射

时间:2014-01-16 14:26:27

标签: vhdl

我有以下代码用于VHDL中的结构建模。当我尝试编译它时(ghdl -a filename.vhdl),我在下面评论的4行中得到了这个错误:“< =”或“:=”而不是端口

BTW,我已经在下面的代码块之前定义了使用的组件。

我的代码出了什么问题?我不允许在进程/ 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;

1 个答案:

答案 0 :(得分:2)

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

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

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