vhdl 中的“无法处理已注册的多驱动程序”

问题描述 投票:0回答:0

我正在尝试为不同的触发器逻辑电路(SR、JK、D、T)制作一个多路复用器。

这是我的代码:

library ieee;
use ieee.std_logic_1164.all;

entity PRAC2 is
    port(CLK, PRE, CLR, S, R, J, K, T, D: IN STD_LOGIC;
        SEL: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
        Q, NQ: INOUT STD_LOGIC);
end entity;

ARCHITECTURE A_PRAC2 OF PRAC2 IS
BEGIN
    PROCESS(CLR, CLK)
    BEGIN
        IF(CLR='0') THEN
            Q<='0';
            NQ<='1';
        ELSIF(CLK'EVENT AND CLK='1') THEN
            IF(PRE='1') THEN
                Q<='1';
                NQ<='0';
            END IF;
        END IF;
    END PROCESS;
    
    PROCESS
        BEGIN
            IF(SEL="00") THEN
                Q<=S OR (Q AND (NOT R));
                NQ<=NOT (S OR (Q AND (NOT R)));
            ELSIF(SEL="01") THEN
                Q<=((NOT K) AND Q) OR (J AND (NOT Q));
                NQ<=NOT (((NOT K) AND Q) OR (J AND (NOT Q)));
            ELSIF(SEL="10") THEN
                Q<=((NOT T) AND Q) OR ((NOT Q) AND T);
                NQ<=NOT (((NOT T) AND Q) OR ((NOT Q) AND T));
            ELSIF(SEL="11") THEN
                Q<=D;
                NQ<=NOT D;
            END IF;
    END PROCESS;
end A_PRAC2;

但是我得到以下错误:

(E463) 'q' -- 无法处理已注册的多驱动程序。

(E463) 'nq' -- 无法处理已注册的多驱动程序。

(E446) 无法处理所选设备中“q”的多个驱动程序。

(E446) 无法处理所选设备中“nq”的多个驱动程序。

我也尝试过使用 CASE-WHEN 语句,但出现了同样的错误。

使用case-when时,如果我没有使用“WHEN OTHERS”,它会提示我有77个未检查的案例。

我也尝试过只对所有事情使用 1 个进程,因为这是类似帖子中的建议,但是,会提示相同的错误消息。

vhdl
© www.soinside.com 2019 - 2024. All rights reserved.