#vhdl
#vhdl
Вопрос:
Я новичок в VHDL и пытаюсь заставить этот счетчик работать с компонентами общего триггера, но я продолжаю получать сообщение об ошибке «Ошибка (10482): ошибка VHDL в lab8.vhd (16): объект «qn» используется, но не объявлен», независимо от того, что я пытаюсь сделать.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY counter IS
PORT(clk:IN STD_LOGIC;c0,c1:OUT STD_LOGIC);
END counter;
ARCHITECTURE func of counter IS
COMPONENT dFlipFlop IS
port(D,dflipclock:IN STD_LOGIC;q,qn:OUT STD_LOGIC);
END COMPONENT dFlipFlop;
BEGIN
G1:dFlipFlop
PORT MAP(D=>qn,dflipclock=>clk,q=>c0);
G2:dFlipFlop
PORT MAP(D=>qn,c0=>dflipclock,q=>c1);
END func;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY dFlipFlop IS
port(D,dflipclock:IN STD_LOGIC;q,qn:OUT STD_LOGIC);
END dFlipFlop;
ARCHITECTURE flipper OF dFlipFlop IS
SIGNAL currentState:STD_LOGIC:='0';--not sure what STD_LOGIC initial value is so im setting it to zero here
BEGIN
PROCESS(dflipclock)
BEGIN
IF(dflipclock'EVENT AND dflipclock ='1') THEN --positive edge triggered
currentState<=D;
END IF;
END PROCESS;
q<=currentState;
qn<=not currentState;
END flipper;
Я чувствую, что совершаю какую-то глупую ошибку новичка, но я смотрю на эту штуку уже несколько часов и ни за что на свете не могу понять, что не так.
Комментарии:
1.
qn
отсутствует в выписке карты порта. Если вы хотите оставить его открытым,qn => open
сделайте это. Если вы хотите передать его обратно в D, объявите локальный сигналsignal feedback : std_logic;
и сопоставьте с ним оба портаPORT MAP(D=>feedback, dflipclock=>clk, q=>c0, qn => feedback);
2. Спасибо! Решение с обратной связью сработало
3. Объявление компонента — это отдельная декларативная область, и имена портов, используемые в качестве формальных, не отображаются во включающей области. Эти порты становятся видимыми в левой части ассоциации на карте портов из-за неявной конфигурации компонента. qn нельзя использовать как фактический для G1 или G2, а также dflipclock для G2.