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

Multi Clock design

Весьма упрощенная схема системы в прицепе.

 

Это мой первый проект на FPGA.

Но , к сожалению, без такой "кучерявости" по клокам никак...

Отдельные блоки написаны, симулированы.

PCI target уже проверен в железе.

В девайсе два независимых канала DDR266,

т. е. предусматривается вариант - один пишется, второй читается на PCI.

 

Вопрос такой.

Как правильней поступить с клоками?

Что будет лучше:

- Запитать PLL 2 от выхода PLL3 (установлено у меня сейчас так).

- Запитать PLL 2 от выхода PLL1.

- Запитать PLL 2 тоже от осциллятора (внешний кварц) .

- Какой-то другой вариант...

- Или все едино будет плохо, трудно будет добиться чтобы все это вместе работало :-).

- "я дую на воду" :-)

Входной поток - 660 мегабайт/сек

 

Нужный функционал девайса на этом этапе:

режим 1 (фоновый) - запись в память и чтение на PCI, rating определяется от PCI.

допустимы пропуски во входном потоке данных.

режим 2. запись до заполнения в оба канала DDR последовательно, стоп и

затем чтение через PCI.

Работа устройства начинается с инициализации регистров по PCI,

затем и управляется (в основном) посредством записи команд в регистры через PCI.

т. е. без PCI - "нет устройства".

Может взять исходный для PLL 2-3 клок от PLL 1?

Наверное это не есть хорошо, не знаю когда поднимается PCI clock (от Linux машины)- нет осцилографа под рукой.

 

FPGA - Lattice EC33, 672 pin

DEVICE_sheet.pdf

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


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

Что-то не понял, зачем PLL3, если 66MHz уже есть на PLL1? Почему прямо его нельзя подать на Data Flow Control? Соответственно его же подать на PLL2.

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


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

Весьма упрощенная схема системы в прицепе.

 

Это мой первый проект на FPGA.

Но , к сожалению, без такой "кучерявости" по клокам никак...

Отдельные блоки написаны, симулированы.

PCI target уже проверен в железе.

В девайсе два независимых канала DDR266,

т. е. предусматривается вариант - один пишется, второй читается на PCI.

 

Вопрос такой.

Как правильней поступить с клоками?

Что будет лучше:

- Запитать PLL 2 от выхода PLL3 (установлено у меня сейчас так).

- Запитать PLL 2 от выхода PLL1.

- Запитать PLL 2 тоже от осциллятора (внешний кварц) .

- Какой-то другой вариант...

- Или все едино будет плохо, трудно будет добиться чтобы все это вместе работало :-).

- "я дую на воду" :-)

Входной поток - 660 мегабайт/сек

 

Нужный функционал девайса на этом этапе:

режим 1 (фоновый) - запись в память и чтение на PCI, rating определяется от PCI.

допустимы пропуски во входном потоке данных.

режим 2. запись до заполнения в оба канала DDR последовательно, стоп и

затем чтение через PCI.

Работа устройства начинается с инициализации регистров по PCI,

затем и управляется (в основном) посредством записи команд в регистры через PCI.

т. е. без PCI - "нет устройства".

Может взять исходный для PLL 2-3 клок от PLL 1?

Наверное это не есть хорошо, не знаю когда поднимается PCI clock (от Linux машины)- нет осцилографа под рукой.

 

FPGA - Lattice EC33, 672 pin

 

PLL1 вообще исключить, ибо далеко не всегда тактовый сигнал шины PCI является достаточно "качественным" для стабильной работы блока PLL. Не хочу сказать, что это обязательно будет так, но были случаи нестабильной работы.

 

PLL2 и PLL3 тактировать внешним генератором, можно одним и тем же.

 

Ну и не забыть разумеется про правильный сброс устройства с учетом сигналов захвата фазы от всех PLL.

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


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

Что-то не понял, зачем PLL3, если 66MHz уже есть на PLL1? Почему прямо его нельзя подать на Data Flow Control? Соответственно его же подать на PLL2.

Все равно надо PLL3.

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

Пэтому на PLL3 реализуется 66 + 66 со сдвигом на 90.

 

 

PLL1 вообще исключить, ибо далеко не всегда тактовый сигнал шины PCI является достаточно "качественным" для стабильной работы блока PLL. Не хочу сказать, что это обязательно будет так, но были случаи нестабильной работы.

А если исходный нестабильный (скорее всего это или разводка была такая или мастер-чип такой)

то напрямую разве будет лучше?

По моему разумению (это взято по примерам корок) PLL работает как развязка + повышение нагрузочгной способности + оптимальное использование специальных клоковых линий.

 

PLL2 и PLL3 тактировать внешним генератором, можно одним и тем же.

ОК.

Ну и не забыть разумеется про правильный сброс устройства с учетом сигналов захвата фазы от всех PLL.

Не совсем понял.

С PLL есть сигнал LOCK - имеете ввиду, что надо его отслеживать и обрабатывать ?

Согласен.

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

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


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

Все равно надо PLL3.

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

Пэтому на PLL3 реализуется 66 + 66 со сдвигом на 90.

Ничего непонятно, можно поподробнее? Нагрузка без разницы, можно от одной PLL питать весь дизайн.

 

А если исходный нестабильный (скорее всего это или разводка была такая или мастер-чип такой)

