Cyclone 3. Фронты импульсов в шине.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 11
Зарегистрирован: Вс май 16, 2010 22:49:46
Откуда: Ульяновск

Сообщение mirk »

Разрабатываю устройство, где необходимо работать 32х разрядными числами. Везде шины 32 разряда. При моделировании в квартусе видно, что фронты импульсов в шине на выходе каждого компонента(умножителя, сумматора и т.п.) приходят в разное время. В результате в шине получается "звон" между правильными числами. Частота работы устройства порядка 100 МГц, и длительность "звона" получается сравнима с длительностью тактового импульса.

Прошу совета, наверняка кто-нибудь сталкивался с подобным!
Реклама
ASY
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Вт дек 09, 2008 21:34:32

Сообщение ASY »

Сталкивались.
Принципиально нарушены правила проектирования ПЛИС.
Необходимо засинхронизировать все элементы глобальной шиной CLKx, поставить засинхронизированные защелки (тригеры) перед/после каждого этапа вычислений, делать СИНХРОННЫЕ обмены.

Задержки внутри ПЛИС неизбежны, разные длины, разные сложности библиотечных элементов.
ПЛИС не делает все мгновенно, она тоже имеет ограниченную производительность.

Можно распределить вычисления так, чтобы параллельные операции выполнялись за примерно одинаковое время.
И взять ПЛИС более высокого быстродействия/повысить тактовую вычислений (читай внутренней синхронизации), при этом можно оставить частоту внешних шин прежней. Дла синтеза и разводки сигналов CLK необходимо использовать глобальные сети синхронизации и DCM (по терминологии Xilinx, в Altera тоже что-то есть) блоки.

Изучайте матчасть.
Удачи!
:)
Реклама
Открыл глаза
Сообщения: 79
Зарегистрирован: Сб май 08, 2010 09:33:42

Сообщение of_silence »

Принцип везде один - комбинационная схема - набор триггеров - комбинационная схема - набор триггеров, и так далее. По сути получается конвейер.
Вы еще наверное используете графический метод представления схем? Если да, то ИМХО такой подход до добра не доведет, по крайней мере если надо выполнить больше, чем пару десятков логических функций.
По поводу синхронизаций - в мануале на quartus 2 есть все необходимые описания. Поищите там.
Родился
Сообщения: 11
Зарегистрирован: Вс май 16, 2010 22:49:46
Откуда: Ульяновск

Сообщение mirk »

Спасибо за совет, попробую переделать!
of_silence, лучше обратиться к VHDL и отойти от графического представления полностью? Устройство большое.
Реклама
Эиком - электронные компоненты и радиодетали
ASY
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Вт дек 09, 2008 21:34:32

Сообщение ASY »

Отвечаю на вопрос не ко мне.

Совсем необязательно.
На графическом языке тоже можно производить декомпозицию, выделяя повторящиеся или сложные участки в отдельные элементы.

Графические схемы идеально подходят для перевода старых проектов по типу "один к одному" с небольшими изменениями.

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 на входе триггера возникает наложение сигналов, в местах обозначенных #
применение схемы синхронизации устраняет эффект
Реклама
Открыл глаза
Сообщения: 79
Зарегистрирован: Сб май 08, 2010 09:33:42

Сообщение of_silence »

лучше обратиться к VHDL и отойти от графического представления полностью?
Я думаю,что как раз не стоит!
Я пробовал писать в разных вариантах, и нашел самым удобным - общий графический файл, который соединяет блоки между собой, и каждый блок написанный на каком-либо языке (я из-за похожести с С освоил Verilog HDL).
Как только у вас появится возможность писать все в виде кода, потребность во внешних графических базовых функция (типа сложения или триггера) отпадет сама собой, потому что в HDL это проще.
Реклама
Родился
Сообщения: 11
Зарегистрирован: Вс май 16, 2010 22:49:46
Откуда: Ульяновск

Сообщение mirk »

Спасибо большое за ценную информацию! Будем учиться дальше. :)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»