Отвечаю на вопрос не ко мне.
Совсем необязательно.
На графическом языке тоже можно производить декомпозицию, выделяя повторящиеся или сложные участки в отдельные элементы.
Графические схемы идеально подходят для перевода старых проектов по типу "один к одному" с небольшими изменениями.
VHDL позволяет многие вещи делать проще, однако достаточно специфичен. По сравнению с обычным ЯП просто другое мировоззрение.
Цепочка операций в ПЛИС:
TRG1 -> A1 -> B1 -> TRG2 ->C1 -> D1 -> TRG3
_____-> A2 -> B2 ->C2 ->D2
При этом TRG1, TRG2 и TRG3 обязаны быть засинхронизированы одним импульсом CLK, разведенным через спец. синхрошину, что гарантирует одновременность их срабатывания.
первый такт - появление данных на выходе TRG1
первый такт+задержка на элементах max[(A1 B1),(A2 B2)]- данные пришли на вход TRG2
второй такт - появление данных на выходе TRG2
второй такт+задержка на элементах max[(C1 D1),(C2 D2)]- данные пришли на вход TRG3
третий такт - данные на выходе TRG3
максимальная частота тактирования = 1 / max_задержку
если задержка на элементах 10 ns, максимальная тактовая 100 Mhz
на самом деле выглядит так
Код: Выделить всё
CLK LLHHLLHHLLHHLLHH
TRG1_IN DDDDXXXXXXXXXXXX
TRG1_OUT XXDDDDXXXXXXXXXX
A1_OUT XXXDDDDXXXXXXXXX
A2_OUT XXXDDDDXXXXXXXXX
B1_OUT XXXXDDDDXXXXXXXX
B2_OUT XXXXXDDDDXXXXXXX
TRG2_IN XXXX#DDD#XXXXXXX
TRG2_OUT XXXXXXDDDDXXXXXX
из-за разной задержки на B1 и B2 на входе триггера возникает наложение сигналов, в местах обозначенных #
применение схемы синхронизации устраняет эффект