|
Удвоение клока задержками логики, Да, не здоровое решение, но нужно |
|
|
|
May 5 2008, 13:00
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Пытаюсь удвоить клок задержками логики: задержать клок на входе на четверть периода, затем подать входной и задержанный на XOR и получить удвоенный клок с примерно 50% duty cycle. Ессно, решение кривое, но что-то более серьезное сейчас нет возможности делать (есть на то причины), нужно срочно как временное решение. Вот код: Код library ieee; use ieee.std_logic_1164.all;
entity OLED_interface is port ( CLK_IN: in std_logic; and1_sig_out, and2_sig_out: out std_logic; CLK_OUT: out std_logic ); end entity;
architecture OLED_interface_arch of OLED_interface is attribute syn_keep: boolean; signal and1_sig, and2_sig, CLK_OUT_sig: std_logic; attribute syn_keep of and1_sig, and1_sig_out, and2_sig, and2_sig_out, CLK_OUT_sig: signal is true;
begin and1_sig <= CLK_IN and '1'; and1_sig_out <= and1_sig; and2_sig <= and1_sig and '1'; and2_sig_out <= and2_sig; CLK_OUT_sig <= and2_sig xor CLK_IN; CLK_OUT <= CLK_OUT_sig; end; первый and1_sig_out в timing simulation дает сдвиг клока, второй (and2_sig_out) не дает относительно первого - т.е. повторяет and1_sig_out в плане timingа. Это то что показывает ModelSim. Кроме того, CLK_OUТ заткнут в нуле, XORа не делает с and2_sig... Подскажите, в чем лажа ? (или может кто предложит более нормальное решение удвоения клока без PLLей при сохранении 40-60% duty cycle ?)
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 19)
|
May 5 2008, 14:16
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Саша Z @ May 5 2008, 17:00)  Пытаюсь удвоить клок задержками логики: Подскажите, в чем лажа ? (или может кто предложит более нормальное решение удвоения клока без PLLей при сохранении 40-60% duty cycle ?) В Квартусе работает. ваши атрибуты задействовали примитив lcell, задержка на логических ячейках. Вот только меандр так Вы с большим трудом получите. И ресурсов может не хватить. На циклоне длительность импульса на двух lcell составила 1.5нс Можно сделать задерку за счет прохождения сигнала через контакты ввода вывода. Если есть резервные пины. Но с меандром наверно точно также будет напряженка.
|
|
|
|
|
May 5 2008, 14:25
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(MrYuran @ May 5 2008, 16:46)  возможно оптимизатор выкидывает ваши задержки, так же, как компилятор оптимизирует пустые циклы и паузы на нопах Да, оптимизатор в синтезе действительно будет выкидывать задержки, именно поэтому вставил атрибуты синтезатора (Synplify) удерживающие nodes от оптимизации. Первая задержка сработала - симулятор показывает ее (and1_sig), a вот далее - упразднил (т.е. and2_sig просто повторяет в timingе and1_sig). Порылся на форуме Lattice - наткнулся на похожий вопрос по искуственным задержкам. Support Latticeа ответил что атрибут удержания нодов с Synplicity (syn_keep в VHDL), при cascaded multiple nodes конфигурации действительно удерживает первый node, но остальные все равно будут упразднены. Что-бы этого не случилось они рекоммендуют вставлять двойные инверторы в такие nodes ибо синтезатор не упараздняет инверторы...: http://www.latticesemi.com/forums/forum/me...p;enterthread=yвроде сделал это: Код architecture OLED_interface_arch of OLED_interface is attribute syn_keep: integer; signal and1_sig, and2_sig, and1_sig_not1, and1_sig_not2, CLK_OUT_sig: std_logic; attribute syn_keep of and1_sig, and1_sig_not1, and1_sig_not2, and2_sig, CLK_OUT_sig: signal is 1; attribute OPT: string; attribute OPT of and1_sig, and1_sig_not1, and1_sig_not2, and2_sig, CLK_OUT_sig: signal is "KEEP";
begin and1_sig <= CLK_IN and '1'; and1_sig_out <= and1_sig; and1_sig_not1 <= not and1_sig; and1_sig_not2 <= not and1_sig_not1; and2_sig <= and1_sig_not2 and '1'; and2_sig_out <= and2_sig; CLK_OUT_sig <= and1_sig_not2 xor CLK_IN; CLK_OUT <= CLK_OUT_sig; end; все равно не помагает. Кроме того, XOR не работает ибо почему-то оптимизированный сигнал вместо задержанного and1_sig_not2...не пойму почему....
|
|
|
|
|
May 5 2008, 15:15
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(sazh @ May 5 2008, 17:47)  Поставьте внешний генератор и не партесь. Даже на эдементах средней степени интеграции от такого умножителя были одни неприятности. Солнышко пригреет и все в разнос идет. неужели в кристалле pll нет Да, вы правы, факторы типа температуры могут вполне повлиять...  . PLL в чипе есть, но он начинате работать с 25MHz а у меня 13 MHz клок. Внешний генератор ? Проблема в том что борд-то уже готов, частично работает, борд очень плотный, сложная разводка и т.д. и т.п. Кроме того, если делать внешним генератором то он должен быть закрыт на фазу исходного клока (т.е. внешний PLL ?) ибо он клок данных и видео синхронизации. Да и скорее всего к нему физически не подобраться (к сигналу) ибо источник (CPU) и приемник (CPLD) - оба BGA и расположены на плане один над другим (component side - print side), на самом сигнале - никакого резистора, он проходит от донго чипа к другому под ними....
|
|
|
|
|
May 5 2008, 16:53
|

