paskal 1 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Этот клок мне нужен для тактирования ATMEGA. Думаю дрожание фронта на несколько наносекунд не должно мешать. Полуинтуитивно накатал одну схему. Входная частота подается на clk, выходная деленная на 2.5 снимается с out. Выходит 2 корпуса + инвертор: Но при моделровании в максплюсе наблюдаются иголки 5 нс. А если я ее делаю на рассыпной логике, иголок не будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Будут. Скажите уже правду :rolleyes: - зачем всё это нужно? Зачем МК именно эта определённая частота тактирования и почему её нужно получать непременно из 30МГц? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vishv 0 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Если сделаете на "рассыпухе" может быть и не будет (особенно если плату сделаете откровенно плохо!). Если позволите :bb-offtopic: замечание "старого ворчуна" - приложенная схема абсолютно "нечитабельная" - соответственно при запуске в производство (я конечно догадываюсь, что это Вы делаете для себя, однако к четкости документации лучше привыкать "с младых ногтей") получите массу лестных замечаний.....увы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Вот так это делается, без всяких там DDR-триггеров. И постоянная скважность. А уж на плисе или на рассыпухе... Вопрос открытый. module div25 (clk, out); input clk; output out; reg [2:0] cntr; reg mux_reg; reg neg_reg, pos_reg; always @(posedge clk) if (cntr[2]) cntr <= 3'h0; else cntr <= cntr + 1'b1; always @(posedge clk) mux_reg <= cntr[1]; always @(negedge clk) neg_reg <= (cntr == 3'h3); always @(posedge clk) pos_reg <= (cntr == 3'h0); assign out = mux_reg ? neg_reg : pos_reg; endmodule Если дрожание пофигу, то просто делитель на пять (счетчик от 0 до 4), и дальше на "ИЛИ" для значений счетчика 0 и 3 (или 4 и 2, или 3 и 1) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
paskal 1 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Будут. Скажите уже правду :rolleyes: - зачем всё это нужно? Зачем МК именно эта определённая частота тактирования и почему её нужно получать непременно из 30МГц? Если уж говорить правду, то не 30 МГц, а 29.97 :) Я делаю пульт для проверки электронной схемы лазерного дальномера. У пульта 2 основных функции: выдача тестовых импульсов с заданным временным интервалом, и обмен по UARTу на скорости 115.200. В пульте есть готовый генератор 29.97 МГц. Хочу обойтись только контроллером (авр), без ПЛИС. Так вот. Если затактовать авр частотой 29.97/2.5, он сможет выдавать импульсы с таким временным интервалом, что будут кратны 25 метрам. Что касается УАРТа, то если эту же частоту делить на 8 (это аппаратный делитель), потом программным делителем на 13, то получится с огромной точностью 115.2. Таким образом я обойдусь только контроллером и некоторой обвязкой из логики. А теперь вы скажите правду. Про иголки вы говорите исходя из опыта, или только из учебника? Вопрос этот не праздный, потому что я было дело пытался получить короткие пички задерживая фронты вентилями и сталкивая затем через 2И-НЕ. Если по учебнику, так можно подать на один вход фронт без задержки, на другой через инвертор. Инвертор чуть задержит фронт, на выходе 2И-НЕ будет короткий всплеск. А делал я это на логике 74АС. Так фиг вам. Даже 3 инвертора на задержку не дают импульса, хотя на осциллографе видно что задержка имеется. Учебник что вы показали старый. ТТЛ там понимается 155, 555 серии, а КМОП - 176, в лучшем случае 561. А современная скоростная логика возможно и по другому себя поведет. Если позволите :bb-offtopic: замечание "старого ворчуна" - приложенная схема абсолютно "нечитабельная" - соответственно при запуске в производство (я конечно догадываюсь, что это Вы делаете для себя, однако к четкости документации лучше привыкать "с младых ногтей") получите массу лестных замечаний.....увы! Схема как раз идет в производство :) А то что она так выглядит - это потому что рисовал в максплюсе для логического моделирования. А "боевой" вариант я рисую на работе уже в соответствии с гостами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Про иголки - это Вы сами начертите на бумаге диаграммы всех сигналов в правильном масштабе времени, беря все задержки из документации на используемые микросхемы, и смотрите - если два фронта на входе логики слишком рядом, то в этот момент будет потенциальная иголка. Она может быть, а может не быть, все зависит от экземпляра компонента, напряжения питания и температуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Но при моделровании в максплюсе наблюдаются иголки 5 нс. А если я ее делаю на рассыпной логике, иголок не будет? Схемная реализация порочна. Потому что реакция регистра на фронт клока замешана с самим клоком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 12 декабря, 2009 Опубликовано 12 декабря, 2009 (изменено) · Жалоба Так вот. Если затактовать авр частотой 29.97/2.5, он сможет выдавать импульсы с таким временным интервалом, что будут кратны 25 метрам. Что касается УАРТа, то если эту же частоту делить на 8 (это аппаратный делитель), потом программным делителем на 13, то получится с огромной точностью 115.2. Таким образом я обойдусь только контроллером и некоторой обвязкой из логики. Понятно. Только у меня серьёзное подозрение, что требуемый временной интервал Вы сможете сформировать контроллером и при другой тактовой. Например, половинной от 29.97 :rolleyes: Геморрою же будет не в пример меньше. Об УАРТе я уж и не говорю... А теперь вы скажите правду. Про иголки вы говорите исходя из опыта, или только из учебника? Смею Вас заверить - и не только из своего. Если в схемке есть неопределённость относительно того, какой из фронтов появится раньше - гарантия. Это коварная вещь: их можно не видеть осциллографом, они могут даже проявляться не всегда, так что головная боль обеспечена. Изменено 12 декабря, 2009 пользователем Herz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
paskal 1 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба Понятно. Только у меня серьёзное подозрение, что требуемый временной интервал Вы сможете сформировать контроллером и при другой тактовой. Например, половинной от 29.97 :rolleyes: Геморрою же будет не в пример меньше. Об УАРТе я уж и не говорю... А как с УАРТом тогда быть? В АВР частота УАРТа получается из 1/8 тактовой поделенной на UBRRn регистр. 15 МГц/8=1,875. Из этой частоты 115 200 что то не получается. Это коварная вещь: их можно не видеть осциллографом, они могут даже проявляться не всегда, так что головная боль обеспечена. Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут? А чем не устраивает мое описание схемы? Там гарантировано не будет иголок. Ну может на один корпус побольше, если на рассыпухе собирать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба А как с УАРТом тогда быть? В АВР частота УАРТа получается из 1/8 тактовой поделенной на UBRRn регистр. 15 МГц/8=1,875. Из этой частоты 115 200 что то не получается. Получится. Я не очень-то знаком с АВР-ками, но принцип общий. Дело в том, что УАРТ допускает отклонение тактовой частоты в несколько процентов, главное, чтобы набег таймингов не был слишком большим при передаче длинных сообщений. В общем случае, по стартовым битам идёт новая синхронизация и при передаче байта расхождения получаются незаметными. Почитайте в доке требования к тактированию УАРТа. Практически при любой тактовой частоте МК есть возможность подобрать значения внутренних регистров, ответственных за УАРТ, для стабильного обмена. На больших скоростях, само собой, будут жёстче требования, но, может, высокая скорость УАРТа не так уж важна? Но раз они такие маленькие, может пропустить их через какой нибудь медленный вентиль, 74HC, например и дальше они не пройдут? Можно, конечно, и фильтрами их задавить, но это борьба со следствиями, а не с причинами. Крайний случай, одним словом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
st232bd 0 14 декабря, 2009 Опубликовано 14 декабря, 2009 · Жалоба To SM. Туго Verilog понимаю, VHDL пользую. "assign out = mux_reg ? neg_reg : pos_reg;" - если я понял - комбинационная функция, шилки не будет? AVR не пользую, но практически во всех семействах микроконтроллеров есть внешняя синхронизация таймеров, а во многих и УСАРТов. Может самое тривиальное решение - подать в разные ноги контроллера разные частоты и не рисовать никакой схемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 15 декабря, 2009 Опубликовано 15 декабря, 2009 · Жалоба To SM. Туго Verilog понимаю, VHDL пользую. "assign out = mux_reg ? neg_reg : pos_reg;" - если я понял - комбинационная функция, шилки не будет? Не будет. Момент переключения находится в пол-такте от любого ближайшего фронта переключаемых сигналов, при условии, что оба переключаемых сигнала в нуле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться