Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА:

VGA 11 года 6 мес. назад #3286

Глянул даташит на китайскую демо-плату, есть в ней снхроимпульсы вертикальной и горизонтальнойй развертки. Видать adv7123 используется просто, как R2R матрица.
Сейчас расматриваю проект с полосочками на экране, только в толк не возьму откудова брались эти показатели:

// video signal parameters, default 1440x900 60Hz
	parameter horz_front_porch = 80;
	parameter horz_sync = 152;
	parameter horz_back_porch = 232;
	parameter horz_addr_time = 1440;
	
	parameter vert_front_porch = 3;
	parameter vert_sync = 6;
	parameter vert_back_porch = 25;
	parameter vert_addr_time = 900;


Не подскажите стандартные параметры для типичного экрана с разрешением 1024х768 пикселей??!! А еще лучше мне бы знать как вы их высчитывали. То по даташитной формуле от adv7123 у меня несущая частота получилась 67 с хвостиком мегогерц, а вы используете 106.5мегогерц. Откудова :cheer:
VGA ADV7123	 //выписка из даташта на демоплату.								
HS	        B4								
VS	        A4								
VGA-CLK	M4								
BLANK	H2								
R2	        A3								
R3	        B3								
R4	        E4								
R5	        E3								
R6	       G4								
R7	       G3								
... и далее вся R2R матрица. 							
							

Еще на плате стоят две больших башки SDRAM по 64 мегобайт, SRAM и FLASH. Три генератора на 27, 48 и 50 мгц.


и добавил........................
Нашел откудова ноги растут, это данные из документации на VESA
Скопировал в свой проект, подправил циферки под свои нужды. Блин все ровно экран черный. Только надпись о синхроницазии начинает мерцать, когда FPGA включаю.
	// video signal parameters, default 1024x768 60Hz  clok 65 MHz
	parameter horz_front_porch = 24;      //H Front Porch = 0.369; // (usec) = 3 chars = 24 Pixels
	parameter horz_sync = 136;            //Hor Sync Time = 2.092; // (usec) = 17 chars = 136 Pixels
	parameter horz_back_porch = 160;      //H Back Porch = 2.462; // (usec) = 20 chars = 160 Pixels
	parameter horz_addr_time = 1024;
	
	parameter vert_front_porch = 3;       // V Front Porch = 0.054; // (msec) = 3 lines
	parameter vert_sync = 6;              //Ver Sync Time = 0.107; // (msec) = 6 lines
	parameter vert_back_porch = 29;       //V Back Porch = 0.600; // (msec) = 29 lines
	parameter vert_addr_time = 768; 

Проверил оскопом что на выходе VGA разъема, есть только какой то синхроимпульс в 43.5 кГц, по остальным пинам - тишина. Может это быть причиной, что использую всего 4 бита из 9бит у R2R матрицы adv7123 ??

сам проект - yadi.sk/d/sIjfDPkbfxkjb

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от WolfTheGrey.

VGA 11 года 6 мес. назад #3288

Почитайте об этом например на we.easyelectronics.ru/plis/generator-cve...a.html#comment154824 или тут habrahabr.ru/post/157863/

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3290

  • Alucard
  • Alucard аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 208
  • Спасибо получено: 20

WolfTheGrey пишет: Глянул даташит на китайскую демо-плату, есть в ней снхроимпульсы вертикальной и горизонтальнойй развертки. Видать adv7123 используется просто, как R2R матрица.
Сейчас расматриваю проект с полосочками на экране, только в толк не возьму откудова брались эти показатели:

// video signal parameters, default 1440x900 60Hz
	parameter horz_front_porch = 80;
	parameter horz_sync = 152;
	parameter horz_back_porch = 232;
	parameter horz_addr_time = 1440;
	
	parameter vert_front_porch = 3;
	parameter vert_sync = 6;
	parameter vert_back_porch = 25;
	parameter vert_addr_time = 900;


