centner56 0 2 июня, 2013 Опубликовано 2 июня, 2013 · Жалоба Здравствуйте. Надеюсь на помощь на данном форуме. Пришел сюда с Хабра, там в комментариях говорят, что все профи "обитают" здесь. Прошу сильно не издеваться, если скажу что-то глупо или некорректно. Я далек от электроники и близок к программированию. Передо мной поставлена задача запустить устройство. На нем стоит тактовый генератор 50 MHz из него надо сделать 1 MHz, путем программирования ПЛИС, так как ЦАП'ы не могут работать на таком быстром клоке. Решил сперва реализовать эту задачу на ките Altera DE1 (c Altera Cyclone II на борту), чтобы проверить работоспособность. Так как делать это в схематике наверное трудно, я почитал обучалки по Verilog'у и написал следующий код преобразователя частоты из 50 MHz в 1 MHz. // Преобразует входной клок 50 MHz в выходной клок 1 MHz module clock_50_to_1 ( input wire clk_50, output reg clk_1 ); reg [5:0] counter; initial begin counter<=0; clk_1<=0; end always@(clk_50) begin if(counter<50) begin counter<=counter+1; end else if(counter==50) begin counter<=1; end if(counter==49) begin clk_1 <= ~clk_1; end end endmodule Прежде чем прошивать кит Altera DE1, подумал что надо просимулировать функционально. Искал что-нибудь бесплатное, нашел Icarus Verilog. Просимулировал в нем, вроде все работает как задумано. Сначала решил просто проверить работу тактового генератора и вывел его через ПЛИС напрямую и проверил осциллографом - все нормально: Потом решил проверить осциллографом мой преобразователь на Verilog'е. Вывел на два пина IDC разъема кита Altera DE1: 1) на один пин [GPIO_1[1]] вывел клок 50 Mhz напрямую, 2) на другой пин [GPIO_1[3]] вывел клок 50 Mhz через мой преобразователь на Verilog'е. В итоге на втором выводе, после моего модуля на Verilog'e сначала какая-то "каша" вместо клока 1 MHz, а через несколько секунд вообще никакого сигнала. Очень хочу разобраться в этом вопросе. Все мои коллеги далеки от программирования и всю жизнь работают с ПЛИС через схематик. Они говорят, что твое программирование - лажа, нафиг Verilog/VHDL, проблемы в твоем коде, надо всегда делать через схематик. Буду благодарен всем за помощь. Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 2 июня, 2013 Опубликовано 2 июня, 2013 · Жалоба Делитель на щупе установлен в положение 1:10? Подобные сигналы лучше высматривать с делителем, установив шкалу 0,1-0,5 В/деление. Насчет нижней картинки (2), там скорее всего срывается синхронизация. Лучше всего покрутить ручку "Level" или нечто подобное (Trigger) и добиться устойчивого отображения сигнала на экране. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petr_I 0 2 июня, 2013 Опубликовано 2 июня, 2013 · Жалоба Очень хочу разобраться в этом вопросе. Все мои коллеги далеки от программирования и всю жизнь работают с ПЛИС через схематик. Они говорят, что твое программирование - лажа, нафиг Verilog/VHDL, проблемы в твоем коде, надо всегда делать через схематик. Это кому как нравится и кто к чему привык. Я схематик сейчас вообще не использую. Задачу вашу можно решить используя встроенную PLL, особенно если Вам понадобятся и другие клоки. Если хотите все же делать делитель, то код Ваш мягко говоря не совсем правильный. Делитель у Вас нарисован на 100, а не на 50. Добавьте reset (чтобы избежать неопределенных состояний при включении), posedge (negedge) в always, counter должен считать от 0 до 49 (это более правильно с точки зрения реализации). Ну и главный вопрос: вам на выходе меандр нужен или импульсы длительностью 20ns и периодом 1ms? Совет: поищите для примера готовые реализации счетчиков и делителей, сразу все станет понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 3 июня, 2013 Опубликовано 3 июня, 2013 · Жалоба 1 Приложил (заодно вопрос к гуру, может есть что некорректное) 2 C помощью PLL 3 Попросите коллег реализовать на схематике, поймите идею, реализуйте ее в языке:) Удачи! P.S.: Преобразователь частоты немного не то. Правильнее говорить о делителе частоты. divN.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 3 июня, 2013 Опубликовано 3 июня, 2013 · Жалоба 2 centner56 always@(clk_50) смените на always@(posedge clk_50) в вашей целевой плисине нет тригеров работающих на обоих фронтах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
centner56 0 5 июня, 2013 Опубликовано 5 июня, 2013 (изменено) · Жалоба Огромное спасибо всем кто откликнулся. 2 Kuzmi4: Спасибо - Ваш ответ помог. Как только я поменял always@(clk_50) на always@(posedge clk_50) Все заработало. Но теперь я столкнулся с еще более непонятной для меня проблемой: С пинов ПЛИС я вывожу на пины IDC разъема, чтобы посмотреть осциллографом. Если я задействую больше одного пина для вывода на IDC разъем, то все пины при просмотре осциллографом молчат. Одним словом нимогу выводить больше чем на один пин. А для отладки устройства мне надо смотреть на пинах IDC разъема неизмененный клок от тактового генератора 50 MHz, клок из моего делителя частоты на Veriloge (1 MHz), плюс еще пару клоков от другого устройства, которые приходят ко мне в ПЛИС. А я не могу смотреть больше одного пина. Если что-то вывожу скажем на два пина - то оба пина молчат. Причем это и на ките Altera DE1 и на целевом устройстве. Подробную картинку прилагаю. Мои коллеги с удивленными глазами смотрят и тоже ничего не понимают. Возможно это какие-то подводные камни при использовании ПЛИС и клоков. Делал PLL делитель частоты через мегафункцию - работает при использовании одного пина. Вывожу его на два и более пинов - не работает ничего. Благодарен за любую помощь. Изменено 5 июня, 2013 пользователем centner56 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 5 июня, 2013 Опубликовано 5 июня, 2013 · Жалоба 2 centner56 QAR в студию, телепаты в отпуске Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 6 июня, 2013 Опубликовано 6 июня, 2013 · Жалоба Сделайте вставку в линию, идущему к одному из выводов, в виде примитива WIRE... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
centner56 0 9 июня, 2013 Опубликовано 9 июня, 2013 · Жалоба 2 Kuzmi4: QAR в студию, телепаты в отпуске QAR'ы на все случаи в скриншоте приложил. 2 EvgenyNik: Сделайте вставку в линию, идущему к одному из выводов, в виде примитива WIRE... Сделал - не помогло (случай D на скриншоте и его qar тоже прилагается). Вообщем долго экспериментируя и пробуя все способы - я заметил, что когда выводишь на IDC разем больше чем один пин - то он не работает. Сделал как - вывел на IDC 1 - 1 пин, на IDC 2 - 2 пина. В итоге там где два пина (IDC 2) - не работает. На скриншоте все подробно показано. QAR файлы на все 4 случая скриншота прилагаю. cases_from_screenshot.zip Версия Qartus II 13.0 Web Edition свежевыкаченный. PS. Делал все тоже самое, что на скриншоте, но вместо моего модуля делителя частоты, использовал мегафункцию PLL делитель частоты. Все тоже - не могу задействовать более одного пина на IDC разъем, а иначе не работает. Заранее всем спасибо за любую помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
centner56 0 22 июня, 2013 Опубликовано 22 июня, 2013 · Жалоба Спасибо всем - кто помогал. Наконец-то я разобрался с решением этой проблемы. Дело оказалось в проблемах правил наименования в среде Quartus II при использовании схематика, а не в IDC разъемах. Я все подробно описал в статье, чтобы те, кто будут искать решение аналогичной проблемы, решили ее. Кому интересно, прилагаю ссылку на статью: Решение проблем, связанных с правилами наименования в Quartus II при использовании Schematic Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться