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

Переключатель двух независимых клоков

Задача:

Имеем 2 независимых клока (скажем, 20 и 24 МГц), требуется сделать переключататель, который на выходе даёт 20,10,24,12 МГц (выбор - 2 асинхронными сигналами). Требуется, чтобы на выходе не появлялось импульсов короче, чем полупериод самого быстрого входного клока.

 

Родил вот такую схему (нарисовано в квартусе) resync.png, насколько она корректна?

 

PS: вполне понимаю, что схема асинхронная и на очень быстрых клоках всё равно возможны глюки. Но макс. частота такая, как указана выше, а моделирование вроде бы не выявляет глитчей (целевой чип - epm3032).

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

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


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

Вот корректная схема (делать было нечего, нарисовал со своего верилог-описания :) ) А у вас что-то монстр какой-то родился.

 

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

post-2881-1171422282_thumb.jpg

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


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

Задача:

Имеем 2 независимых клока (скажем, 20 и 24 МГц), требуется сделать переключататель, который на выходе даёт 20,10,24,12 МГц (выбор - 2 асинхронными сигналами). Требуется, чтобы на выходе не появлялось импульсов короче, чем полупериод самого быстрого входного клока.

 

Родил вот такую схему (нарисовано в квартусе) resync.png, насколько она корректна?

 

PS: вполне понимаю, что схема асинхронная и на очень быстрых клоках всё равно возможны глюки. Но макс. частота такая, как указана выше, а моделирование вроде бы не выявляет глитчей (целевой чип - epm3032).

 

Здрв!

посмотрите - может это поможет

http://www.us.design-reuse.com/articles/article5827.html

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


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

Спасибо всем!

 

Насколько я понял, обе схемы переключения клоков функционально аналогичны моей (часть схемы не ниже 4 триггеров ряд): не дают глитчей. Но зато выглядят изящней :)

 

Насчёт предложенного переключающегося делителя пополам - промоделил сейчас в квартусе, он к сожалению укорачивает 1 клок при переключении с медленной частоты на быструю.

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


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

Вот эта статья не поможет - вроде проще: http://www.eetimes.com/story/OEG20030626S0035

И еще у ксайлинкса был апнот по безглитчевому переключению клоков.

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


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

еще у ксайлинкса был апнот по безглитчевому переключению клоков

/////////////////////////////////////////////////////////////////////

Он весь гличевый. Потому что все по одному фронту работает.

Если по обоим фронтам, как в предложенной статье, то гличей нет. Зато "пустоты" есть.

Может можно обойтись без переключения частот.

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


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

Насколько я понял, обе схемы переключения клоков функционально аналогичны моей (часть схемы не ниже 4 триггеров ряд): не дают глитчей. Но зато выглядят изящней :)

 

4 триггера в ряд это лишнее. Достаточно 2 триггера в ряд, тактируемых каждым клоком для независимых клоков, и одного триггера для зависимых. 4 это как три презерватива одевать. Метастабильность не пройдет в clock-tree уже через второй триггер.

 

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

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


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

Вот что получилось.

Слева - переключатель клоков, справа (3 триггера) - переключатель F - F/2 безглитчевый... вроде бы.

 

post-21418-1171502899_thumb.jpg

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


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

справа (3 триггера) - переключатель F - F/2 безглитчевый... вроде бы.

 

Только вот укорочение импульса осталось - оно ведь произрастает из того, что клок, генерируемый делителем, запаздывает на Tco триггера относительно неделенного клока, и при переключении с быстрого на медленный получается первый период на это самое Tco меньше остальных. Так что глобальной проблемы не решает :) :) - возможно просто так случайно получилось, что путь через триггер-делитель оказался таким же, как и путь мимо него.

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


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

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

 

Ну да, укорочение медленного клока осталось - но главное, что не быстрого.

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


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

переключатель F - F/2 безглитчевый... вроде бы

////////////////////////////////////////////

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

Главное отличие Вашей и другой схем это в тактировании триггеров.

Но самое главное, такая схема некорректна по определению. Без констрейнов по всем путям Вы долны получить сплошные clock skew, некорректные clock hold.