Не подскажите стандартные параметры для типичного экрана с разрешением 1024х768 пикселей??!! А еще лучше мне бы знать как вы их высчитывали. То по даташитной формуле от adv7123 у меня несущая частота получилась 67 с хвостиком мегогерц, а вы используете 106.5мегогерц. Откудова :cheer:
VGA ADV7123	 //выписка из даташта на демоплату.								
HS	        B4								
VS	        A4								
VGA-CLK	M4								
BLANK	H2								
R2	        A3								
R3	        B3								
R4	        E4								
R5	        E3								
R6	       G4								
R7	       G3								
... и далее вся R2R матрица. 							
							

Еще на плате стоят две больших башки SDRAM по 64 мегобайт, SRAM и FLASH. Три генератора на 27, 48 и 50 мгц.


и добавил........................
Нашел откудова ноги растут, это данные из документации на VESA
Скопировал в свой проект, подправил циферки под свои нужды. Блин все ровно экран черный. Только надпись о синхроницазии начинает мерцать, когда FPGA включаю.
	// video signal parameters, default 1024x768 60Hz  clok 65 MHz
	parameter horz_front_porch = 24;      //H Front Porch = 0.369; // (usec) = 3 chars = 24 Pixels
	parameter horz_sync = 136;            //Hor Sync Time = 2.092; // (usec) = 17 chars = 136 Pixels
	parameter horz_back_porch = 160;      //H Back Porch = 2.462; // (usec) = 20 chars = 160 Pixels
	parameter horz_addr_time = 1024;
	
	parameter vert_front_porch = 3;       // V Front Porch = 0.054; // (msec) = 3 lines
	parameter vert_sync = 6;              //Ver Sync Time = 0.107; // (msec) = 6 lines
	parameter vert_back_porch = 29;       //V Back Porch = 0.600; // (msec) = 29 lines
	parameter vert_addr_time = 768; 

Проверил оскопом что на выходе VGA разъема, есть только какой то синхроимпульс в 43.5 кГц, по остальным пинам - тишина. Может это быть причиной, что использую всего 4 бита из 9бит у R2R матрицы adv7123 ??

сам проект - yadi.sk/d/sIjfDPkbfxkjb

Не получилось у меня открыть ваш проект. Выложите код генератора синхроимпульсов.
То, что используется не вся шина ЦАП ни на что не виляет, кроме цвета. Синхроимпульс в 43.5кГц - это уже хорошо, но там должен быть еще один.
По документации на формат "XGA Signal 1024 x 768 @ 60 Hz" сихросигналы (HS, VS) у вас должны быть инверсными, проверьте это.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3291

Спасибо за наводку на сайт есайэлектрониксаа. Вычитал недостающие кирпичики познания VGA.
Лично когда говорите что сигналы должны быть инверсными, мне это ни о чем не говорит. Судя по графикам с того сайта инвертировать надо было лишь Hsync, от него же запитал шину гашения цветовой R2R матрицы BLANK

Вроде заработало, но полосы на экране получились уставшие какие то, уж очень уставшие :)
Оскопом смотрел, есть все клоки:
hsync - 43.5 кгц, длиная линия +3в с короткими провалами до нуля.
vsync - 59 гц, еще длинее линия = нулю, с короткими вспышками под +3в.
R G B - сплошная линия на 3 вольта с какими то жужаниями.



Вот код, часть кадровой развертки оставил от этого сайта. А код цветогенератора от есай электроникса.
///////////////////////////////////////////////////////////////
//module which generates video sync impulses
///////////////////////////////////////////////////////////////

