Totem, сорри за косяк с индексом (
Вид для печати
Totem, сорри за косяк с индексом (
Требую продолжения банкета! (с)
Вот довезет дед Мороз подарки - будет и продолжение :)
Всем привет.
Подключусь к вашей беседе, т.к. тоже интересно.
Заодно приведу свой пример ШИМ
Пример ШИМ
Код: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.
Пример генератора строчных и кадровых импульсов.
Код: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.
Привет!
По-моему, вот это - избыточно:
if (cnt >= 0 and cnt < 64) then
достаточно проверки "меньше 64".
Вероятно, есть готовые таблицы времянок, у меня есть только для 640*480*60, я так предполагаю, что ее можно применить ко всем режимам масштабированием.
Самы й главный косяк - старайся все синхроимпульсы. гашение и прочие бланки оставлять на конец счетчиков, а не в начало. Счетчики нужны также для адресации видеопамяти, поэтому "левый край" должен начинаться с нуля, спокойно тикать до конца видимой области, а уж потом запускать синхроимпульсы.
Посмотри мои примеры видеогенератора в этой теме.
Некоторые моменты для 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 симулятор.
Попробую на нем помоделировать, посмотреть результаты
Первую ссылку не видел. Вторую на шел в процессе написания поста. Также нашел довольно много готовых таблиц.
По поводу данного разрешения - такое получилось сделать когда я подобрал параметры для 1920х1080 но, в качестве забыл перевесить вход PLL c 24 МГц на 27 МГц.
Еще вчера нащел калькулятор в excel. Если надо - могу выложить, но из дома. На работе нет. FPGA - хобби.
Ок. Не будем флудить. Вышеописанное относится к обоим производителям ПЛИС. Думаю это пригодится и топикстартеру. Да и там дана общая теория построения, VGA контроллера.
Судя по посту #143 топикстартер приобрел себе EP1C3T100C8N. Думаю, это уже может относиться к обучению ПЛИС Altera.