我正在尝试为不同的触发器逻辑电路(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 个进程,因为这是类似帖子中的建议,但是,会提示相同的错误消息。