module hvsync (
	// inputs:
	input wire pixel_clock,

	// outputs:
	output reg hsync,
	output reg vsync,

	//high-color test video signal
	output  [7:0]R,
	output  [7:0]G,
	output  [7:0]B
	);
	
	// video signal parameters, default 1024x768 60Hz
	parameter horz_front_porch = 24;      //H Front Porch = 0.369; // (usec) = 3 chars = 24 Pixels
	parameter horz_sync = 136;            //Hor Sync Time = 2.092; // (usec) = 17 chars = 136 Pixels
	parameter horz_back_porch = 160;      //H Back Porch = 2.462; // (usec) = 20 chars = 160 Pixels
	parameter horz_addr_time = 1024;
	
	parameter vert_front_porch = 3;       // V Front Porch = 0.054; // (msec) = 3 lines
	parameter vert_sync = 6;              //Ver Sync Time = 0.107; // (msec) = 6 lines
	parameter vert_back_porch = 29;       //V Back Porch = 0.600; // (msec) = 29 lines
	parameter vert_addr_time = 768;       
	
	//variables	
	reg [11:0]pixel_count = 0;
	reg [11:0]line_count = 0;

reg hvisible = 1'b0;
reg vvisible = 1'b0;

//synchronous process
always @(posedge pixel_clock)
begin
	hsync <= (pixel_count < horz_sync);
	hvisible <= (pixel_count >= (horz_sync+horz_back_porch)) && 
		(pixel_count < (horz_sync+horz_back_porch+horz_addr_time));
	
	if(pixel_count < (horz_sync+horz_back_porch+horz_addr_time+horz_front_porch) )
		pixel_count <= pixel_count + 1'b1;
	else
		pixel_count <= 0;
end

always @(posedge hsync)
begin
	vsync <= (line_count < vert_sync);
	vvisible <= (line_count >= (vert_sync+vert_back_porch)) && 
		(line_count < (vert_sync+vert_back_porch+vert_addr_time));
	
	if(line_count < (vert_sync+vert_back_porch+vert_addr_time+vert_front_porch) )
		line_count <= line_count + 1'b1;
	else
		line_count <= 0;
end

reg [7:0] bar;
reg [2:0] color;

wire visible; assign visible = hvisible & vvisible;
wire rvisible; assign rvisible = pixel_count[6];
wire gvisible; assign gvisible = pixel_count[7];
wire bvisible; assign bvisible = pixel_count[8];

assign B = color[0] ? 8'hFF : 8'h0;
assign R = color[1] ? 8'hFF : 8'h0;
assign G = color[2] ? 8'hFF : 8'h0;
  
//output wire [23:0] rgb = blank ? {blue[7:0], green[7:0], red[7:0]} : 24'b0;
 
always @(posedge pixel_clock)
begin
/*
    if (!blank)
    begin
        bar <= 8'b0;
        color <= 3'b111;
    end
        else 
		  */
		  if (bar < 8'd210)
                bar <= bar + 1'b1;
                else
                    begin
                        bar <= 8'b0;
                        color <= color - 1'b1;
                    end
         
         
end

/*
always @*
begin
	if(visible & rvisible)
		r = pixel_count[5:1];
	else
		r = 0;

		if(visible & gvisible)
		g = pixel_count[5:0];
	else
		g = 0;

	if(visible & bvisible)
		b = pixel_count[5:1];
	else
		b = 0;
end
*/


endmodule

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от WolfTheGrey.

VGA 11 года 6 мес. назад #3292

Какая там у вас частота пихела? Должна быть 65МГц.. Похоже что у вас там гдето плывёт частота не туда..

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3293

Да, частота пиксела взята от ПЛЛ блока - 65 мегогерц. Если сам ПЛЛ блок при генерации этой частоты плывет, этож не критично?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3295

Кажется начинаю потихоньку вникать.
пинами крутил вертел *** хотел. Вро де как по пинам R и B по осциллографу появилась лесенка.
Запускал код цветогенератора от есай электроника - был черный экран, а по бокам узенькие цветные в горизонтальную полосочку полосы.
Запустил код цветогенератора от марсохода - просто черный экран, без полосок по бокам. За то надписи больше нет о синхронизации.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3299

  • Alucard
  • Alucard аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 208
  • Спасибо получено: 20

WolfTheGrey пишет: Кажется начинаю потихоньку вникать.
пинами крутил вертел *** хотел. Вро де как по пинам R и B по осциллографу появилась лесенка.
Запускал код цветогенератора от есай электроника - был черный экран, а по бокам узенькие цветные в горизонтальную полосочку полосы.
Запустил код цветогенератора от марсохода - просто черный экран, без полосок по бокам. За то надписи больше нет о синхронизации.

Попробуйте этот код генератора.
module hvsync_ex (
    // inputs:
    input wire char_clock,
 
    // outputs:
    output reg [11:0]char_count_, //post reg
    output reg [11:0]line_count_, //post reg
	
	output reg [7:0]red,
	output reg [7:0]green,
	output reg [7:0]blue,
	
    output reg hsync,
    output reg vsync,
	output reg blank
    );
 
//VGA Standart
`define h_visible_area  1024
`define h_front_porch   24
`define h_sync_pulse    136
`define h_back_porch    160
 
`define v_visible_area  768
`define v_front_porch   3
`define v_sync_pulse    6
`define v_back_porch    29
 
//variables
reg [11:0]char_count;
reg [1:0]pixel_state;
reg [11:0]line_count;
reg [1:0]line_state;
 
reg end_of_line;
reg end_of_frame;
 
//permanent comb computations:
always @*
begin
    //horizontal processing
    if(char_count < `h_visible_area)
        pixel_state = 0; //active video
    else
    if(char_count < `h_visible_area + `h_front_porch)
        pixel_state = 1; //front porch
    else
    if(char_count < `h_visible_area + `h_front_porch + `h_sync_pulse)
        pixel_state = 2; //hsync impuls
    else
        pixel_state = 3; //back porch
 
    if(char_count < `h_visible_area + `h_front_porch + `h_sync_pulse + `h_back_porch)
        end_of_line = 0;
    else
        end_of_line = 1;
 
    //vert processing
    if(line_count < `v_visible_area)
        line_state = 0; //active video lines
    else
    if(line_count < `v_visible_area + `v_front_porch)
        line_state = 1; //front porch
    else
    if(line_count < `v_visible_area + `v_front_porch + `v_sync_pulse)
        line_state = 2; //vsync impuls
    else
        line_state = 3; //front porch
 
    if(line_count < `v_visible_area + `v_front_porch + `v_sync_pulse + `v_back_porch)
        end_of_frame = 0;
    else
        end_of_frame = 1;            
end
 
//synchronous process
always @(posedge char_clock)
begin
    hsync <= (pixel_state!=2'b10);
    vsync <= (line_state!=2'b10);
    blank <= (pixel_state==2'b0 && line_state==2'b0);
 
    //char_count_ <= char_count;
    line_count_ <= line_count;
 
    if(end_of_line)
    begin
        char_count <= 0;
        char_count_ <= 0;
 
        if(end_of_frame)
            line_count <= 0;
        else
            line_count <= line_count + 1'b1;
    end
    else
    begin
        char_count <= char_count + 1'b1;
        if (pixel_state==2'b0)
			char_count_ <= char_count_ + 1'b1;
    end
end

//test generation!!!

always @(posedge char_clock)
begin
	if (blank)
	begin
		red <= (char_count_ ^ line_count_) >> 4;
		green <= (char_count_ ^ line_count_) >> 2;
		blue <= (char_count_ ^ line_count_);
	end	
end
 
endmodule

Подключите все напрямую, кроме char_count_ и line_count_. Картинка на экране должна напоминать XOR текстуру .

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3300

Работает!! :woohoo: :woohoo: :woohoo:
Сижу, код изучаю. Теперь можно двиаться дальше.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

VGA 11 года 6 мес. назад #3301

  • Alucard
  • Alucard аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 208
  • Спасибо получено: 20

WolfTheGrey пишет: Работает!! :woohoo: :woohoo: :woohoo:
Сижу, код изучаю. Теперь можно двиаться дальше.

Если хотите что-то рисовать, то советую перенести всю графику в отдельный модуль, связав его с модулем синхронизации с помощью линий char_count_, line_count_ и blank.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.151 секунд
Работает на Kunena форум