[an error occurred while processing this directive]
|
Здраствуйте!
Я самостоятельно изучаю VHDL и у меня есть пара вопросов.
Изучаю на практике, с помощью Altera EPM7160S и логического анализатора.
В среде Quartus II version 3.0.
Конструкция типа:
=====================
process
begin
wait until RISING_EDGE(GCLK1);
...
end process;
=====================
работает совершенно понятно.
Процесс срабатывает по каждому положительному фронту GCLK1.
А в конструкции типа:
=====================
process (GCLK1)
begin
...
end process;
=====================
механизм запуска процесса мне не понятен :(
Разъясните, плиз, смысл списка чувствительности процесса и когда этот процесс запускается?
Также разъясните, как человечески описать синхронизацию по двум фронтам?
Конструкции типа:
=====================
process
begin
wait until RISING_EDGE(GCLK1) or FALLING_EDGE(GCLK1);
...
end process;
=====================
не принимаются компилятором.
Приходится выделять каждый фронт отдельно, в виде пиков, и потом объединять по "или" эти пики.
Мне кажется это не красиво...
Выглядит это так:
=====================
signal reGCLK1, feGCLK1 : STD_LOGIC;
signal frntGCLK1 : STD_LOGIC;
--Rising Edge GCLK1.
process (GCLK1, reGCLK1)
begin
if reGCLK1 = '1' then reGCLK1 <= '0';
elsif RISING_EDGE(GCLK1) then reGCLK1 <= '1';
end if;
end process;
--Falling Edge GCLK1.
process (GCLK1, feGCLK1)
begin
if feGCLK1 = '1' then feGCLK1 <= '0';
elsif FALLING_EDGE(GCLK1) then feGCLK1 <= '1';
end if;
end process;
--Front GCLK1.
frntGCLK1 <= reGCLK1 or feGCLK1;
=====================
В результате на любой фронт GCLK1 я получаю пик frntGCLK1 и работаю с ним.
А так же проясните пожалуйста ситуацию с функциями разрешения для сигналов с множественными драйверами?
В некоторых случаях компилятор пропускает прогу с парой драйверов сигнала в разных процессах, в некоторых нет.
Введение функции разрешения не помогает, все равно пишет, что не может разобраться с множественными драйверами.
Зачем ему разбираться с драйверами, когда есть функция разрешения?
Имя функции разрешения я указываю перед типом объявляемого сигнала.
В самой функции пробегаюсь по всем драйверам и возвращаю нужное мне значение...
Я что-то не так делаю, не так понимаю, или это грабли компилятора?
Спасибо!
С уважением,
Митя
E-mail: info@telesys.ru