Перейти к содержанию
    

Здравствуйте.

Делается на ПЛИС периферийное устройство для микроконтроллера. Микроконтроллер видит ПЛИС как некую внешнюю SARM. Также формирует для нее тактовый сигнал. Т.е. не совсем формирует, внутри ПЛИС этот тактовый сигнал

умножается на PLL и, соответственно, перестает быть синхронным по отношению к тактовой частоте микроконтроллера. 

ПЛИС внутри себя содержит несколько модулей. Каждый модуль это реверсивный счетчик внешних импульсов с регистром захвата и счетчиков импульсов захвата. Т.е. на каждый модуль приходится три регистра, которые по шине SRAM могут читаться-записываться.

Сейчас тактовая внутри ПЛИС составляет 125 МГц. Все внешние импульсы, поступающие на счетчики проходят через триггеры для устранения метастабильности. Также через триггеры для устранения метастабильности проходят сигналы RD и WR, приходящие с 

микроконтроллера. 

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

На самом деле для подсчета внешних импульсов частота в 125 МГц не нужна, можно и медленней. Такая частота выбрана для более быстрого общения с микроконтроллером.

Что если подавать с микроконтроллера тактовую на ПЛИС скажем 40 МГц, не использовать PLL в ПЛИС и тогда наверное можно исключить триггеры для устранения метастабильности для сигналов RD и WR от микроконтроллера. Ведь в таком случае тактовые 

частоты микроконтроллера и ПЛИС будут синхронными. И, соответственно, тактовая ПЛИС снизится в три раза, что сильно отодвинет ее от расчетной предельной. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если подать на PLL частоту и умножить на 3, то входящая и выходящая не будут синхронны? В смысли фронт не будет совпадать?

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, new123 said:

Если подать на PLL частоту и умножить на 3, то входящая и выходящая не будут синхронны? В смысли фронт не будет совпадать?

При условии, что фаза будет совпадать, то да. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 minutes ago, dimka76 said:

Что если подавать с микроконтроллера тактовую на ПЛИС скажем 40 МГц, не использовать PLL в ПЛИС и тогда наверное можно исключить триггеры для устранения метастабильности для сигналов RD и WR от микроконтроллера. Ведь в таком случае тактовые 

частоты микроконтроллера и ПЛИС будут синхронными. И, соответственно, тактовая ПЛИС снизится в три раза, что сильно отодвинет ее от расчетной предельной. 

Даже с применением PLL частоты будут синхронными (внешняя, приходящая на вход PLL, и выходящая из него). Можно двигать фазу для учета задержек распространения сигналов. Т.е. лишние триггеры не нужны.

Не нужно бояться близости к  "расчетной предельной". Компилятор рассчитывает ее, исходя их наихудших условий, в реальности такое маловероятно, и даже почти наверняка будет работать и выше предельной (но понятно, что заказчику такое не стоит отдавать).

А как получили "предельную расчетную"? Создавали sdc файл? Или просто скормили компилятору проект, а он сам посчитал частоту, какая получилась, без попытки подогнать под требуемое значение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, dimka76 said:

умножается на PLL и, соответственно, перестает быть синхронным по отношению к тактовой частоте микроконтроллера.

Асинхронной она будет только при дробном масштабировании. В целочисленном случае будет просто сдвиг по фазе, который учитывается временным анализатором.

А по поводу проекта, как я понял проблема - основной выходной мультиплексор шины, куда сводится вся информация из регистровых файлов, выполненных на DFF? Если верно, ну так уберите такую кучку регистровых файлов) сделайте пакетную обработку на сдвиговом регистре, сделайте зеркало на блочной/распределенной памяти)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, Yuri124 said:

Даже с применением PLL частоты будут синхронными (внешняя, приходящая на вход PLL, и выходящая из него).

А как получили "предельную расчетную"? Создавали sdc файл? Или просто скормили компилятору проект, а он сам посчитал частоту, какая получилась, без попытки подогнать под требуемое значение?

1.Проверил на плате. Сейчас с микроконтроллера подается 25 МГц, в ПЛИС умножается с помощью PLL на 5, получаем 125 МГц. Далее в ПЛИС счетчиком дели на число кратное степени двойки и выводим на ножку. Смотрю осциллографом одним каналом на то, что идет с микроконтроллера, а вторым - то, что выдает ПЛИС. Сигналы не стоят относительно друг друга, а один скачет относительно другого туда-сюда.

2.В настройках проекта задал частоту.

28 minutes ago, des00 said:

А по поводу проекта, как я понял проблема - основной выходной мультиплексор шины, куда сводится вся информация из регистровых файлов, выполненных на DFF? Если верно, ну так уберите такую кучку регистровых файлов) сделайте пакетную обработку на сдвиговом регистре, сделайте зеркало на блочной/распределенной памяти)

Про пакетную обработку не понял. Или вы предлагается от параллельного интерфейса уйти к последовательному ?

Зеркало - это FIFO или двухпортовая память ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, dimka76 said:

в ПЛИС умножается с помощью PLL на 5, получаем 125 МГц. Далее в ПЛИС счетчиком дели на число кратное степени двойки

Попробуйте в ПЛИС поделить на 5. Или в PLL умножьте на 4. Чтобы убедиться в синхронности частот. И галку поставьте в PLL, что вых частота должна сохранять фазовую привязку к опорной.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, Yuri124 said:

