Jump to content

    
Sign in to follow this  
Alexey87

VGA доступ к пикселю

Recommended Posts

3 hours ago, Plain said:

Тогда логичнее было с самого начала работы выбрать режим 72 Гц, у которого точка 50 МГц.

всё равно моргает, а на простом мониторе рисует...

вот генератор из 8bitworkshop:

Spoiler

module hvsync_generator(clk, reset, hsync, vsync, display_on, hpos, vpos, r);

  input clk;
  input reset;
  output reg hsync, vsync;
  output display_on;
  output r;
  output reg [8:0] hpos;
  output reg [8:0] vpos;

  // declarations for TV-simulator sync parameters
  // horizontal constants
  parameter H_DISPLAY       = 800; // horizontal display width
  parameter H_BACK          =  64; // horizontal left border (back porch)
  parameter H_FRONT         =  56; // horizontal right border (front porch)
  parameter H_SYNC          = 120; // horizontal sync width
  // vertical constants
  parameter V_DISPLAY       = 600; // vertical display height
  parameter V_TOP           =  23; // vertical top border
  parameter V_BOTTOM        =  37; // vertical bottom border
  parameter V_SYNC          =   6; // vertical sync # lines
  // derived constants
  parameter H_SYNC_START    = H_DISPLAY + H_FRONT;
  parameter H_SYNC_END      = H_DISPLAY + H_FRONT + H_SYNC - 1;
  parameter H_MAX           = H_DISPLAY + H_BACK + H_FRONT + H_SYNC - 1;
  parameter V_SYNC_START    = V_DISPLAY + V_BOTTOM;
  parameter V_SYNC_END      = V_DISPLAY + V_BOTTOM + V_SYNC - 1;
  parameter V_MAX           = V_DISPLAY + V_TOP + V_BOTTOM + V_SYNC - 1;

  wire hmaxxed = (hpos == H_MAX) || reset;	// set when hpos is maximum
  wire vmaxxed = (vpos == V_MAX) || reset;	// set when vpos is maximum
  
  // horizontal position counter
  always @(posedge clk)
  begin
    hsync <= (hpos>=H_SYNC_START && hpos<=H_SYNC_END);
    if(hmaxxed)
      hpos <= 0;
    else
      hpos <= hpos + 1;
  end

  // vertical position counter
  always @(posedge clk)
  begin
    vsync <= (vpos>=V_SYNC_START && vpos<=V_SYNC_END);
    if(hmaxxed)
      if (vmaxxed)
        vpos <= 0;
      else
        vpos <= vpos + 1;
  end
  
  // display_on is set when beam is in "safe" visible frame
  assign display_on = (hpos<H_DISPLAY) && (vpos<V_DISPLAY);
  assign g			= display_on && hpos > 0 && hpos < 799 && vpos > 0 && vpos < 599 ? 1'b1 : 1'b0;

endmodule

 

рисует со всеми генераторами фигуры нормально, но если нарисовать прямоугольник (размер разрешения), начинает моргать.

Если у меня код неправильный это понятно, но примеры которые я привёл выше не могут быть ведь тоже неправильными...

Не знаю где у меня конкретно ошибка, в формировании синхросигналов или с получением текущих координат x и y?

Если смотреть анализатором, то значения почти такие же как и в стандарте vesa (отличаются сотыми)

Edited by Alexey87

Share this post


Link to post
Share on other sites

Повторю, генератор у Вас негодный по причине в первую очередь создаваемых им неопределённых сигналов, но монитор ещё имеет право быть либо неисправным, либо сбоить под влиянием организационных проблем — плохое питание, плохая доставка до него информации, и т.д.

Share this post


Link to post
Share on other sites
20 minutes ago, Plain said:

генератор у Вас негодный

а в примерах из книг?

Есть ли 100% рабочий (на ваш взгляд) пример генератора (интересует статья в сети или выдержка из книги)?

Edited by Alexey87

Share this post


Link to post
Share on other sites

Вам уже несколько раз сказали — цифровой дисплей синхронное устройство, все его входы регистры, чтобы все принимаемые сигналы были однозначными, а значит и выходы их источника, создающие их, должны быть регистрами.

Share this post


Link to post
Share on other sites
В 19.09.2019 в 16:42, Alexey87 сказал:

а в примерах из книг?

Есть ли 100% рабочий (на ваш взгляд) пример генератора (интересует статья в сети или выдержка из книги)?

 

А Вам самостоятельно написать слабо ? Синхрогенератор - это  2 простейших цифровых автомата + 2 счетчика. Вот и весь синхрогенератор. Тем более у Вас есть даже готовый пример автомата, генерирующего H_sync.

Вот Вам недостающий счетчик, для моделирования:

P.S. Генерируйте клок 25.175 на PLL....

KAA_counter_sload.vhd

P.S.S Ещё раз повторю. Пока Вы не получите положительный результат моделирования - никаких тестов в "железе".

Share this post


Link to post
Share on other sites

Здравствуйте прошу вашей помощи!

Сейчас я записываю в video ram 1 байт, 1 символ, число от 0 - 9 и затем на монитор это отображается, а каким образом для отображения на мониторе "работать" с двузначными, трехзначными, четырёхзначными (записать 2х,3х,4х байтное число) и т.п. числами?

Что по этому поводу почитать или посмотреть примеры?

 

 

 

Share this post


Link to post
Share on other sites
8 минут назад, Alexey87 сказал:

Сейчас я записываю в video ram 1 байт, 1 символ, число от 0 - 9 и затем на монитор это отображается, а каким образом для отображения на мониторе "работать" с двузначными, трехзначными, четырёхзначными (записать 2х,3х,4х байтное число) и т.п. числами?

Так монитор не понимает "числа"... Он понимает только символы. Хотите изобразить символами "4х байтное число", ну так переведите это число в символьную строку. А дальше Вы уже умеете...

Share this post


Link to post
Share on other sites
24 минуты назад, Alexey87 сказал:

Здравствуйте прошу вашей помощи!

Сейчас я записываю в video ram 1 байт, 1 символ, число от 0 - 9 и затем на монитор это отображается, а каким образом для отображения на мониторе "работать" с двузначными, трехзначными, четырёхзначными (записать 2х,3х,4х байтное число) и т.п. числами?

Что по этому поводу почитать или посмотреть примеры?

 

 

 

Странный вопрос. Вы записали в память один символ и выводите его на экран. Двузначное число на экране - это два символа в Video_RAM. Значит надо в память записать 2 символа. 

Share this post


Link to post
Share on other sites
Just now, Flip-fl0p said:

Двузначное число на экране - это два символа в Video_RAM. Значит надо в память записать 2 символа. 

Именно, дело в том что изначально у меня (результат вычислений) например 123 - 01111011 в таблицу ascii передаётся - 7B и тогда на экране отрисует символ { .Мне необходимо как-то преобразовать в 3 цифры - 1,2,3.....BCD?

23 minutes ago, iosifk said:

ну так переведите это число в символьную строку

хорошо бы, но устройство у меня в память пишет по одному символу пока.

вот 2020 вывод по одному символу:

 

1111.jpeg

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this