dimka76 42 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба Здравствуйте. Делается на ПЛИС периферийное устройство для микроконтроллера. Микроконтроллер видит ПЛИС как некую внешнюю SARM. Также формирует для нее тактовый сигнал. Т.е. не совсем формирует, внутри ПЛИС этот тактовый сигнал умножается на PLL и, соответственно, перестает быть синхронным по отношению к тактовой частоте микроконтроллера. ПЛИС внутри себя содержит несколько модулей. Каждый модуль это реверсивный счетчик внешних импульсов с регистром захвата и счетчиков импульсов захвата. Т.е. на каждый модуль приходится три регистра, которые по шине SRAM могут читаться-записываться. Сейчас тактовая внутри ПЛИС составляет 125 МГц. Все внешние импульсы, поступающие на счетчики проходят через триггеры для устранения метастабильности. Также через триггеры для устранения метастабильности проходят сигналы RD и WR, приходящие с микроконтроллера. Изначально таких модулей в ПЛИС было три, теперь появился схожий проект, где таких модулей стало четыре. И предельно возможная частота, которую прогнозирует система проектирования для ПЛИС, сильно приблизилась к рабочей. На самом деле для подсчета внешних импульсов частота в 125 МГц не нужна, можно и медленней. Такая частота выбрана для более быстрого общения с микроконтроллером. Что если подавать с микроконтроллера тактовую на ПЛИС скажем 40 МГц, не использовать PLL в ПЛИС и тогда наверное можно исключить триггеры для устранения метастабильности для сигналов RD и WR от микроконтроллера. Ведь в таком случае тактовые частоты микроконтроллера и ПЛИС будут синхронными. И, соответственно, тактовая ПЛИС снизится в три раза, что сильно отодвинет ее от расчетной предельной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 11 июня, 2021 Опубликовано 11 июня, 2021 (изменено) · Жалоба Если подать на PLL частоту и умножить на 3, то входящая и выходящая не будут синхронны? В смысли фронт не будет совпадать? Изменено 11 июня, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 13 minutes ago, new123 said: Если подать на PLL частоту и умножить на 3, то входящая и выходящая не будут синхронны? В смысли фронт не будет совпадать? При условии, что фаза будет совпадать, то да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 51 minutes ago, dimka76 said: Что если подавать с микроконтроллера тактовую на ПЛИС скажем 40 МГц, не использовать PLL в ПЛИС и тогда наверное можно исключить триггеры для устранения метастабильности для сигналов RD и WR от микроконтроллера. Ведь в таком случае тактовые частоты микроконтроллера и ПЛИС будут синхронными. И, соответственно, тактовая ПЛИС снизится в три раза, что сильно отодвинет ее от расчетной предельной. Даже с применением PLL частоты будут синхронными (внешняя, приходящая на вход PLL, и выходящая из него). Можно двигать фазу для учета задержек распространения сигналов. Т.е. лишние триггеры не нужны. Не нужно бояться близости к "расчетной предельной". Компилятор рассчитывает ее, исходя их наихудших условий, в реальности такое маловероятно, и даже почти наверняка будет работать и выше предельной (но понятно, что заказчику такое не стоит отдавать). А как получили "предельную расчетную"? Создавали sdc файл? Или просто скормили компилятору проект, а он сам посчитал частоту, какая получилась, без попытки подогнать под требуемое значение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 1 hour ago, dimka76 said: умножается на PLL и, соответственно, перестает быть синхронным по отношению к тактовой частоте микроконтроллера. Асинхронной она будет только при дробном масштабировании. В целочисленном случае будет просто сдвиг по фазе, который учитывается временным анализатором. А по поводу проекта, как я понял проблема - основной выходной мультиплексор шины, куда сводится вся информация из регистровых файлов, выполненных на DFF? Если верно, ну так уберите такую кучку регистровых файлов) сделайте пакетную обработку на сдвиговом регистре, сделайте зеркало на блочной/распределенной памяти) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 26 minutes ago, Yuri124 said: Даже с применением PLL частоты будут синхронными (внешняя, приходящая на вход PLL, и выходящая из него). А как получили "предельную расчетную"? Создавали sdc файл? Или просто скормили компилятору проект, а он сам посчитал частоту, какая получилась, без попытки подогнать под требуемое значение? 1.Проверил на плате. Сейчас с микроконтроллера подается 25 МГц, в ПЛИС умножается с помощью PLL на 5, получаем 125 МГц. Далее в ПЛИС счетчиком дели на число кратное степени двойки и выводим на ножку. Смотрю осциллографом одним каналом на то, что идет с микроконтроллера, а вторым - то, что выдает ПЛИС. Сигналы не стоят относительно друг друга, а один скачет относительно другого туда-сюда. 2.В настройках проекта задал частоту. 28 minutes ago, des00 said: А по поводу проекта, как я понял проблема - основной выходной мультиплексор шины, куда сводится вся информация из регистровых файлов, выполненных на DFF? Если верно, ну так уберите такую кучку регистровых файлов) сделайте пакетную обработку на сдвиговом регистре, сделайте зеркало на блочной/распределенной памяти) Про пакетную обработку не понял. Или вы предлагается от параллельного интерфейса уйти к последовательному ? Зеркало - это FIFO или двухпортовая память ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 5 minutes ago, dimka76 said: в ПЛИС умножается с помощью PLL на 5, получаем 125 МГц. Далее в ПЛИС счетчиком дели на число кратное степени двойки Попробуйте в ПЛИС поделить на 5. Или в PLL умножьте на 4. Чтобы убедиться в синхронности частот. И галку поставьте в PLL, что вых частота должна сохранять фазовую привязку к опорной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 14 minutes ago, Yuri124 said: Попробуйте в ПЛИС поделить на 5. Или в PLL умножьте на 4. Чтобы убедиться в синхронности частот. И галку поставьте в PLL, что вых частота должна сохранять фазовую привязку к опорной. Да, моя ошибка. Умножаю на 5, делю на 16 получается дробное деление. Переделал PLL на х4 и все стало синхронно. Т.е. получается мне триггеры для устранения метастабильности для сигналов RD и WR вовсе не нужны ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 11 minutes ago, dimka76 said: триггеры для устранения метастабильности для сигналов RD и WR вовсе не нужны ? Не нужны. Но обязательно нужно учесть - как с микроконтроллера это выходит - временнЫе соотношения - (вых частота и сигналы интерфейса) и входит (данные) , с учетом задержек распространения на плате, и прописать это в sdc. Как вариант - можно асинхронно записывать/считывать в ПЛИС, по сигналам с микроконтроллера, и добавить сигнал готовности данных с ПЛИС. Т.е. в регистры ПЛИС данные от микроконтроллера записываются, например, по его сигналу WR. Но нужен будет синхронизатор готовности данных далее в ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 24 minutes ago, Yuri124 said: Не нужны. Но обязательно нужно учесть - как с микроконтроллера это выходит - временнЫе соотношения - (вых частота и сигналы интерфейса) и входит (данные) , с учетом задержек распространения на плате, и прописать это в sdc. Как вариант - можно асинхронно записывать/считывать в ПЛИС, по сигналам с микроконтроллера, и добавить сигнал готовности данных с ПЛИС. Т.е. в регистры ПЛИС данные от микроконтроллера записываются, например, по его сигналу WR. Но нужен будет синхронизатор готовности данных далее в ПЛИС. ОК. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 3 hours ago, dimka76 said: При условии, что фаза будет совпадать, то да. если фазы соблюдать, судя по комментам, нужно сделать 120Mhz (40*3), то альтера рекомедует ввести clock_enable сигнал, если это позволяет логика и все что попадает под clock_en в sdc завести set_multicycle_path. Тогда запаса прибавится заметно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 6 часов назад, dimka76 сказал: Также через триггеры для устранения метастабильности проходят сигналы RD и WR, приходящие с микроконтроллера. Я сделал по другому, не знаю правильно или нет. Сигналы WR, RD, CS и выход дешифратора адреса объединил по И и завёл на тактовый вход регистра. Когда микроконтроллер пишет в ПЛИС на элементе И образуется импульс и по нарастающему фронту этого импульса регистр принимает данные с шины данных. Микроконтроллер сигнал WR выставляет когда на шинах адреса и данных значения уже стабилизировались. Пока, вроде, всё работает, но у меня и частота, правда, 50 МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба У меня проблем не было пока в ПЛИС было три модуля со счетчиками. В другом проекте их стало четыре. И тогда при чтении этих счетчиком начали проявляться ошибочные значения при чтении. Редкие, но периодические. Сейчас пока "закостылил" повторным чтением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 июня, 2021 Опубликовано 12 июня, 2021 · Жалоба 20 hours ago, dimka76 said: Про пакетную обработку не понял. Или вы предлагается от параллельного интерфейса уйти к последовательному ? на вопрос вы не ответили, задержка у вас в выходном мультиплексоре или нет? Если ваш ответ "Да", то я вам предлагаю избавиться от этого мультиплексора. Один из вариантов сделать просто аналог "индексной адресации" и вычитывать данные о всей вашей системе пакетом. Реализуется через сдвиговый регистр, который загружает данные всей вашей системы (4-х счетчиков), при чтении базового адреса, после этого каждая следующая транзакция чтения по адресу в окне читает следующие данные. 20 hours ago, dimka76 said: Зеркало - это FIFO или двухпортовая память ? в памяти сей "мультиплексор" присутствует аппаратно, надо только ее забить корректными данными. Один из вариантов "зеркало" - теневая память хранящая копию ваших регистров. В таком случае вы работает с выходом блока памяти, а не кучкой регистров, разбросанных по чипу и собираемых в мультиплексор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 12 июня, 2021 Опубликовано 12 июня, 2021 · Жалоба 6 hours ago, des00 said: на вопрос вы не ответили, задержка у вас в выходном мультиплексоре или нет? Судя по отчету временного анализатора - нет. Временной анализатор минимальный слак указывает на путь между сигналом записи от микроконтроллера до счетчика, в который пишутся данные. Но проблем не было пока в ПЛИС было три модуля со счетчиками. В другом проекте их стало четыре. И тогда при чтении этих счетчиком начали проявляться ошибочные значения при чтении. Редкие, но периодические. При этом в обоих проектах и микроконтроллер и ПЛИС одни и те же. Разводка печатной платы между микроконтроллером и ПЛИС та же. Настройки и тактовые частоты микроконтроллера и ПЛИС те же. ПЛИС работает на частоте 126 МГц. В первом проекте, где три модуля счетчиков в ПЛИС временной анализатор говорит, что предельная частота 160 МГц, в том проекте, где четыре модуля в ПЛИС - предельная 131 МГц. Вот и подумал, что может что-то в архитектуре поменять, упростить. Я конечно еще не успел попробовать удлинить время обращения микроконтроллера к ПЛИС. ПЛИС - LatticeXP2, среда Diamond 3.12. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться