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

User Tag List

Страница 158 из 191 ПерваяПервая ... 154155156157158159160161162 ... ПоследняяПоследняя
Показано с 1,571 по 1,580 из 1901

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

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

    По умолчанию

    Вообщем как-то так. Покритикуйте плиз.

    module vga_sync(

    input clk_in, // Input 25.175 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
    );
    //================================================== ====================

    localparam SYNC_ON = 1'b0; // Define the polarity of sync pulses
    localparam SYNC_OFF = 1'b1;

    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 integer H_ACTIV = 800;
    localparam integer V_ACTIV = 600;


    reg[9:0] line_count; // Line counter, current line
    reg[15:0] pix_count; // Pixel counter, current pixel
    reg[19:0] vaddr_count; // VRAM addres counter
    always @( posedge clk_in or negedge reset )
    begin
    if (!reset) begin
    line_count <= 0; // On a reset, restart counters from 0
    pix_count <= 0;
    vaddr_count<= 0;
    end else begin

    pix_count <= pix_count + 1'b1;// Increment a pixel counter every clock time!
    vaddr_count <= vaddr_count + 1'b1;
    if(vaddr_count==(V_ACTIV*H_ACTIV))
    vaddr_count <=0;

    // This is a state machine based on a pixel count. Since VGA modes timings are
    // based on a multiple of pixel counts, we add them up and generate syncs at
    // proper times

    case (pix_count)
    0: vga_hsync <= SYNC_OFF;
    HSYNC_START: vga_hsync <= SYNC_ON;
    HSYNC_END: vga_hsync <= SYNC_OFF;
    LINE_END: begin
    line_count <= line_count + 1'b1;
    pix_count <= 0;
    end
    endcase

    case (line_count)
    0: vga_vsync <= SYNC_OFF;
    VSYNC_START: vga_vsync <= SYNC_ON;
    VSYNC_END: vga_vsync <= SYNC_OFF;
    FRAME_END: line_count <= 0;

    endcase


    // 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;
    v_addr<=vaddr_count;
    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;
    end
    end
    end
    end

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

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

    По умолчанию

    Снова затык .
    reg [7:0] vram [0:4095]; initial $readmemb("vram.bin", vram);
    Подсовываю ему бинарник - лается Error (10170): Verilog HDL syntax error at vram.bin(1) near text Ë

    Делаю так и подсовываю intel hex
    reg [7:0] vram [0:4095]; initial $readmemh("vram.hex", vram);
    лается Error (10170): Verilog HDL syntax error at vram.hex(1) near text :

    Эбическая сила, оказывается hex и bin это текстовые файлы, первый с форматом типа 0A второй 01010101010.
    И это полный п...
    Последний раз редактировалось dosikus; 21.09.2019 в 15:19.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  3. #1573
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Binary и hex в понимании Verilog'а это немного другое.
    Binary это текст 000 001 010 010...
    Hex это текст 5A 00 FE D8...
    https://timetoexplore.net/blog/initi...ory-in-verilog

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

    По умолчанию

    Bolt, угу ужО осознал ...

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

    Снова затык , растр полный но на экране мельтешение , нет ровной картинки.
    Помогите...

    module vga_sync(

    input clk_in, // Input 25.175 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 reg [7:0] data_out
    );
    //================================================== ====================

    localparam SYNC_ON = 1'b0; // Define the polarity of sync pulses
    localparam SYNC_OFF = 1'b1;

    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 integer H_ACTIV = 800;
    localparam integer 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] vaddr_count; // Pixel counter, current pixel
    reg[7:9] temp_data;
    always @( posedge clk_in or negedge reset )
    begin
    if (!reset) begin
    line_count <= 0; // On a reset, restart counters from 0
    pix_count <= 0;
    vaddr_count<= 0;
    v_addr =0;
    end else begin

    pix_count <= pix_count + 1'b1;// Increment a pixel counter every clock time!
    vaddr_count <= vaddr_count + 1'b1;
    if(vaddr_count==(V_ACTIV*H_ACTIV))
    vaddr_count <=0;

    // This is a state machine based on a pixel count. Since VGA modes timings are
    // based on a multiple of pixel counts, we add them up and generate syncs at
    // proper times

    case (pix_count)
    0: vga_hsync <= SYNC_OFF;
    HSYNC_START: vga_hsync <= SYNC_ON;
    HSYNC_END: vga_hsync <= SYNC_OFF;
    LINE_END: begin
    line_count <= line_count + 1'b1;
    pix_count <= 0;
    end
    endcase

    case (line_count)
    0: vga_vsync <= SYNC_OFF;
    VSYNC_START: vga_vsync <= SYNC_ON;
    VSYNC_END: vga_vsync <= SYNC_OFF;
    FRAME_END: line_count <= 0;

    endcase


    // 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;
    v_addr<=vaddr_count;
    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;
    //data_out <=vram[vaddr_count];
    end
    end





    end
    end

    always @( posedge clk_in)
    begin
    data_out <= vram[vaddr_count[11:0]];
    end
    endmodule
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  5. #1575
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение
    Снова затык , растр полный но на экране мельтешение , нет ровной картинки.
    Что и как мельтешит?
    Рябь? Вертикальные линии рассыпаются на пиксели? Или что?

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

    По умолчанию

    Такое ощущение что спрайты перемещаются .
    Видно файлик я сгенерил монотонный, надо резкие участки добавить тогда лучше видно будет.
    Может у меня начало RAM постоянно несовпадает с началом экрана?
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

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

  8. #1577
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    vaddr_count считает всегда, до значения V_ACTIV*H_ACTIV, и за один кадр успевает пройти больше одного цикла, вот картинка и бежит по экрану. Считать надо только если область видимая, и сбрасывать в ноль по синхроимпульсам.

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

    dosikus (23.09.2019)

  10. #1578
    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

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

    По умолчанию

    Привязал счетчик адресов vram к счетчикам пикселей. Усе взлетело .
    Теперь буду знакогенератор осмысливать.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

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

    По умолчанию

    Кстати , везде где не смотрю, на верилоге воротят нос от Case.
    Чем оно так чревато и чревато ли?
    case (line_count)
    0: vga_vsync <= SYNC_OFF;
    VSYNC_START: vga_vsync <= SYNC_ON;
    VSYNC_END: vga_vsync <= SYNC_OFF;
    FRAME_END: line_count <= 0;

    По мне так вполне читаемый декодер получается, или у мну взгляд от С зашоренный?
    Последний раз редактировалось dosikus; 23.09.2019 в 14:12.
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

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

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

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

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

Похожие темы

  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

Ваши права

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