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

Интересная задачка

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

 

Нужен "счетчик" с четырьмя входными сигналами: UpEnable, ClkUp и DownEnable, ClkDown. Про всякое типа Reset не говорю.

 

ClkUp и ClkDown - две независимые тактовые последовательности, асинхронные относительно друг-друга, с неизвестным соотношением частот.

 

Вот по-моему и все...

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


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

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

 

Нужен "счетчик" с четырьмя входными сигналами: UpEnable, ClkUp и DownEnable, ClkDown. Про всякое типа Reset не говорю.

 

ClkUp и ClkDown - две независимые тактовые последовательности, асинхронные относительно друг-друга, с неизвестным соотношением частот.

 

Вот по-моему и все...

 

Тривиальный указатель адреса на FIFO. В их описаниях и надо смотреть.

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


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

Тривиальный указатель адреса на FIFO. В их описаниях и надо смотреть.

А поточнее можно - где именно???

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


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

Про переключение между двумя клоками можно посмотреть в юзер гайде на Virtex2 (UG002, стр.71)

http://www.xilinx.com/bvdocs/userguides/ug002.pdf

Есть там такая штука - BUFGMUX.

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


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

Тривиальный указатель адреса на FIFO. В их описаниях и надо смотреть.

А поточнее можно - где именно???

 

Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs

 

И еще много чего там есть:

 

www.sunburst-design.com/papers

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


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

Тривиальный указатель адреса на FIFO. В их описаниях и надо смотреть.

А поточнее можно - где именно???

 

Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs

 

И еще много чего там есть:

 

www.sunburst-design.com/papers

Посмотрел - действительно много интересной информации, но это не то, что меня интересует сейчас. Мне надо чего-то на функциональном уровне, а с проблемами метастабильности я буду бороться потом :)

 

Про переключение между двумя клоками можно посмотреть в юзер гайде на Virtex2 (UG002, стр.71)

http://www.xilinx.com/bvdocs/userguides/ug002.pdf

Есть там такая штука - BUFGMUX.

Не понял связи - во-первых, мне надо не для Xilinx-а, но это не столь и важно, а второе - мне не надо переключать клоки в принципе

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


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

//Посмотрел - действительно много интересной информации, но это не то, что меня интересует сейчас. Мне надо чего-то на функциональном уровне, а с проблемами метастабильности я буду бороться потом :)

 

Если на функциональном уровне - два счетчика с енейблами, один работает на частоте ClkUp, второй на ClkDown и вычитатель на который подается то, что насчитали счетчики.

 

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

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


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

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

 

Нужен "счетчик" с четырьмя входными сигналами: UpEnable, ClkUp и DownEnable, ClkDown. Про всякое типа Reset не говорю.

 

ClkUp и ClkDown - две независимые тактовые последовательности, асинхронные относительно друг-друга, с неизвестным соотношением частот.

 

Если чуть копнуть, то оказывается, что эта задачка не так примитивна, как кажется на первый взгляд, и связана с вопросами семантики языка, которым написано сообщение ;)

 

Во-первых, что такое счетчик? Самый обычный, одноклоковый? Попробуйте дать его формальное определение. Наверняка не обойдетесь без дискретного времени: "по приходу клоку происходит изменение выходов". Счетчик в непрерывном времени нереализуем без дополнительного упоминания переходных процессов - любые счетчики в непрерывном времени являются лишь аппроксимацией идеального счетчика. Можно или нет пользоваться той или иной аппроксимацией - зависит от применения. К счастью, в большинстве применений время дискретно и совпадает с доменом клока самого счетчика, и никаких вопросов не возникает.

 

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

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


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

И еще много чего там есть:

 

www.sunburst-design.com/papers

 

там же:

 

Simulation and Synthesis Techniques for Asynchronous FIFO Design

 

Simulation and Synthesis Techniques for Asynchronous FIFO Design with Asynchronous Pointer Comparisons

 

Я надеялся, что Вы сами это найдете....

Удачи!

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


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

//Посмотрел - действительно много интересной информации, но это не то, что меня интересует сейчас. Мне надо чего-то на функциональном уровне, а с проблемами метастабильности я буду бороться потом :)

 

Если на функциональном уровне - два счетчика с енейблами, один работает на частоте ClkUp, второй на ClkDown и вычитатель на который подается то, что насчитали счетчики.

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

 

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

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

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


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

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

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

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

Так все-таки одна частота известна?

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


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

Об этом варианте я подумал сразу - вроде все ничего, но что произойдет со всей этой халабудой в момент переполнения одного из счетчиков???

Если оба счётчика максимальной разрядности, какой и требуемый результат, то никаких проблем не должно быть. Это вероятнее всего самый надёжный вариант, работающий на максимально возможной частоте и без каких-либо ограничений. Лишь бы счётчики синхронно (одновременно) обновляли все свои выходы.

 

Другой вариант - корректировать оба счётчика в момент прихода любого строба. То есть, на который счётчик приходит строб - он прибавляет еденицу и вычитает значение противоположного счётчика. А противоположный при этом обнуляется. Для вычитающего счётчика - наоборот. Однако, это ненадёжный вариант. Так как он требует чтобы в этот момент не было прихода второго строба. И скорее всего он неработоспособный.

 

Вобщем, на мой взляд первый вариант самый разумный и надёжный.

____________________

А кто-нибудь может привести пример логического элемента с двумя строб-входами? Мне почему-то ничего в голову не приходит.

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


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

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

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

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

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

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

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

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

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

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