CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library UNISIM;
use UNISIM.VComponents.all;
entity rrd3_top is
Port (
G1_CLK : in STD_LOGIC; --Тактовый сигнал доп. генератора 10 МГц
EXT_LED_N : out STD_LOGIC_VECTOR (5 downto 0) --Управление светодиодами
);
end rrd3_top;
architecture Structural of rrd3_top is
signal clk1 : STD_LOGIC := '0'; --Тактовый сигнал доп. генератора 10 МГц
signal led_n : STD_LOGIC_VECTOR (5 downto 0) := (others => '1');--Управление светодиодами
signal counter: std_logic_vector (31 downto 0):=(others=>'0');-- объявляем сигнал counter в котором будем считать тики генератора
signal led_temp: std_logic:='0'; -- триггер выходного сигнала led
signal clr_count: std_logic:='0'; -- сброс счетчика при совпадении компаратора
begin
ibufg_clk1 : ibufg port map(clk1,G1_CLK); -- 10 MHz
obuf_led_gen: --светодиоды
for i in 0 to 5 generate
obuf_led : obuf port map(EXT_LED_N(i),led_n(i));
end generate;
count: process(clk1, clr_count) -- процесс"СЧЕТЧИК"
begin
if(clr_count='1') then -- если нажата кнопка reset или сигнал сброса счетчика установлен в 1
counter <= (others=>'0'); -- обнуляем счетчик
elsif(rising_edge(clk1)) then -- если нет, то по фронту сигнала clk считаем тики генератора
counter <= counter + 1;
end if;
end process;
comp: process(counter) -- процесс"КОМПАРАТОР"
begin
if(counter= 5) then -- если счетчик = уставке
clr_count<='1'; -- активируем сигнал сброса счетчика
led_temp<=not led_temp; -- переключаем триггер выходного сигнала
else
clr_count<='0'; -- иначе "на всякий" обнуляем сигнал сброса
end if;
end process;
led_n(0)<=led_temp;
end Structural;
Имеем следующее предупреждение от ISE
CODE
Xst:737 - Found 1-bit latch for signal <led_temp>. Latches may be generated from incomplete case or if statements.
We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
Я понял так: синтезатору не нравится неопределенность следующей конструкции
CODE
if(counter= 5) then -- если счетчик = уставке
clr_count<='1'; -- активируем сигнал сброса счетчика
led_temp<=not led_temp; -- переключаем триггер выходного сигнала
else
clr_count<='0'; -- иначе "на всякий" обнуляем сигнал сброса
end if;
Т. е. led_temp<=not led_temp при counter=5, а вот чему равен led_temp при counter(не равно)5 фиг его знает.
Вопрос.
Правильно ли я понял и во что это может вылиться? Вообще насколько критичны предупреждения выдаваемые компилятором?