Здравствуйте. Я новичок в этой теме. При интеграции VGA интерфейса в MIPSfpga, возникла проблема.
VGA я реализовал следующим образом:
module mipsfpga_ahb_vga (
input wire pixel_clock, //тактирующий сигнал
input wire [11:0] rgb_ahb, // цвет который нужно вывести на экран
output reg hsync, // синхроимпульсы
output reg vsync, // синхроимпульсы
output reg [11:0] rgb, //цвет который выводится на экран
//output reg [11:0] char_count,
output reg visible, //флаг указывающий находится ли
output reg [11:0] line_count_out, // номер строки которая выводится
output reg [11:0] pixel_count_out, // номер пикселя в строке который выводится
);
Считываются данные с vga-модуля с помощью шины AHB, считываются pixel_count_out, line_count_out, visible. Исходя из этих данных на шину уже записывается цвет который нужно записать по нужным координатам. Программу я написал на языке С. Где просто считывал по шине где сейчас происходит отрисовка, и записывал нужный цвет. Частота для vga-блока 25MHz, частота ядра MIPS 50MHz. Плата на которой было реализовано это DE0-CV.
Во всяком случае как то так я увидел реализацию этого блока. Получилось как то не очень. При попытка нарисовать квадрат, границы по левой и правой грани дергаются.
Код программы.
if(MFP_PIXEL_COUNT>200 && MFP_PIXEL_COUNT<250){
if(MFP_LINE_COUNT>200 && MFP_LINE_COUNT<250)
MFP_VGA_RGB = 0x00F;
else
MFP_VGA_RGB = 0x0F0;
}
MFP_PIXEL_COUNT - координаты рисуемого пикселя в строке и MFP_LINE_COUNT - координаты рисуемой строки. Мне кажется это из за того что есть очень большая временная разница между координатами которые нужно записать и получением цвета который мы и запишем в блок.
Как реализовать этот блок что бы избежать этого?