Частый гость
 
Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078

|
2 Саша Z Если Вы делаете проект, который должен работать в реальных условиях, а не для того, что бы сдать лабу вредному преподу, лучше послушать советы людей и не городить задержку на залоченных элементах. По крайней мере так, как вы написали, ваш умножитель может работать только несколько сборок проекта подряд, а на какой нибудь сборке имплементатор поменяет прохождение трассы и все задержки поехали. Если хочется всетаки ломиться в закрытые двери, то нужно прописать констрейны на каждый элемент, расположив их по разным сторонам FPGA и надеяться на то, что летом не будет сильно жарко, а зимой сильно холодно. Как тут дела обстоят у латиса (вроде эту МС вы используете), а у ксилинкса через FPGA Editor найти все элементы нужной цени, узнать их физические имена и прописать в ucf файле жесткий лок на элемент программируемого массива ПЛИС
|
|
|
|
|
May 5 2008, 17:06
|
участник
   
Группа: Свой
Сообщений: 573
Регистрация: 16-02-06
Пользователь №: 14 402

|
Цитата(Саша Z @ May 5 2008, 18:15)  Да, вы правы, факторы типа температуры могут вполне повлиять...  . PLL в чипе есть, но он начинате работать с 25MHz а у меня 13 MHz клок. Внешний генератор ? Проблема в том что борд-то уже готов, частично работает, борд очень плотный, сложная разводка и т.д. и т.п. Кроме того, если делать внешним генератором то он должен быть закрыт на фазу исходного клока (т.е. внешний PLL ?) ибо он клок данных и видео синхронизации. Да и скорее всего к нему физически не подобраться (к сигналу) ибо источник (CPU) и приемник (CPLD) - оба BGA и расположены на плане один над другим (component side - print side), на самом сигнале - никакого резистора, он проходит от донго чипа к другому под ними.... А может стоит попробывать более правильное железо(пока еще не поздно)? Например возьмите Spartan StarterKit S3E от Xilinx, на кристалле PLL работает от 5 MHz, есть разъем на свободные ноги плис. Можно быстро сделать несложную двусторонюю платку - переходник на вашу панель, вообщем это недорого то и стоит, преимущества очевидны: не надо извращаться в коде, все можно сделать правильно, этот борд как раз хорошо подходит для таких задач. Ну а после того как отладите алгоритм, не фокус будет спроектировать и сделать suitable hardware. ps я бы советовал не извращаться(все выше и ниже описанное) с clk для видеосигнала, потому как фаза clk не должна "плавать", лучше сделать правильно и надежно через PLL.
|
|
|
|
|
May 5 2008, 17:08
|
Местный
  
Группа: Свой
Сообщений: 368
Регистрация: 16-11-06
Из: Тверь
Пользователь №: 22 379

