Я пытаюсь скомпилировать код FPGA с помощью инструмента Xilinx Vivado. Однако, когда я запускаю «Синтез», а затем выбираю «Методология отчета»… я получаю следующий список плохих практик:
TIMING-17
TIMING #1 Warning The clock pin last_anthony_reg.C is not reached by a timing clock
TIMING #2 Warning The clock pin last_paul_reg.C is not reached by a timing clock
TIMING #3 Warning The clock pin last_steven_reg.C is not reached by a timing clock
Мне интересно, что вызывает это сообщение «ПРЕДУПРЕЖДЕНИЕ»… Я пытался посмотреть на схему… но мне кажется, что все в порядке… просто вижу FDCE и некоторые LUTS, ничего необычного.
Вот мой объект VHDL для верхнего уровня FPGA:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity example1 is
port(
clk :in std_logic;
clear :in std_logic;
richard :out std_logic;
james :in std_logic;
michael :in std_logic;
william :out std_logic;
david :out std_logic;
robert :in std_logic
);
end entity;
И архитектура VHDL:
architecture rtl of example1 is
signal matthew :std_logic_vector(1 downto 0);
signal anthony, last_anthony :std_logic;
signal steven, last_steven :std_logic;
signal paul, last_paul :std_logic;
begin
process(clk)
begin
if (rising_edge(clk)) then
last_anthony <= anthony;
last_steven <= steven;
last_paul <= paul;
end if;
end process;
matthew <= (michael and not last_paul) & (robert and not last_steven);
process(
clear,
matthew,
james,
last_anthony,
last_steven,
last_paul
)
begin
if (clear = '1') then
anthony <= '0';
steven <= '0';
paul <= '1';
else
--defaults
case matthew is
when "00" =>
anthony <= james;
steven <= '1';
paul <= '0';
when "01" =>
anthony <= last_anthony;
steven <= last_steven;
paul <= last_paul;
when "10" =>
anthony <= james;
steven <= '1';
paul <= '0';
when "11" =>
anthony <= last_anthony;
steven <= '0';
paul <= '1';
--synthesis translate_off
when others =>
anthony <= 'X';
steven <= 'X';
paul <= 'X';
--synthesis translate_on
end case;
end if;
end process;
william <= steven;
david <= paul;
richard <= anthony;
end architecture;