(VHDL) сигнал <CLK_IBUF> неполный. Сигнал не приводит в движение никаких нагрузочных штифтов в конструкции
Привет, классное сообщество stackru,
Я работаю над проектом для своей школы, и мне приходится включать разные светодиодные индикаторы один за другим, чтобы сделать "вращающийся свет" на Xilinx Spartan3E-100. В настоящее время моя программа VHDL работает, но без часов, поэтому все светодиоды включены (слишком быстро). Когда я пытаюсь добавить часы, я получаю следующую ошибку:
The signal <CLK_IBUF> is incomplete. The signal does not drive any load pins in the design.
Вот мой VHDL-код (отредактированный):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity test2 is
Port ( CLK : in STD_LOGIC;
S0 : out STD_LOGIC;
S1 : out STD_LOGIC;
S2 : out STD_LOGIC;
S3 : out STD_LOGIC;
S4 : out STD_LOGIC;
S5 : out STD_LOGIC;
S6 : out STD_LOGIC);
end test2;
architecture Behavioral of test2 is
CONSTANT st0 : std_logic_vector(0 TO 2) := "000"; -- listing case for signal
CONSTANT st1 : std_logic_vector(0 TO 2) := "001";
CONSTANT st2 : std_logic_vector(0 TO 2) := "010";
CONSTANT st3 : std_logic_vector(0 TO 2) := "011";
CONSTANT st4 : std_logic_vector(0 TO 2) := "100";
CONSTANT st5 : std_logic_vector(0 TO 2) := "101";
CONSTANT st6 : std_logic_vector(0 TO 2) := "110";
SIGNAL state : std_logic_vector(0 TO 2) := "000";
BEGIN
chenillard: PROCESS(CLK)
BEGIN
if (rising_edge(CLK)) then -- synchronise clock for the following case
case state is
when st0 => -- when signal is 000
S0<='1'; -- it will switch on a led.
state<=st1; -- signal incrementation
when st1 => -- when signal is 001
S1<='1'; -- it will switch on a led.
state<=st2; -- signal incrementation
when st2 => -- when signal is 010
S2<='1'; -- it will switch on a led.
state<=st3; -- signal incrementation
when st3 => -- when signal is 011
S3<='1'; -- it will switch on a led.
state<=st4; -- signal incrementation
when st4 => -- when signal is 100
S4<='1'; -- it will switch on a led.
state<=st5; -- signal incrementation
when st5 => -- when signal is 101
S5<='1'; -- it will switch on a led.
state<=st6; -- signal incrementation
when st6 => -- when signal is 110
S6<='1'; -- it will switch on a led.
state<=st0; -- signal incrementation back to st0 for loop
when others =>NULL;
end case;
end if;
end process chenillard;
end Behavioral;
Вот мой файл UCF:
NET "CLK" LOC = "C8";
NET "S0" LOC= "M5";
NET "S1" LOC= "M11";
NET "S2" LOC= "P7";
NET "S3" LOC= "P6";
NET "S4" LOC= "N5";
NET "S5" LOC= "N4";
NET "S6" LOC= "P4";
Я искал ответ на Google, но ничего, что я нашел, кажется, не работает. спасибо за помощь и извините за мой английский, я не являюсь носителем английского языка;)
1 ответ
Наконец-то, это работает! Я заметил, что таблица истинности, созданная программой, отличается от моей теоретической таблицы истинности. Вот новая таблица истинности, созданная программой: Truth_table
Вот как я исправил проблему:
if (rising_edge(CLK)) then -- synchronise clock for the following case
case state is
when st0 => -- when signal is 000
S0<='1'; -- it will switch on a led.
S1<='0';
S2<='0';
S3<='0';
S4<='0';
S5<='0';
S6<='0';
state<=st1; -- signal incrementation
when st1 => -- when signal is 001
S1<='1'; -- it will switch on a led.
S0<='0';
S2<='0';
S3<='0';
S4<='0';
S5<='0';
S6<='0';
state<=st2; -- signal incrementation
when st2 => -- when signal is 010
S2<='1'; -- it will switch on a led.
S0<='0';
S1<='0';
S3<='0';
S4<='0';
S5<='0';
S6<='0';
state<=st3; -- signal incrementation
when st3 => -- when signal is 011
S3<='1'; -- it will switch on a led.
S0<='0';
S1<='0';
S2<='0';
S4<='0';
S5<='0';
S6<='0';
state<=st4; -- signal incrementation
when st4 => -- when signal is 100
S4<='1'; -- it will switch on a led.
S0<='0';
S1<='0';
S2<='0';
S3<='0';
S5<='0';
S6<='0';
state<=st5; -- signal incrementation
when st5 => -- when signal is 101
S5<='1'; -- it will switch on a led.
S0<='0';
S1<='0';
S2<='0';
S3<='0';
S4<='0';
S6<='0';
state<=st6; -- signal incrementation
when st6 => -- when signal is 110
S6<='1'; -- it will switch on a led.
S0<='0';
S1<='0';
S2<='0';
S3<='0';
S4<='0';
S5<='0';
state<=st0; -- signal incrementation back to st0 for loop
when others =>NULL;
end case;
end if;
end process chenillard;
end Behavioral;
Как вы можете видеть для каждого случая, я добавил все светодиоды, которые выключены, а не только один светодиод, который включен. Перед этим, когда сопоставленный процесс ISE, он сказал, что clk_buf были неполными, потому что не все возможности были перечислены.