ПЛИС: почему нельзя сделать по-другому?
Добавлено: Чт окт 28, 2010 21:55:51
Добрый вечер. Опять вопрос по плис.
Продолжаю вникать, сделать простенький проект: на вход идет клок (50 мгц), на выходе шина 8 бит - на светодиоды.
Сделал 24бит каунтер, которым понизил частоту до герца. Решил поморгать светодиодами. Все получилось нормально.
process(CLK) при достижении каунтером 50 000 000 дрыгал сигналом Tick, process(Tick) при Tick='1' выводил в леды (LEDs) вектор "11111111", при Tick='0' выводил туда "00000000".
Потом я решил проект усложнить, сделать бегущий огонек. И тут я совсем не понимаю логики. Сначала я объявил переменную LedState типа BIT_VECTOR = "10000000", в process(tick) написал такой код:
LedState:=LedState ror 1;
LEDs<=to_stdLogicVector(LedState);
Синтез прошел, а при генерации файла прошивки получил
ERROR:PhysDesignRules:368 - The signal <LED_NET<0>_OBUF> is incomplete. The
signal is not driven by any source pin in the design.
ERROR:PhysDesignRules:10 - The network <LED_NET<0>_OBUF> is completely unrouted.
(такой эррор для всех ледов, остальные строки опускаю, ибо только номером леда отличаются)
Бился, бился - не могу понять в чем дело. Попробовал ради эксперемента сделать не переменную а сигнал, потом сделал его типом интежер и хотел привести инт к вектору и выводить на леды бинарное значение как conv_std_logic_vector(LedState,8) - то же самое.
Потом переписал код в виде
и заработало.
Поясните, чем неправилен первый подход?
Продолжаю вникать, сделать простенький проект: на вход идет клок (50 мгц), на выходе шина 8 бит - на светодиоды.
Сделал 24бит каунтер, которым понизил частоту до герца. Решил поморгать светодиодами. Все получилось нормально.
process(CLK) при достижении каунтером 50 000 000 дрыгал сигналом Tick, process(Tick) при Tick='1' выводил в леды (LEDs) вектор "11111111", при Tick='0' выводил туда "00000000".
Потом я решил проект усложнить, сделать бегущий огонек. И тут я совсем не понимаю логики. Сначала я объявил переменную LedState типа BIT_VECTOR = "10000000", в process(tick) написал такой код:
LedState:=LedState ror 1;
LEDs<=to_stdLogicVector(LedState);
Синтез прошел, а при генерации файла прошивки получил
ERROR:PhysDesignRules:368 - The signal <LED_NET<0>_OBUF> is incomplete. The
signal is not driven by any source pin in the design.
ERROR:PhysDesignRules:10 - The network <LED_NET<0>_OBUF> is completely unrouted.
(такой эррор для всех ледов, остальные строки опускаю, ибо только номером леда отличаются)
Бился, бился - не могу понять в чем дело. Попробовал ради эксперемента сделать не переменную а сигнал, потом сделал его типом интежер и хотел привести инт к вектору и выводить на леды бинарное значение как conv_std_logic_vector(LedState,8) - то же самое.
Потом переписал код в виде
Код: Выделить всё
--Работающий код!
process(Tick)
begin
if rising_edge(Tick) then
LedState<=LedState ror 1;
for i in 0 to 7 loop
if(LedState(i)='1') then
LEDs(i)<='1';
else
LEDs(i)<='0';
end if;
end loop;
end if;
end process;Поясните, чем неправилен первый подход?