Попробуйте в ПЛИС поделить на 5. Или в PLL умножьте на 4. Чтобы убедиться в синхронности частот. И галку поставьте в PLL, что вых частота должна сохранять фазовую привязку к опорной.

Да, моя ошибка. 

Умножаю на 5, делю на 16 получается дробное деление.

Переделал PLL на х4 и все стало синхронно.

Т.е. получается мне триггеры для устранения метастабильности для сигналов RD и WR вовсе не нужны ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, dimka76 said:

триггеры для устранения метастабильности для сигналов RD и WR вовсе не нужны ?

Не нужны. Но обязательно нужно учесть - как с микроконтроллера это выходит - временнЫе соотношения - (вых частота и сигналы интерфейса) и  входит (данные) , с учетом задержек распространения на плате, и прописать это в  sdc.

Как вариант - можно асинхронно записывать/считывать в ПЛИС, по сигналам с микроконтроллера, и добавить сигнал готовности данных с ПЛИС. Т.е. в регистры ПЛИС данные от микроконтроллера записываются, например, по его сигналу WR. Но нужен будет синхронизатор готовности данных далее в ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, Yuri124 said:

Не нужны. Но обязательно нужно учесть - как с микроконтроллера это выходит - временнЫе соотношения - (вых частота и сигналы интерфейса) и  входит (данные) , с учетом задержек распространения на плате, и прописать это в  sdc.

Как вариант - можно асинхронно записывать/считывать в ПЛИС, по сигналам с микроконтроллера, и добавить сигнал готовности данных с ПЛИС. Т.е. в регистры ПЛИС данные от микроконтроллера записываются, например, по его сигналу WR. Но нужен будет синхронизатор готовности данных далее в ПЛИС.

ОК. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, dimka76 said:

При условии, что фаза будет совпадать, то да.

если фазы соблюдать, судя по комментам, нужно сделать 120Mhz (40*3), то альтера рекомедует ввести clock_enable сигнал, если это позволяет логика и все что попадает под clock_en в sdc завести set_multicycle_path. Тогда запаса прибавится заметно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, dimka76 сказал:

Также через триггеры для устранения метастабильности проходят сигналы RD и WR, приходящие с 

микроконтроллера. 

Я сделал по другому, не знаю правильно или нет. Сигналы WR, RD, CS и выход дешифратора адреса объединил по И и завёл на тактовый вход регистра. Когда микроконтроллер пишет в ПЛИС на элементе И образуется импульс и по нарастающему фронту этого импульса регистр принимает данные с шины данных. Микроконтроллер сигнал WR выставляет когда на шинах адреса и данных значения уже стабилизировались. Пока, вроде, всё работает, но у меня и частота, правда, 50 МГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня проблем не было пока в ПЛИС было три модуля со счетчиками. В другом проекте их стало четыре. И тогда при чтении этих счетчиком начали проявляться ошибочные значения при чтении. Редкие, но периодические. Сейчас пока "закостылил" повторным чтением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, dimka76 said:

Про пакетную обработку не понял. Или вы предлагается от параллельного интерфейса уйти к последовательному ?

на вопрос вы не ответили, задержка у вас в выходном мультиплексоре или нет? Если ваш ответ "Да", то я вам предлагаю избавиться от этого мультиплексора.

Один из вариантов сделать просто аналог "индексной адресации" и вычитывать данные о всей вашей системе пакетом. Реализуется через сдвиговый регистр, который загружает данные всей вашей системы (4-х счетчиков), при чтении базового адреса, после этого каждая следующая транзакция чтения по адресу в окне читает следующие данные.

20 hours ago, dimka76 said:

Зеркало - это FIFO или двухпортовая память ?

в памяти сей "мультиплексор" присутствует аппаратно, надо только ее забить корректными данными. Один из вариантов "зеркало" - теневая память хранящая копию ваших регистров. В таком случае вы работает с выходом блока памяти, а не кучкой регистров, разбросанных по чипу и собираемых в мультиплексор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, des00 said:

на вопрос вы не ответили, задержка у вас в выходном мультиплексоре или нет?

Судя по отчету временного анализатора - нет.

Временной анализатор минимальный слак указывает на путь между сигналом записи от микроконтроллера до счетчика, в который пишутся данные.

Но проблем не было пока в ПЛИС было три модуля со счетчиками. В другом проекте их стало четыре. И тогда при чтении этих счетчиком начали проявляться ошибочные значения при чтении. Редкие, но периодические. 

При этом в обоих проектах и микроконтроллер и ПЛИС одни и те же. Разводка печатной платы между микроконтроллером и ПЛИС та же. Настройки и тактовые частоты микроконтроллера и ПЛИС те же.

ПЛИС работает на частоте 126 МГц. В первом проекте, где три модуля счетчиков в ПЛИС временной анализатор говорит, что предельная частота 160 МГц, в том проекте, где четыре модуля в ПЛИС - предельная 131 МГц.

Вот и подумал, что может что-то в архитектуре поменять, упростить.

Я конечно еще не успел попробовать удлинить время обращения микроконтроллера к ПЛИС.

ПЛИС - LatticeXP2, среда Diamond 3.12.

image.thumb.png.2cb1eea77cbef696da82f6b1bd3595f7.png

image.thumb.png.ca034ec7edfd557d9f667b05b411826f.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...