Прошу совета, наверняка кто-нибудь сталкивался с подобным!
Cyclone 3. Фронты импульсов в шине.
Разрабатываю устройство, где необходимо работать 32х разрядными числами. Везде шины 32 разряда. При моделировании в квартусе видно, что фронты импульсов в шине на выходе каждого компонента(умножителя, сумматора и т.п.) приходят в разное время. В результате в шине получается "звон" между правильными числами. Частота работы устройства порядка 100 МГц, и длительность "звона" получается сравнима с длительностью тактового импульса.
Прошу совета, наверняка кто-нибудь сталкивался с подобным!
Прошу совета, наверняка кто-нибудь сталкивался с подобным!
- Реклама
- Сообщения: 39
- Зарегистрирован: Вт дек 09, 2008 21:34:32
Сталкивались.
Принципиально нарушены правила проектирования ПЛИС.
Необходимо засинхронизировать все элементы глобальной шиной CLKx, поставить засинхронизированные защелки (тригеры) перед/после каждого этапа вычислений, делать СИНХРОННЫЕ обмены.
Задержки внутри ПЛИС неизбежны, разные длины, разные сложности библиотечных элементов.
ПЛИС не делает все мгновенно, она тоже имеет ограниченную производительность.
Можно распределить вычисления так, чтобы параллельные операции выполнялись за примерно одинаковое время.
И взять ПЛИС более высокого быстродействия/повысить тактовую вычислений (читай внутренней синхронизации), при этом можно оставить частоту внешних шин прежней. Дла синтеза и разводки сигналов CLK необходимо использовать глобальные сети синхронизации и DCM (по терминологии Xilinx, в Altera тоже что-то есть) блоки.
Изучайте матчасть.
Удачи!

Принципиально нарушены правила проектирования ПЛИС.
Необходимо засинхронизировать все элементы глобальной шиной CLKx, поставить засинхронизированные защелки (тригеры) перед/после каждого этапа вычислений, делать СИНХРОННЫЕ обмены.
Задержки внутри ПЛИС неизбежны, разные длины, разные сложности библиотечных элементов.
ПЛИС не делает все мгновенно, она тоже имеет ограниченную производительность.
Можно распределить вычисления так, чтобы параллельные операции выполнялись за примерно одинаковое время.
И взять ПЛИС более высокого быстродействия/повысить тактовую вычислений (читай внутренней синхронизации), при этом можно оставить частоту внешних шин прежней. Дла синтеза и разводки сигналов CLK необходимо использовать глобальные сети синхронизации и DCM (по терминологии Xilinx, в Altera тоже что-то есть) блоки.
Изучайте матчасть.
Удачи!
- Сообщения: 79
- Зарегистрирован: Сб май 08, 2010 09:33:42
Принцип везде один - комбинационная схема - набор триггеров - комбинационная схема - набор триггеров, и так далее. По сути получается конвейер.
Вы еще наверное используете графический метод представления схем? Если да, то ИМХО такой подход до добра не доведет, по крайней мере если надо выполнить больше, чем пару десятков логических функций.
По поводу синхронизаций - в мануале на quartus 2 есть все необходимые описания. Поищите там.
Вы еще наверное используете графический метод представления схем? Если да, то ИМХО такой подход до добра не доведет, по крайней мере если надо выполнить больше, чем пару десятков логических функций.
По поводу синхронизаций - в мануале на quartus 2 есть все необходимые описания. Поищите там.
Спасибо за совет, попробую переделать!
of_silence, лучше обратиться к VHDL и отойти от графического представления полностью? Устройство большое.
of_silence, лучше обратиться к VHDL и отойти от графического представления полностью? Устройство большое.
- Сообщения: 39
- Зарегистрирован: Вт дек 09, 2008 21:34:32
Отвечаю на вопрос не ко мне.
Совсем необязательно.
На графическом языке тоже можно производить декомпозицию, выделяя повторящиеся или сложные участки в отдельные элементы.
Графические схемы идеально подходят для перевода старых проектов по типу "один к одному" с небольшими изменениями.
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
на самом деле выглядит так
из-за разной задержки на B1 и B2 на входе триггера возникает наложение сигналов, в местах обозначенных #
применение схемы синхронизации устраняет эффект
Совсем необязательно.
На графическом языке тоже можно производить декомпозицию, выделяя повторящиеся или сложные участки в отдельные элементы.
Графические схемы идеально подходят для перевода старых проектов по типу "один к одному" с небольшими изменениями.
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
применение схемы синхронизации устраняет эффект
- Реклама
- Сообщения: 79
- Зарегистрирован: Сб май 08, 2010 09:33:42
Я думаю,что как раз не стоит!лучше обратиться к VHDL и отойти от графического представления полностью?
Я пробовал писать в разных вариантах, и нашел самым удобным - общий графический файл, который соединяет блоки между собой, и каждый блок написанный на каком-либо языке (я из-за похожести с С освоил Verilog HDL).
Как только у вас появится возможность писать все в виде кода, потребность во внешних графических базовых функция (типа сложения или триггера) отпадет сама собой, потому что в HDL это проще.


