Важная информация

User Tag List

Страница 163 из 191 ПерваяПервая ... 159160161162163164165166167 ... ПоследняяПоследняя
Показано с 1,621 по 1,630 из 1901

Тема: ПЛИС и всё что с ними связано

  1. #1621
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    dosikus, он должен быть как логическая сумма обоих гашений:
    blank <= ~((pix_count < d800) & (line_count < d600))
    Инверсия - потому что гашение, а не окно. Ну и ты dXXX замени на константы свои, при этом -1 делать не надо. -1 только в счётчиках быть должно. Ты понимаешь, что твоё "line_count>=0" и "pix_count>=0" лишнее даже с точки зрения программирования? Ведь счетчик - число целочисленное от 0 и до константы. А лишнее условие = лишние ресурсы.

  2. #1621
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1622
    Veteran Аватар для dosikus
    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На константы типа d800 - ругается.
    Переделал так - растр пропал и сигнал не видит...

    Код:
    if ( pix_count < 800 ) pix_x <= pix_count; else pix_x <= 0;
    if ( line_count < 600) pix_y <= line_count; else pix_y <= 0;
    disp_enable <= ~((pix_count < 800) & (line_count < 600));
    if(disp_enable)v_addr <= ((pix_y*800)+pix_x);


    Весь код:


    Код:
    module vga_sync(
    
    input clk_in,                    // Input 40 MHz clock, this is a pixel clock for this VGA mode
    input reset,                     // Input async. active low reset signal
    
    output reg vga_hsync,            // Output horizontal sync signal
    output reg vga_vsync,            // Output vertical sync signal
    
    output reg disp_enable,          // Set when a writable portion of display is enabled:
    output reg[9:0] pix_x,           //  x-coordinate of an active pixel
    output reg[9:0] pix_y,            //  y-coordinate of an active pixel
    output wire[7:0]  data_out
    );
    //======================================================================
    
    localparam SYNC_ON  = 1'b1;      // Define the polarity of sync pulses (psitive)
    localparam SYNC_OFF = 1'b0;
    
    
    localparam HSYNC_START = (840-1);
    localparam HSYNC_END   = (968-1);
    localparam LINE_END    = (1056-1);
    localparam VSYNC_START = (601-1);
    localparam VSYNC_END   = (605-1);
    localparam FRAME_END   = (628-1);
    localparam  H_ACTIV     = 800;
    localparam  V_ACTIV     = 600;
    
    reg [7:0] vram [0:4095]; initial $readmemh("vram.dat", vram);
    
    reg[9:0] line_count;             // Line counter, current line
    reg[15:0] pix_count;             // Pixel counter, current pixel
    reg[19:0] v_addr;                // vaddres counter		
    reg [1:0]SynRes;
    
    
    
    always @( posedge clk_in )
    begin
       // reset
       SynRes[1:0] <= {SynRes[0],reset};   
    	// pixel count
    if ( (SynRes[1] & ~SynRes[0]) | (pix_count == LINE_END) ) pix_count <= 0; else pix_count <= pix_count + 1;
       // line count
    if ( (SynRes[1] & ~SynRes[0]) | (line_count == FRAME_END ) ) line_count <= 0;
       else if ( pix_count == LINE_END ) line_count <= line_count + 1;
    	// synhroimpulse
    if (SynRes[1] & ~SynRes[0]) begin vga_hsync <=0; vga_vsync<=0; end	
    if(pix_count== HSYNC_START)vga_hsync <= SYNC_ON;else if (pix_count==HSYNC_END)vga_hsync<=SYNC_OFF;
    if(line_count== VSYNC_START)vga_vsync <= SYNC_ON;else if (line_count==VSYNC_END)vga_vsync<=SYNC_OFF;	
    	if (SynRes[1] & ~SynRes[0])  v_addr <=0;// or this: if (SynRes[1:0] == 2'b10) 
    
      else begin		
    if ( pix_count < 800 ) pix_x <= pix_count;  else pix_x <= 0;
    if ( line_count < 600) pix_y <= line_count; else pix_y <= 0;
    disp_enable <= ~((pix_count < 800) & (line_count < 600));
    if(disp_enable)v_addr <= ((pix_y*800)+pix_x);
    								
    	end
    end
    
    
       assign  data_out = vram[v_addr];
    
    endmodule
    Последний раз редактировалось dosikus; 27.09.2019 в 17:23.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  4. #1623
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    dosikus,
    Я имел в виду поменять на твои именованные константы:
    Цитата Сообщение от dosikus Посмотреть сообщение
    H_ACTIV

  5. #1624
    Veteran Аватар для dosikus
    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дык все равно что-то я сломал - пропала синхронизация с изображением.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  6. #1625
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    dosikus, ну конечно сломал. Верни константы на место, а -1 поставь в те условия, где они требуются.

  7. #1626
    Veteran Аватар для dosikus
    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    HardWareMan, не все проще , я пропустил что ты нормальный blanc сделал а не мой disp_enable, счас все работает.
    У меня же и HDMI с инвертированным blanc.
    Позже перепишу ...

    Счас так:


    Код:
    module vga_sync(
    
    input clk_in,                    // Input 40 MHz clock, this is a pixel clock for this VGA mode
    input reset,                     // Input async. active low reset signal
    
    output reg vga_hsync,            // Output horizontal sync signal
    output reg vga_vsync,            // Output vertical sync signal
    
    output reg disp_enable,          // Set when a writable portion of display is enabled:
    output reg[9:0] pix_x,           //  x-coordinate of an active pixel
    output reg[9:0] pix_y,            //  y-coordinate of an active pixel
    //output reg[19:0] v_addr,       // VRAM address count
    output wire[7:0]  data_out
    );
    //======================================================================
    
    localparam SYNC_ON  = 1'b1;      // Define the polarity of sync pulses (psitive)
    localparam SYNC_OFF = 1'b0;
    
    
    localparam HSYNC_START = (840-1);
    localparam HSYNC_END   = (968-1);
    localparam LINE_END    = (1056-1);
    localparam VSYNC_START = (601-1);
    localparam VSYNC_END   = (605-1);
    localparam FRAME_END   = (628-1);
    localparam  H_ACTIV     = 800;
    localparam  V_ACTIV     = 600;
    
    reg [7:0] vram [0:4095]; initial $readmemh("vram.dat", vram);
    
    reg[9:0] line_count;             // Line counter, current line
    reg[15:0] pix_count;             // Pixel counter, current pixel
    reg[19:0] v_addr;                // vaddres counter
    
    		
    reg [1:0]SynRes;
    always @( posedge clk_in )
    begin
       // reset
       SynRes[1:0] <= {SynRes[0],reset};   
    	// pixel count
    if ( (SynRes[1] & ~SynRes[0]) | (pix_count == LINE_END) ) pix_count <= 0; else pix_count <= pix_count + 1;
       // line count
    if ( (SynRes[1] & ~SynRes[0]) | (line_count == FRAME_END ) ) line_count <= 0;
       else if ( pix_count == LINE_END ) line_count <= line_count + 1;
    	// synhroimpulse
    if (SynRes[1] & ~SynRes[0]) begin vga_hsync <=0; vga_vsync<=0; end	
    if(pix_count== HSYNC_START)vga_hsync <= SYNC_ON;else if (pix_count==HSYNC_END)vga_hsync<=SYNC_OFF;
    if(line_count== VSYNC_START)vga_vsync <= SYNC_ON;else if (line_count==VSYNC_END)vga_vsync<=SYNC_OFF;	
    if (SynRes[1] & ~SynRes[0])  v_addr <=0;// or this: if (SynRes[1:0] == 2'b10) 
    	
    if ( pix_count < H_ACTIV ) pix_x <= pix_count;  else pix_x <= 0;
    if ( line_count < V_ACTIV) pix_y <= line_count; else pix_y <= 0;
    //disp_enable <= ~((pix_count < 800) & (line_count < 600));
    disp_enable <= ((pix_count < H_ACTIV) & (line_count < V_ACTIV));
    if(disp_enable)v_addr <= ((pix_y*H_ACTIV)+pix_x);	
    	
    	
    end
    
    
       assign  data_out = vram[v_addr];
    
    endmodule
    RTL

    Скрытый текст

    [свернуть]
    Последний раз редактировалось dosikus; 27.09.2019 в 19:30.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  8. #1627
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ааа, ну вообще-то я конкретно указал, что инверсия. Для disp_enable надо убрать инверсию.

  9. Этот пользователь поблагодарил HardWareMan за это полезное сообщение:

    dosikus (27.09.2019)

  10. #1628
    Veteran Аватар для dosikus
    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Осталось решить соответствие pix_x - v_addr.




    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  11. #1629
    Activist Аватар для omercury
    Регистрация
    13.02.2016
    Адрес
    г. Королёв
    Сообщений
    493
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение
    Счас так:
    Чего НЕ вижу - отсутствует blank, т.е. не будет привязки к уровню черного, да и гашения видеосигнала тоже.
    Чего вижу - регистры pix_x и pix_y. Зачем они?

    Цитата Сообщение от dosikus Посмотреть сообщение
    Осталось решить соответствие pix_x - v_addr.
    На счетчик адреса у тебя всё равно отдельный регистр v_addr, ну так его по НЕ_бланку и инкременируй.
    На 1 такт раньше LINE_END, в дальнейшем будет на 2, так как тебе ещё знакогенератор читать.
    В результате у тебя добавятся 2 флага:
    1 - разрешение инкремента счётчика адреса, он же открывает доступ к видеопамяти;
    2 - blank
    blank отстаёт от первого (сейчас) ровнёхонько на 1 такт, проще сделать просто задержку на триггере, чтоб не плодить компараторы.

    - - - Добавлено - - -

    Вероятно я хреново объясняю...

    Неприятность в том, что у тебя происходит задержка счёта адреса относительно развёртки. Вот здесь:
    первый такт
    Код:
    disp_enable <= ((pix_count < H_ACTIV) & (line_count < V_ACTIV));//строка 56
    второй такт
    Код:
    if ( pix_count < H_ACTIV ) pix_x <= pix_count;  else pix_x <= 0;//строка 53
    трерий такт
    Код:
    if(disp_enable)v_addr <= ((pix_y*H_ACTIV)+pix_x);// строка 57
    Если считать с нуля и использовать счётчики развёрток, то задержка будет всегда.

    Ты хочешь видеопамять линейную, то есть с 0 до 799 строка 1, а с 800 до 1599 строка 2 и т.д. Это пожалуйста, это сколько угодно.
    У тебя счетчик адреса видеопамяти отдельный и нет никакого смысла привязываться к счетчикам синхросигналов.
    Также нет никакого смысла начинать растр сразу с видеоданных, более того, это неприятно ещё и тем, что когда счётчик строк используется в формировании адреса видеопамяти, то первая строка растра остаётся без преамбулы (для спека это бордюр), приходится немного "колдовать", чтоб это выправить - инкремент счетчика строк делать в определённом месте.
    Сейчас у тебя горизонтальный счётчик по первому варианту на картинке, чтобы не вывихивать моск при расчётах, я бы сдвинул растр как во втором или в третьем варианте, тогда не надо будет колдовать с разрядностью парамов/локалпарамрв так как не будет отрицательных значений в расчётах и будет проще забить координаты всех синхросигналов в автомат.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Syncro.jpg 
Просмотров:	63 
Размер:	24.4 Кб 
ID:	70121  

  12. #1630
    Veteran Аватар для dosikus
    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    omercury, Да не, все нормально объясняешь,
    просто вчера немного позволил , продолжу только в понедельник.
    Спасибо вам всем, начинаю уже въезжать...
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

Страница 163 из 191 ПерваяПервая ... 159160161162163164165166167 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ДВК (и всё, что с ними связано)
    от Grand в разделе ДВК, УКНЦ
    Ответов: 4534
    Последнее: 04.04.2024, 23:32
  2. Ответов: 1187
    Последнее: 22.12.2023, 20:53
  3. PAL/GAL и все что с ними связано.
    от Mick в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 487
    Последнее: 01.12.2023, 00:30
  4. SMUC на дискретах и ПЛИС
    от spensor в разделе Scorpion
    Ответов: 844
    Последнее: 15.05.2023, 12:31
  5. Вопрос по ПЛИС
    от Zloy в разделе Несортированное железо
    Ответов: 23
    Последнее: 17.10.2015, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •