sany_v 0 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба Добрый день уважаемые форумчане, Начал осваивать разработку ПЛИС, и вроде простые примеры начали получаться, Тестовая задача была принимать изображение с камеры, для наложения на него информации и все это выводить на монитор, Для этого были изучены рефересные дизайн DVI-OUT, а также позаимствованы блоки для инициализации и настройки камеры. И даже получились синтезировать рабочие проекты, которые собирались, но картинка с камеры была не в том разрешений. Захотел все переделать так что бы все блоки были мне понятны, то есть написаны с нуля. Начал с замены модуля генерации развертки vga_gen. И он таки получился и заработал, но затем я решил создать проект с нуля. И скопировал туда этот блок, в итоге при синтезе блок собирается не, верно, Сигнал вертикальной сигнализации почему-то тупо зануляется. Прошу помощи в чем тут проблема? В логах вот такие сообщения:WARNING:Xst:1293 - FF/Latch <v_count_0> has a constant value of 0 in block <vga_gen>. This FF/Latch will be trimmed during the optimization process. Код модуля: module vga_gen( // Clock input input wire pixel_clk, // output's output wire h_sync, output wire v_sync, output wire video_enable, // pixel data output reg [23:0] pixel_addres, output reg pixel_get ); // VGA timings https://timetoexplore.net/blog/video-timings-vga-720p-1080p localparam HS_STA = 40; // horizontal sync start localparam HS_END = 168; // horizontal sync end localparam HA_STA = 296; // horizontal active pixel start localparam VS_STA = 1; // vertical sync start localparam VS_END = 5; // vertical sync end localparam VA_STA = 28; // vertical active pixel start localparam VA_END = 628; // vertical active pixel end localparam LINE = 1096; // complete line (pixels) localparam SCREEN = 628; // complete screen (lines) reg [9:0] h_count; // line position reg [9:0] v_count; // screen position assign h_sync = ((h_count >= HS_STA) & (h_count < HS_END)); assign v_sync = ((v_count >= VS_STA) & (v_count < VS_END)); // active: high during active pixel drawing assign video_enable = ((h_count >= HA_STA) & (v_count >= VA_STA) & (v_count <= VA_END)); initial begin h_count <= 0; v_count <= 0; end always @ (posedge pixel_clk) begin if (h_count == LINE) // end of line begin h_count <= 0; v_count <= v_count + 1; end else h_count <= h_count + 1; if (v_count == SCREEN) // end of screen v_count <= 0; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба Хотите сделать правильно и удобно - делайте цифровой автомат. Потом на отладке сэкономите кучу времени. Когда буду дома могу скинуть пример Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AnatolySh 0 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба initial begin h_count <= 0; v_count <= 0; end ИМО относится к несинтезируемым конструкциям: хотите сделать начальную установку - заводите внешний сброс в Ваш блок. А самое главное reg [9:0] h_count; // line position никогда не достигнет localparam LINE = 1096; // complete line (pixels) в строке if (h_count == LINE) // end of line Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sany_v 0 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба Спасибо, Да ошибка детская про разрядность регистра ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 16 марта, 2019 Опубликовано 16 марта, 2019 · Жалоба 18 часов назад, AnatolySh сказал: ИМО относится к несинтезируемым конструкциям А вы не мнение имейте, а знание. Это помогает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsl2640free 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Средства синтеза игнорируют временные задержки, определённые конструкцией #<delay>, поэтому надо использовать стиль описания, исключающий использование задержек, в противном случае результаты моделирования до и после синтеза могут отличаться. Хотя использование этой конструкции допускается стандартом совместно с примитивами и конструкцией assign, но поскольку она несинтезопригодна, рекомендуется применять ее только на этапе отладки алгоритма функционирования устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tpeck 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба 47 minutes ago, dsl2640free said: Средства синтеза игнорируют временные задержки, определённые конструкцией #<delay> А зачем в RTL дизайне вообще их использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsl2640free 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Для ПЛЛ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 19 марта, 2019 Опубликовано 19 марта, 2019 · Жалоба On 3/15/2019 at 6:48 PM, AnatolySh said: initial begin h_count <= 0; v_count <= 0; end ИМО относится к несинтезируемым конструкциям: хотите сделать начальную установку - заводите внешний сброс в Ваш блок. но тем не менее заводить ресет там где без него можно обойтись - так себе практика и даже сродни вредному совету по мнению FAE Xilinx, я про возможность инита в современныз САПР такой конструкцией: reg [9:0] h_count = 10'h0; // line position reg [9:0] v_count = 10'h0; // screen position Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sany_v 0 19 марта, 2019 Опубликовано 19 марта, 2019 · Жалоба Добрый день уважаемые коллеги, И я снова зашел в тупик, на картинке вы найдете блок схему устройства. Функциональные назначения блоков:Clock – генератор всех синхросигналов pixel_clk – 40Мгц mem_clk – 80Мгц vga_gen – генератор развертки видео 800x600dvi_out – генератор HDMI сигналаsdram – sdram контролер с имитацией двухпортовости в реальности у сигнала чтения приоритет над сигналом записиwriter – модуль запись тестового паттерна ‘ffff’ во фреймбуфер работает 1 раз до заполнения всего фреймбуфераreader – модуль вычитки содержимого фреймбуфера и записи его в буфер FIFO буфер hdmi, стартует по сигналу конца экрана от модуля vga_gen. fifo - буфер на внутричиповой памяти BRAM хранит 1024 элемента регистры led и выводы для отладки на осцилограф и светодиоды. Как итог на экран всегда выводиться пустота то есть с контроллера sdram модуль чтения всегда вычитывает нули пробовал (задержки в модуле чтения менять думал может быть данные не готовы на микросхеме sdram от 2 до 9 тактов картинка не меняется) если в модуле reader на выходную шину повесить константу то заливка экрана меняется на нужную, так что грешу на контроллер памяти, но его делал на базе работающего проекта и там он отрабатывает корректно. Смоделировать работу этого модуля не могу так как нет модели на микросхему памяти это AS4C16M16S-6TCN В общем нужна помощь?! Проект в атаче. VGA_OUT.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sany_v 0 19 марта, 2019 Опубликовано 19 марта, 2019 · Жалоба В продолжение Devboard на которой ведется разработка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 19 марта, 2019 Опубликовано 19 марта, 2019 · Жалоба 4 часа назад, sany_v сказал: В продолжение Devboard на которой ведется разработка. Начните отладку с VGA и простейшего синхрогенератора. Подключаете через обычный ЦАП к VGA монитору и проверяете. ЦАП можно на коленке из резисторов собрать. Когда заработает VGA. Начинайте отлаживать TMDS кодер. Отлаживать просто: берете кодер и декодер. На вход кодера идут данные - с выхода декодера выходят данные. Очевидно, что на выходе должно быть то же самое, что и на входе. Потом отлаживайте SDRAM. Модель памяти берите у микрона (www.micron.com) Когда заработает на микроновской модели - тогда меняете задержки под Вашу память. Контроллеры памяти для SDRAM на 99% одинаковые. Разница только в задержках. Сейчас я ткнул пальцем в SDRAM контроллер и сразу увидел работу по двум фронтам clk одновременно. Уже ляп, как минимум. (100 строчка и 110 строчка) Могу поделиться TMDS декодером. 100% проверенный, гарантированно работающий. Правда на VHDL. На самом деле вывод на DVI/HDMI монитор - штука не самая сложная. Можете даже попробовать без SDRAM буфера обойтись для тестов ибо данные, которые выходят с VGA - сразу должны попадать на TMDS кодер, откуда потом сразу на частоте x10 (или частоте x5 если применить DDR регистры - это небольшой намек, как ещё можно делать) через серилайзер уходят на DVI. Фактически буферизировать ничего не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 20 марта, 2019 Опубликовано 20 марта, 2019 (изменено) · Жалоба Почему в одну строку не написали объявление подмодулей в топ модуле? Читать схему невозможно. Погуглите Verilog coding style и почитайте как рекомендуют объявлять модули. mt48lc4m16a2.v Изменено 20 марта, 2019 пользователем likeasm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sany_v 0 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба 14 часов назад, Flip-fl0p сказал: Начните отладку с VGA и простейшего синхрогенератора. Подключаете через обычный ЦАП к VGA монитору и проверяете. ЦАП можно на коленке из резисторов собрать. Когда заработает VGA. Начинайте отлаживать TMDS кодер. Отлаживать просто: берете кодер и декодер. На вход кодера идут данные - с выхода декодера выходят данные. Очевидно, что на выходе должно быть то же самое, что и на входе. Потом отлаживайте SDRAM. Модель памяти берите у микрона (www.micron.com) Когда заработает на микроновской модели - тогда меняете задержки под Вашу память. Контроллеры памяти для SDRAM на 99% одинаковые. Разница только в задержках. Сейчас я ткнул пальцем в SDRAM контроллер и сразу увидел работу по двум фронтам clk одновременно. Уже ляп, как минимум. (100 строчка и 110 строчка) Могу поделиться TMDS декодером. 100% проверенный, гарантированно работающий. Правда на VHDL. На самом деле вывод на DVI/HDMI монитор - штука не самая сложная. Можете даже попробовать без SDRAM буфера обойтись для тестов ибо данные, которые выходят с VGA - сразу должны попадать на TMDS кодер, откуда потом сразу на частоте x10 (или частоте x5 если применить DDR регистры - это небольшой намек, как ещё можно делать) через серилайзер уходят на DVI. Фактически буферизировать ничего не надо. Спасибо за предложением, но c TMDS проблем нет(то есть с блоками clock, vga_gen, dvi_out) я могу выводить заполнение любым цветом присваивая статическая значения в модуле reader или же на входе dvi_out, более того я уже наигрался с рисование цветных полос, квадратов модифируя vga_gen, а так же пробовал различные разрешения, с HDMI нет ни каких проблем от слова совсем он простой и я бы даже сказа примитивный. Проблема с контроллером памяти о чем я и писал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба Ну значит отлаживайтесь с помощью микроновской модели. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться