Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Переключатель двух независимых клоков
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
LordVader
Задача:
Имеем 2 независимых клока (скажем, 20 и 24 МГц), требуется сделать переключататель, который на выходе даёт 20,10,24,12 МГц (выбор - 2 асинхронными сигналами). Требуется, чтобы на выходе не появлялось импульсов короче, чем полупериод самого быстрого входного клока.

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

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

Да, левая половина это клок-селектор для несвязанных клоков, если надо, по образу и подобию расширеятся хоть до опупения, вторая (зная, что деленный клок вполне определено связан по фазе с неделенным) просто переключатель.
Victor®
Цитата(LordVader @ Feb 14 2007, 02:25) *
Задача:
Имеем 2 независимых клока (скажем, 20 и 24 МГц), требуется сделать переключататель, который на выходе даёт 20,10,24,12 МГц (выбор - 2 асинхронными сигналами). Требуется, чтобы на выходе не появлялось импульсов короче, чем полупериод самого быстрого входного клока.

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

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


Здрв!
посмотрите - может это поможет
http://www.us.design-reuse.com/articles/article5827.html
LordVader
Спасибо всем!

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

Насчёт предложенного переключающегося делителя пополам - промоделил сейчас в квартусе, он к сожалению укорачивает 1 клок при переключении с медленной частоты на быструю.
Gate
Вот эта статья не поможет - вроде проще: http://www.eetimes.com/story/OEG20030626S0035
И еще у ксайлинкса был апнот по безглитчевому переключению клоков.
sazh
еще у ксайлинкса был апнот по безглитчевому переключению клоков
/////////////////////////////////////////////////////////////////////
Он весь гличевый. Потому что все по одному фронту работает.
Если по обоим фронтам, как в предложенной статье, то гличей нет. Зато "пустоты" есть.
Может можно обойтись без переключения частот.
SM
Цитата(LordVader @ Feb 14 2007, 14:58) *
Насколько я понял, обе схемы переключения клоков функционально аналогичны моей (часть схемы не ниже 4 триггеров ряд): не дают глитчей. Но зато выглядят изящней smile.gif


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

Что касается укорочения импульса при переключении делителя - если такое укорочение криминально, то надо повторить переключатель для асинхронных клоков, только убрать по одному триггеру из каждого плеча, так как клоки все таки синхронизированы и метастабильности априори не будет.
LordVader
Вот что получилось.
Слева - переключатель клоков, справа (3 триггера) - переключатель F - F/2 безглитчевый... вроде бы.

Нажмите для просмотра прикрепленного файла
SM
Цитата(LordVader @ Feb 15 2007, 01:29) *
справа (3 триггера) - переключатель F - F/2 безглитчевый... вроде бы.


Только вот укорочение импульса осталось - оно ведь произрастает из того, что клок, генерируемый делителем, запаздывает на Tco триггера относительно неделенного клока, и при переключении с быстрого на медленный получается первый период на это самое Tco меньше остальных. Так что глобальной проблемы не решает smile.gif smile.gif - возможно просто так случайно получилось, что путь через триггер-делитель оказался таким же, как и путь мимо него.
LordVader
Цитата(SM @ Feb 15 2007, 03:04) *
Только вот укорочение импульса осталось - оно ведь произрастает из того, что клок, генерируемый делителем, запаздывает на Tco триггера относительно неделенного клока, и при переключении с быстрого на медленный получается первый период на это самое Tco меньше остальных.


Ну да, укорочение медленного клока осталось - но главное, что не быстрого.
sazh
переключатель 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
LordVader
Цитата(sazh @ Feb 15 2007, 09:57) *
В этом вроде бы все и заложено. Вы выносите на обсуждение схему, анализ которой требует больших временных затрат. У кого они есть. При этом игнорируете схемные решения с приличным анализом.
Главное отличие Вашей и другой схем это в тактировании триггеров.
Но самое главное, такая схема некорректна по определению. Без констрейнов по всем путям Вы долны получить сплошные 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?
В этом какой-то глубинный смысл именно для данной схемы, или просто, чтоб быстрее проходило?
sazh
Я не вникал вглубинный смысл этой схемы. Сходил по ссылке, графику перевел в текст и размножил на блока. Получил неудовлетворительный результат.
Обычно сначала ставиться задача. И под нее выбирается кристалл. Например с pll. Там можно и свитчер организовать, и любой делитель в разумных пределах.
А если речь идет о переходе из одного клокового домена в другой (глобаьный), то и переключатели не нужны. В конференции об этом подробно расписано. Наберте в поисковике слово метастабильность.
LordVader
Цитата(sazh @ Feb 18 2007, 11:34) *
Обычно сначала ставиться задача. И под нее выбирается кристалл. Например с pll. Там можно и свитчер организовать, и любой делитель в разумных пределах.

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

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

С этим более-менее всё ясно.
sazh
Ну задача глобально уже поставлена и кристалл выбран (ацекс1к), + макс3000 для бута, ну заодно и для переключения частот. Схема существенно 5-вольтовая, потому и ацекс.
////////////////////////////////////////////////////////////////////
Что значит схема пятивольтовая. ТТЛ или МОП уровни.
Любой циклон, циклон2 с загрузочным ПЗУ EPCS в разы дешевле той связки, которую Вы выбрали.
Добавить сюда 10 рублей на преобразователи уровней или буфера, терпимые к уровням 5В(Здесь море рекомендаций по фирмам и сериям), и все дела. Ну просто неограниченные возможности.
LordVader
Цитата(sazh @ Feb 19 2007, 20:13) *
Ну задача глобально уже поставлена и кристалл выбран (ацекс1к), + макс3000 для бута, ну заодно и для переключения частот. Схема существенно 5-вольтовая, потому и ацекс.
////////////////////////////////////////////////////////////////////
Что значит схема пятивольтовая. ТТЛ или МОП уровни.

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

[глядя на efind.ru] Что-то я не сказал бы, что даже самые младшие циклоны в разы дешевле ацексов. Вот например ep1k30 в ткфп-144 я покупаю в розницу (!) за 450руб, а за сколько я куплю самый младший циклон в таком же корпусе?
Да ещё геморрой с 5в tolerancy.
А макс у меня - для того, чтобы процессор смог забутить ацекс, в самом начале, как бонус - прошивка ацекса в флеше обычном.
vetal
Розница на altera : http://www.altera.ru/cgi-bin/price/price

acex+epc2 ~ 17$+26$=43$
ep1c3+epcs1~ 12$+4$=16$
--------------------------------
связка на cyclone стоит в 2,68 раза дешевле
LordVader
Цитата(vetal @ Feb 20 2007, 17:21) *
Розница на altera : http://www.altera.ru/cgi-bin/price/price

За ссылку спасибо, не подозревал, что там в розницу торгуют =)

Цитата
acex+epc2 ~ 17$+26$=43$
ep1c3+epcs1~ 12$+4$=16$
--------------------------------
связка на cyclone стоит в 2,68 раза дешевле

Ну, это некорректное сравнение. У меня например acex1k шьётся процессором из flash'и -> минус 26$ =)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.