|
В принципе, делал такое на MAX3000. Все нормально работало. Описание еще на AHDL, но думаю не составит труда разобраться SUBDESIGN multi1 -- умножитель частоты в 2 раза ( clk_in : INPUT; -- входной сигнал clk_out : OUTPUT; -- выходной сигнал ) VARIABLE d_f[1..0] : DFF; dd[5..0]: LCELL; clk_out : LCELL; BEGIN d_f[1..0].clk = (clk_in, !clk_in); d_f[1..0].d = vcc; d_f[1..0].clrn = dd[5..4].out; -- протяжка dd[5..2].in = dd[3..0].out; dd[1..0].in = !d_f[1..0].q; clk_out.in = d_f[1] # d_f[0]; END; Меняя количество LCELL можно подправить форму сигнала.
|
|
|
|
|
May 5 2008, 17:35
|

Частый гость
 
Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078

|
Вот что нарылось, взял ОТСЮДА: Цитата # Как удвоить тактовый сигнал? Если на кристалле нет PLL, то Fx2 = Fin $ LCELL(Fin); - XOR на задержке. Способ, конечно некрасивый, но если нет другого выхода... Th получается длительностью в задержку на LCELL, при необходимости можно поставить несколько LCELL. Проверено - работает. А в англоязычной части пишут: XOR has two inputs isnt it? First inputs conect to systemclock.Next input is connected with 1/4th delay time systemclock what u connected in first input. Вроде задержать сигнал на 1/4th периоде плевое дело
|
|
|
|
|
May 5 2008, 19:56
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Спасибо всем. Теперь по порядку: Boris_TS: работаю с Латтисом (ISPLever), чип о котором идет речь: семейство MachXO 2280C.
chds: да, это реальный проэкт на работе. Достался "по наследству" (тяжелое наследие), разрабатывался фирмой - подрядчиком года 2 тому, теперь дисплеы который там дарйвиться перестал выпускаться, а новая версия теерь требует значительно более высокой частоты, соответственно и логика ее драйвящая должна работать ан соотв. частотах... Железо уже давно готово, работает (со старым дисплеем), менять чип (CPLD/FPGA) - не вариант в данной версии системы. В новой версии ессно будем менять возможно и concept, да и у Латтица тоже предостаточно нормальных чипов.. Переходник на плату то-же мало-реально, уже думали насчет этого. Физически проблематично да и нет столько времени на все это. Насчет "не извращяться" - это верно, посему и в начале и думали в сторону PLLя чтоб держать фазу. А умножая клок с постоянной задержкой - фаза сохранялась-бы (с определенной постоянной задержкой), но опять-же ежели исключить влияния среды, работать с одной и той-же серией CPLD и т.д. и т.п. Не понял что вы имели ввиду насчет англо-язычной литературы... Ессно что у XORа 2 входа, и я так именно и пытаюсь делать - сделать задержку на четверть периода и ее пдоать вместе с оригинальным клоком на вход XORa. Тут и так все понятно. А задержать на 1/4 периода пытаюсь несколькими инверторами или andами с постоянной '1' по одному входу.
Джеймс: спасибо, попробую...
А вообще я не могу не согласиться с общим мнением о проблематичности такого подхода, но как говориться: last resort... В целом проверяю takve опцию добавить внешний PLL чип и запустить его в CPLD...
|
|
|
|
|
May 7 2008, 15:44
|
Местный
  
Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791