Я в лоб первел. Если хотите посмотрите

module switch_clocks

(

input clock1,

input clock0,

input select,

input delitel,

output out_clock_end

);

 

reg reg_clock1_a, reg_clock1_b;

reg reg_clock0_a, reg_clock0_b;

reg reg_clock1_aa, reg_clock1_bb;

reg reg_clock0_aa, reg_clock0_bb;

reg reg_del;

 

wire clock0a;

wire a, b, c, d;

wire aa, bb, cc, dd;

 

always @(posedge clock1)

begin

reg_clock1_a <= a;

end

always @(negedge clock1)

begin

reg_clock1_b <= reg_clock1_a;

end

 

always @(posedge clock0)

begin

reg_clock0_a <= b;

end

always @(negedge clock0)

begin

reg_clock0_b <= reg_clock0_a;

end

 

assign a = ~reg_clock0_b & select;

assign b = ~reg_clock1_b & ~select;

assign c = reg_clock1_b & clock1;

assign d = reg_clock0_b & clock0;

assign clock1a = c | d;

 

always @(posedge clock1a)

begin

reg_del <= ~reg_del;

end

 

assign clock0a = reg_del;

 

always @(posedge clock1a)

begin

reg_clock1_aa <= aa;

end

always @(negedge clock1a)

begin

reg_clock1_bb <= reg_clock1_aa;

end

 

always @(posedge clock0a)

begin

reg_clock0_aa <= bb;

end

always @(negedge clock0a)

begin

reg_clock0_bb <= reg_clock0_aa;

end

 

assign aa = ~reg_clock0_bb & delitel;

assign bb = ~reg_clock1_bb & ~delitel;

assign cc = reg_clock1_bb & clock1a;

assign dd = reg_clock0_bb & clock0a;

assign out_clock_end = cc | dd;

 

endmodule

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


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

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

Главное отличие Вашей и другой схем это в тактировании триггеров.

Но самое главное, такая схема некорректна по определению. Без констрейнов по всем путям Вы долны получить сплошные clock skew, некорректные clock hold.

Ну я в принципе согласен, что некорректная. Но дело в том, что у меня все сигналы выбора - асинхронные, а насколько я понял, в таком случае надо использовать схему переключения для 'unrelated' клоков, даже если сами клоки 'related'. Ведь надо асинхронный сигнал через цепочку из 2 триггеров пропускать.

 

Я в лоб первел. Если хотите посмотрите

Спасибо!

Вопрос - почему у вас

 

always @(posedge clock1)

begin

reg_clock1_a <= a;

end

always @(negedge clock1)

begin

reg_clock1_b <= reg_clock1_a;

end

то posedge, то negedge?

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

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


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

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

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

А если речь идет о переходе из одного клокового домена в другой (глобаьный), то и переключатели не нужны. В конференции об этом подробно расписано. Наберте в поисковике слово метастабильность.

310388.zip

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


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

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

Ну задача глобально уже поставлена и кристалл выбран (ацекс1к), + макс3000 для бута, ну заодно и для переключения частот. Схема существенно 5-вольтовая, потому и ацекс.

 

А если речь идет о переходе из одного клокового домена в другой (глобаьный), то и переключатели не нужны. В конференции об этом подробно расписано. Наберте в поисковике слово метастабильность.

С этим более-менее всё ясно.

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


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

Ну задача глобально уже поставлена и кристалл выбран (ацекс1к), + макс3000 для бута, ну заодно и для переключения частот. Схема существенно 5-вольтовая, потому и ацекс.

////////////////////////////////////////////////////////////////////

Что значит схема пятивольтовая. ТТЛ или МОП уровни.

Любой циклон, циклон2 с загрузочным ПЗУ EPCS в разы дешевле той связки, которую Вы выбрали.

Добавить сюда 10 рублей на преобразователи уровней или буфера, терпимые к уровням 5В(Здесь море рекомендаций по фирмам и сериям), и все дела. Ну просто неограниченные возможности.

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


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

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

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

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

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

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

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

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

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

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