Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Изучение с "нуля" VHDL и ПЛИС Xilinx (http://zx-pk.ru/showthread.php?t=24076)

vfiuchcikicshuusrch 25th October 2014 16:18

Quote:

Totem превысил(а) максимальный объём сохранённых личных сообщений и не может получать новые сообщения, пока не удалит часть старых.
У тебя сообщения переполнены)) больше не принимает..

Totem 25th October 2014 16:35

Quote:

Originally Posted by vfiuchcikicshuusrch (Post 748137)
У тебя сообщения переполнены)) больше не принимает.. Индекс 153051

эт все спамеры:)

vfiuchcikicshuusrch 25th October 2014 16:43

Totem, сорри за косяк с индексом (

Mikka_A 26th October 2014 12:34

Требую продолжения банкета! (с)

balu_dark 26th October 2014 13:22

Вот довезет дед Мороз подарки - будет и продолжение :)

Ewgeny7 26th October 2014 13:56

Quote:

Originally Posted by Mikka_A (Post 748366)
Требую продолжения банкета!

а что, ты уже всё сделал? :)

avk.ghost 28th October 2014 00:42

Всем привет.
Подключусь к вашей беседе, т.к. тоже интересно.
Заодно приведу свой пример ШИМ

Пример ШИМ


Code:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity PWM is
port (
        clk: in std_logic;
        q: out std_logic
);
end PWM;

architecture MAIN of PWM is

signal cnt: integer range 0 to 255:=0;

begin
        process(clk)
        begin
               
                if (clk'event and clk='1') then
               
                        if (cnt >= 0 and cnt < 64) then
                                q <= '1';
                        else
                                q <= '0';
                        end if;
                       
                        if (cnt < 255) then
                                cnt <= cnt + 1;
                        else
                                cnt <= 0;
                        end if;

                end if;
        end process;
end MAIN;

[свернуть]


Теперь хочу спросить, как правильно считать строчные и кадровые импульсы. Ткните в мануал плз.

Из того, что нашел для разрешения 1920х1080:
* Pixel clock: 148.5 MHz
* Количество пикселей в строке - 2200. (1920 - информационных, остальное - blank)
* Количество строк - 1125 (1080 - информационных, остальное - blank)

Хотел бы узнать, как рассчитать время начала импульсов и длительности импульсов для h_sync и v_sync.

Пример генератора строчных и кадровых импульсов.


Code:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.my.all;
 
 
entity sync is
port(
clk: in std_logic;
hsync,vsync: out std_logic;
r,g,b : out std_logic_vector(3 downto 0);
);
end sync;
 
 
architecture main of sync is

signal hpos: integer range 0 to 2200:=0;
signal vpos: integer range 0 to 1125:=0;

begin
       
process(clk)
begin
        if(clk'event and clk='1')then       
                if(hpos<2200)then
                        hpos<=hpos+1;
                else
                        hpos<=0;
                        if(vpos<1125)then
                                vpos<=vpos+1;
                        else
                                vpos<=0;
                        end if;
                       
                end if;
               
                if(hpos>48 and hpos<140)then -- h_sync interval
                        hsync<='0';
                else
                        hsync<='1';
                end if;
               
                if(vpos>0 and vpos<4)then  -- v_sync interval
                        vsync<='0';
                else
                        vsync<='1';
                end if;
               
                if((hpos>0 and hpos<280) or (vpos>0 and vpos<45))then -- 280 is blank for h_sync and 45 is blank for h_sync
                        r<=(others=>'0');
                        g<=(others=>'0');
                        b<=(others=>'0');
                end if;
        end if;
end process;
end main;

[свернуть]


Оба куска кода нуждаются в оптимизации. По этому хотел бы спросить, на что следует обратить внимание?

---------- Post added at 00:36 ---------- Previous post was at 00:33 ----------

Да, забыл добавить, моник нормально отображает картинку, сгенериенную данным генератором. Разрешение 1920х1080х60.

---------- Post added at 00:40 ---------- Previous post was at 00:36 ----------

Еще мне кажется, нужно строчный импульс посылать не в начале строки а в конце. То же самое можно сказать и о кадровом импульсе.

Константы строчного и кадрового импульса подбирал методом тыка, чтобы не соравло синхру и моник все отобразил без проблем.

---------- Post added at 00:42 ---------- Previous post was at 00:40 ----------

Ну и последнее, забыл добавить - плата Altera DE1.

Ewgeny7 28th October 2014 00:47

Привет!
По-моему, вот это - избыточно:
if (cnt >= 0 and cnt < 64) then
достаточно проверки "меньше 64".


Quote:

Originally Posted by avk.ghost (Post 748761)
Хотел бы узнать, как рассчитать время начала импульсов и длительности импульсов для h_sync и v_sync.

Вероятно, есть готовые таблицы времянок, у меня есть только для 640*480*60, я так предполагаю, что ее можно применить ко всем режимам масштабированием.
Самы й главный косяк - старайся все синхроимпульсы. гашение и прочие бланки оставлять на конец счетчиков, а не в начало. Счетчики нужны также для адресации видеопамяти, поэтому "левый край" должен начинаться с нуля, спокойно тикать до конца видимой области, а уж потом запускать синхроимпульсы.
Посмотри мои примеры видеогенератора в этой теме.

avk.ghost 28th October 2014 01:53

Некоторые моменты для VGA брал отсюда.
http://javiervalcarce.eu/wiki/VGA_Vi...Specifications

---------- Post added at 01:43 ---------- Previous post was at 00:56 ----------

Посмотрел пост #115
Все ок. Посмотрел. Спасибо.

Попробую на основании диаграмм помасштабировать. Наберу базу данных для видео режимов.

Еще один видеорежим, который делал: 1280х1024х60 Завелось при следующих данных:
* Pixel clock: 108 MHz
* Количество пикселей в строке - 1688. (1280 - информационных, остальное - blank: 408)
* Количество строк - 1125 (1080 - информационных, остальное - blank: 42)

Если брать и масштабировать, то немного не бьют цифры с данными, получеенми в результате моделирования.
1920x1080x60 (2200x1125x60)
1 пиксел: 9,25e-9 секунд.
Вся строка: 1.48e-5 секунд.
Весь кадр: 0,16(6)
Строчный импульс - 6,1916e-7 сек.
Кадровый импульс - 5,92e-5 сек

1280x1024x60 (1688x1024x60)
Вся строка: 1,56e-5 секунд.
Весь кадр: 0,16(116)
Строчный импульс - 1,036e-6 сек.
Кадровый импульс - 9,36e-5 сек.

На сколько я понимаю - эта разбежка не существена. Так?

---------- Post added at 01:45 ---------- Previous post was at 01:43 ----------

Возможно, я подобрал данные, на которых оно рабтает стабильно, но не факт, что это нормальные данные.

---------- Post added at 01:53 ---------- Previous post was at 01:45 ----------

Вот еще наткнулся на VGA симулятор.
Попробую на нем помоделировать, посмотреть результаты

avk.ghost 28th October 2014 12:02

Quote:

Originally Posted by zebest (Post 748822)

Первую ссылку не видел. Вторую на шел в процессе написания поста. Также нашел довольно много готовых таблиц.


Quote:

Originally Posted by zebest (Post 748822)
ну где-то эти примеры для DE1 то жи были. На FullHD не пробовал, но 1680 x 1050 и ниже вполне работали примеры

По поводу данного разрешения - такое получилось сделать когда я подобрал параметры для 1920х1080 но, в качестве забыл перевесить вход PLL c 24 МГц на 27 МГц.

Еще вчера нащел калькулятор в excel. Если надо - могу выложить, но из дома. На работе нет. FPGA - хобби.


All times are GMT +4. The time now is 23:04.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.