|
Цитата(Саша Z @ May 5 2008, 23:56)  ... теперь дисплей, который там дарйвиться перестал выпускаться, а новая версия теерь требует значительно более высокой частоты, соответственно и логика ее драйвящая должна работать ан соотв. частотах... Ещё вариант - добавить переходную плату на ПЛИС между устройством и дисплеем, осуществляющую преобразование старого интерфейса дисплея в новый. Преимущества - не нужно трогать отлаженый девайс, не будет сомнительных по надёжности схемных решений и можно будет опять модифицировать схему, когда и новый дисплей перестанет выпускаться.
|
|
|
|
|
May 8 2008, 15:00
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(r_dot @ May 7 2008, 19:44)  Ещё вариант - добавить переходную плату на ПЛИС между устройством и дисплеем, осуществляющую преобразование старого интерфейса дисплея в новый. Преимущества - не нужно трогать отлаженый девайс, не будет сомнительных по надёжности схемных решений и можно будет опять модифицировать схему, когда и новый дисплей перестанет выпускаться. Данный вариант уже рассматривался нами в самом начале ...увы не реален в плане реализации - механика борта не позволяет, да и piggyback на борту не реален ввиду проблематичности к механическим нагрузкам устройства. Выяснилось что первый вариант дисплея, т.е. тот под который рабоатем на данный моемтн - был pre-engineering samples и не пошел в серию. Новый вариант - уже серийная модель которая в full production производителем и значит ОК для конкретной версии нашего устрочства. Далее, все равно планируется новая версия устройства где будет возможно если не самый полный то весьма существенный re-design той части котора в частности и драйвит дисплей. А это значит что тогда и проверим будущность этих дисплеев, ежели будет продозрение на то что они уходят (либо не удовлетворят нас по качеству/надежности) - будем заранее проэктировать новую вресию под другие дисплеи. А пока у меня кажется уже вырисовывается более реальное решение проблемы - нашел простые чипы PLLя с фиксированным коефф. умножения, очень простая обвязка извне (питание, земля, и пару ног закорочены между собой). У борта есть выход другого клока наружу - кратного исходному. Выведу его наружу на PLL который закрепим не борту, выход PLLя заведу на свободную ногу CPLD (пусть и не глобальный клок, но все-таки), тогда изменения в его коде нужно будет только в плане изменения ноги нужного клока. Думаю должно спасти положение.
|
|
|
|
|
May 10 2008, 04:10
|
Местный
  
Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791

|
Цитата(Саша Z @ May 8 2008, 19:00)  ... нашел простые чипы PLLя с фиксированным коефф. умножения, очень простая обвязка извне (питание, земля, и пару ног закорочены между собой). ... Да, нормальное решение, если доработочку аккуратно сделать. Наверное, и сам знаешь, но на всякий случай напомню, чтобы за переделкой проекта не забылось: около этих чипов обязательно по питанию ставить емкость и максимально коротко соединять с "землёй", чтобы не "хлопали" такт пачками.
|
|
|
|
|
May 10 2008, 15:46
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(r_dot @ May 10 2008, 08:10)  Да, нормальное решение, если доработочку аккуратно сделать. Наверное, и сам знаешь, но на всякий случай напомню, чтобы за переделкой проекта не забылось: около этих чипов обязательно по питанию ставить емкость и максимально коротко соединять с "землёй", чтобы не "хлопали" такт пачками. Да, спасибо за напоминание, но это я в курсе, давно пройденный этап... но за напоминание - спасибо.
|
|
|
|
|
May 31 2008, 18:11
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Саша Z @ May 8 2008, 18:00)  Данный вариант уже рассматривался нами в самом начале ...увы не реален в плане реализации - механика борта не позволяет, да и piggyback на борту не реален ввиду проблематичности к механическим нагрузкам устройства. Выяснилось что первый вариант дисплея, т.е. тот под который рабоатем на данный моемтн - был pre-engineering samples и не пошел в серию. Новый вариант - уже серийная модель которая в full production производителем и значит ОК для конкретной версии нашего устрочства. Далее, все равно планируется новая версия устройства где будет возможно если не самый полный то весьма существенный re-design той части котора в частности и драйвит дисплей. А это значит что тогда и проверим будущность этих дисплеев, ежели будет продозрение на то что они уходят (либо не удовлетворят нас по качеству/надежности) - будем заранее проэктировать новую вресию под другие дисплеи.
А пока у меня кажется уже вырисовывается более реальное решение проблемы - нашел простые чипы PLLя с фиксированным коефф. умножения, очень простая обвязка извне (питание, земля, и пару ног закорочены между собой). У борта есть выход другого клока наружу - кратного исходному. Выведу его наружу на PLL который закрепим не борту, выход PLLя заведу на свободную ногу CPLD (пусть и не глобальный клок, но все-таки), тогда изменения в его коде нужно будет только в плане изменения ноги нужного клока. Думаю должно спасти положение. Реализовал решение с внешним PLL - все работает как положени и дешево, хотя немного усложнилась механ. часть (интеграция mini-piggyback с PLLем на плату системы).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|