то напрямую разве будет лучше?

По моему разумению (это взято по примерам корок) PLL работает как развязка + повышение нагрузочгной способности + оптимальное использование специальных клоковых линий.

Напрямую будет лучше, если у входной частоты большое дрожание - PLL будет слетать, а без нее будет работать. А повышение нагрузочной способности и использования клоковых линий дает буфер, а не PLL. Поэтому если с частотой не надо манипулировать - то пропускать ее черел PLL один к одному в большинстве случаев бессмысленно: у нее дрожание как минимум 300ps p-p, хороший внешний генератор может дать на порядок-другой меньше. Хоть это и важно только при очень высоких частотах.

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


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

Ничего непонятно, можно поподробнее? Нагрузка без разницы, можно от одной PLL питать весь дизайн.

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

Спасибо, учту.

Пока оставлю PCI c PLL, но в случае проблем - есть вариант где копать.

По неопытности упущение - подвел PCI клок не на пин, который может быть подключен прямо к дереву клоков, а на простой пин.

PAR это пропускает, но "осуждает".

Исходя из этого, в конечном итоге так может быть все-таки лучше.

Потом сделаю вариант.

 

 

А повышение нагрузочной способности и использования клоковых линий дает буфер, а не PLL. Поэтому если с частотой не надо манипулировать - то пропускать ее черел PLL один к одному в большинстве случаев бессмысленно: у нее дрожание как минимум 300ps p-p, хороший внешний генератор может дать на порядок-другой меньше. Хоть это и важно только при очень высоких частотах.

Понял. Изложено четко.

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


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

А если исходный нестабильный (скорее всего это или разводка была такая или мастер-чип такой)

то напрямую разве будет лучше?

 

Обычно со стороны PCI PLL не используется, сама спецификация PCI допускает, если я не ошибаюсь, достаточно "плохой" клок. Разводка и т.п. не причем.

 

По моему разумению (это взято по примерам корок) PLL работает как развязка + повышение нагрузочгной способности + оптимальное использование специальных клоковых линий.

 

Здесь важны только специальные буфера, PLL лишь может скомпенсировать фазу тактирования, то есть увеличить в некоторой степени запас по временам, но для частот PCI это не существенно.

 

Не совсем понял.

С PLL есть сигнал LOCK - имеете ввиду, что надо его отслеживать и обрабатывать ?

Согласен.

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

 

Лучше продумать этот вопрос сразу же, ибо в худшем случае устройство просто не запустится правильно. Да, кроме сброса отдельных доменов устройства, нужно еще и сброс самих PLL продумать.

 

Спасибо, учту.

Пока оставлю PCI c PLL, но в случае проблем - есть вариант где копать.

По неопытности упущение - подвел PCI клок не на пин, который может быть подключен прямо к дереву клоков, а на простой пин.

 

Вот этот момент, конечно, не удачный... Можно долго провозиться. Причем PLL тут не особо поможет, можно конечно "играть" с фазой, но это не есть правильное решение. Если есть возможность, лучше сразу завести PCI клок на глобальный вход.

 

PAR это пропускает, но "осуждает".

Исходя из этого, в конечном итоге так может быть все-таки лучше.

 

См. выше. PLL в данном случае проблему не решает.

 

Вообще, лучше сразу делать продуманно и правильно, ибо если не повезет, то больше времени потратите на выявление причин. Но может и повести :)

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


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

Обычно со стороны PCI PLL не используется, сама спецификация PCI допускает, если я не ошибаюсь, достаточно "плохой" клок. Разводка и т.п. не причем.

Здесь важны только специальные буфера, PLL лишь может скомпенсировать фазу тактирования, то есть увеличить в некоторой степени запас по временам, но для частот PCI это не существенно.

Лучше продумать этот вопрос сразу же, ибо в худшем случае устройство просто не запустится правильно. Да, кроме сброса отдельных доменов устройства, нужно еще и сброс самих PLL продумать.

Вот этот момент, конечно, не удачный... Можно долго провозиться. Причем PLL тут не особо поможет, можно конечно "играть" с фазой, но это не есть правильное решение. Если есть возможность, лучше сразу завести PCI клок на глобальный вход.

См. выше. PLL в данном случае проблему не решает.

С PCI понятно.

Тем более, на уровне тестов, в железе работает.

Logic Analyzer в прошивке показывает правильную запись.

Да и на другой строне вижу в терминале результат циклического запись-чтение.

 

Вообще, лучше сразу делать продуманно и правильно, ибо если не повезет, то больше времени потратите на выявление причин. Но может и повести :)

Интересно, есть ли другие мнения на этот счет? :-)

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


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

Входной поток - 660 мегабайт/сек

А скорость PCI не слабовата для такого потока?

Хотя PCI может быть чисто ради удобства.

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


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

А скорость PCI не слабовата для такого потока?

Хотя PCI может быть чисто ради удобства.

Конечно, более чем слабовата.

Но ведь и нет попытки на ходу его перекачивать.

К FPGA привинчено DDR накопитель (сейчас 4 GB).

Работает "старт-стоп" + перекачка на встроенный компьютер с Линуксом.

А на нем подходящий интерфейс - PCI 32x66.

На ходу передача только отдельных "оценочных" фрагментов данных, в темпе, который позволит PCI.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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