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

User Tag List

Страница 162 из 191 ПерваяПервая ... 158159160161162163164165166 ... ПоследняяПоследняя
Показано с 1,611 по 1,620 из 1901

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

  1. #1611
    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

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

    По умолчанию

    Ай, красиво. Я думаю, что всем миром мы вылижем этот проект до нормального кода.

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

    dosikus (26.09.2019)

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

    По умолчанию

    Теперь можно вытащить синхросигналы из общей каши и положить рядом со счётчиками. И оформить их в виде:
    if ( counter == START ) sync <= 1'b0;
    else if ( counter == END ) sync <= 1'b1;
    Для hsync это будет pix_counter, а для vsync - line counter.

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

    dosikus (27.09.2019)

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

    По умолчанию

    Ага, все шЫкарно.
    Только у меня синхросигналы положительные.

    Код:
    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;
    Ну и вопрос :
    Здесь OR и AND - логические или битовые?

    if ( (SynRes[1] & ~SynRes[0]) | (pix_count == LINE_END) )


    HardWareMan, и да , ты раннее говорил про разницу инверсий ~ и !. Можно подробней , что-то плохо ищется на верилоговских туторах, вечно какая-то хрень вылезает...




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

    omercury, Свершилось, после месяца долбежа в суппорт опенкорес выслали пароль...

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

    Что имеем на данный момент :

    Код:
    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;
    localparam HSYNC_END   = 968;
    localparam LINE_END    = 1056;
    localparam VSYNC_START = 601;
    localparam VSYNC_END   = 605;
    localparam FRAME_END   = 628;
    localparam  H_ACTIV     = 800;
    localparam  V_ACTIV     = 600;
    
    reg [7:0] vram [0:4095]; initial $readmemh("vram.txt", 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(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		
    		
    
          // The following code defines a drawable display region and outputs
          // disp_enable to 1 when within that region. Also, set the pixel coordinates
          // (normalized to the top-left edge of a drawable region)
          disp_enable <= 0;
          pix_x <= 0;
          pix_y <= 0;
          if (line_count>=0 && line_count<V_ACTIV)
          begin
             if (pix_count>=0 && pix_count<H_ACTIV)
             begin
                disp_enable <= 1;
                pix_x <= pix_count;
                pix_y <= line_count;
                v_addr <= ((pix_y*800)+pix_x);
    		
             end
          end			
    	end
    end
    
    
       assign  data_out = vram[v_addr];
    
    endmodule
    - - - Добавлено - - -

    Да и при таком раскладе оба синхроимпульса во время первой строки находятся в неопределенном состоянии .
    Это все мелочи? Или вставить их инициализацию в секцию reset?

    Код:
    if  (SynRes[1] & ~SynRes[0]) begin vga_hsync <=0; vga_vsync<=0; end

    И я так и не нашел - как заставить Modelsim выводить данные из vram...




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

    Ага, сработало, синхроимпульсы при сбросе и старте в 0...

    Код:
    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
    Последний раз редактировалось dosikus; 27.09.2019 в 11:50.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

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

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение
    Здесь OR и AND - логические или битовые?
    Строго битовые. Ты же комбинаторную логическую схему строишь, а не компаратор.
    Цитата Сообщение от dosikus Посмотреть сообщение
    HardWareMan, и да , ты раннее говорил про разницу инверсий ~ и !. Можно подробней , что-то плохо ищется на верилоговских туторах, вечно какая-то хрень вылезает...
    ~ Побитовая инверсия.
    ! Логическое отрицание.
    Последний раз редактировалось HardWareMan; 27.09.2019 в 12:44.

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

    dosikus (27.09.2019)

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

    По умолчанию

    Так'с нашел как vram выводить в Modelsim, с какого-то перепугу надо файл с содержимым пихать в папку modelsim проекта.
    И увидел совсем нерадужные вести , выхлоп данных с vram на один такт опаздывает с pix_count...





    Дальше - хуже.
    pix_count сбрасывается при 1057
    v_addr считает 798 -0-800



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

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

    По умолчанию

    Ты -1 в константах забыл указать (лучше прямо в условии, обняв в скобки). Схема синхронная, т.е. она сейчас запишет то, что будет в следующем такте. А считает она от 0. Я вижу на твоем RTL 420, а не 41F.

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

    Кто касается строк, то это интересный глюк, дай сюда последний актуальный RTL.

  11. #1618
    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

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

    По умолчанию

    dosikus, отлично. Тебе надо pix_x и pix_y разобрать. Насколько я понял, это просто буферизированный вывод pix_count и line_count соответственно. Это объясняет задержку на 1 такт - всё верно. Что касается значений, то тебе надо просто в глобальном месте просто сделать перенос счетчиков по окну, например вот так:
    if ( pix_count < d640 ) pix_x <= pix_count; else pix_x <= 0;
    if ( line_count < d480 ) pix_y <= line_count; else pix_y <= 0;
    Тогда pix_x и pix_y будут сканировать 640х480 точек, обнуляясь на гашении.

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

    По умолчанию

    То есть меняем
    Код:
          disp_enable <= 0;
          pix_x <= 0;
          pix_y <= 0;
          if (line_count>=0 && line_count<V_ACTIV)
          begin
             if (pix_count>=0 && pix_count<H_ACTIV)
             begin
                disp_enable <= 1;
                pix_x <= pix_count;
                pix_y <= line_count;
                v_addr <= ((pix_y*800)+pix_x);
    		
             end
          end
    На
    Код:
    if ( pix_count < d800 ) pix_x <= pix_count; else pix_x <= 0;
    if ( line_count < d600) pix_y <= line_count; else pix_y <= 0;
    v_addr <= ((pix_y*800)+pix_x);
    А вот куда blank тобишь disp_enable воткнуть?
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

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

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

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

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

Похожие темы

  1. ДВК (и всё, что с ними связано)
    от Grand в разделе ДВК, УКНЦ
    Ответов: 4537
    Последнее: 14.05.2024, 13:43
  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

Ваши права

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