[an error occurred while processing this directive]
|
Вот вы запустите Figaro IDS с какой-нибудь схемой (любой), еще откройте datasheet на FPSLIC и посмотрите, что вообще есть в этой микросхеме:
- Ножки ввода-вывода с триггерами и z-буферами
- провода к AVR
- Ячейки (стр 8 datasheet):
-- в каждой 2 LUT-а по 3 входа
-- элемент "И" между их выходами
-- триггер с сбросом по уровню и одним входом клока
-- z-буфер
- память с мерзким соединением выводов
- буферы global clock-ов
- буферы global reset-ов
- куча проводов
Теперь нужно подумать, как это все должно быть соединено, чтобы получилось что нужно. А потом еще придумать, как написать на VHDL.
Будет сильно проще, если вы будете исходить из наличия только одного входа клока в каждом триггере и одного провода сброса по уровню.
В FPSLIC нет синхронного сброса.
Чтобы получить одну или несколько ячеек regs, которые по уровню level устанавливаются в начальное значение regs_init и при фронте клока clk принимают значение со входа input_val нужно писать так:
process(clk, level)
..begin
....if (level='1') then
......regs <= regs_init;
....elsif (clk'event and clk='1') then -- или rising_edge(clk)
......regs <= input_val;
....end if;
..end process;
При этом regs_init константа, level - один провод, а вот вместо input_val может быть что угодно, или провода с ножек или какая-то функция. Она странслируется в сеть LUT-ов внутри одной или нескольких ячеек.
Синтезатору трудно понять, где у вас клок, а где сброс.
Сакральное знание есть в документациях на синтезаторы, но такой шаблон понимают все.
Еще, вместо предпоследнего процесса можно написать просто так:
out0_clk<=CLOCK and ENABLE0 and FIOREA;
out1_clk<=CLOCK and ENABLE1 and FIOREA;
Перепишите, чтобы было понятно и вам и синтезатору.
Да, синтезатор наверное выдавал предупреждения, что в данной архитектуре того и того нет, делаю так и может быть отличие от симуляции.