ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Почему-то ранее не встречал таблички для VHDL, где были бы расписаны
приоритеты операторов, знаков и т.п., т.е. в какой последовательности
производится разбор сложных выражений.
(Это позволит пресечь злоупотребление скобочками, между IF и THEN, например)
Исправляем ситуацию:
and, or, nand, nor, xor – самый низкий приоритет
=, /=, <, <=, >, >=
+, -, & (бинарные)
+, - (унарные)
*, /, mod, rem
abs, not – высший приоритет
Операторы с более высоким приоритетом выполняются раньше. Чтобы изменить такой порядок используются скобки.
Последний раз редактировалось IanPo; 19.08.2010 в 15:11.
ZXM-Phoenix rev.01 2048K, VG93 hw emulator
Что может давать такие искажения? если бордер будет черный - искажение мене выражено
(создано на ФПГА, картинка берется из ПЗУ, вывод на ВГА, тайминги приближены к его стандарту - не скандаблер)
Последний раз редактировалось aniSKY; 21.08.2010 в 18:04.
БЭМЗ ПЭВМ БАЙТ 48к
CAHTAKA.002 48k
БПК "Элара-Д" 48к +BDI(TR-DOS 5.03)
SPECCY.2007 48k(2008.09)
Я бы проверил гашение в интервалах между строками.если бордер будет черный - искажение мене выражено
Больше игр нет
Файлы нужно смотреть. Похоже на то, что селекторы синхроимпульсов не имеют привязки к клоку.
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
По человечески это звучит так.
Имеются у нас счетчики пикселей/строк. Тактируются клоком. Но при этом после очередного клока эти счетчики еще какое-то время "устаканиваются". Но за это небольшое время их значение будет "колбаситься" весьма основательно, возникают ложные значения. Если формирователь синхры у нас сделан примерно так:
hsyn<='0' when (vcnt>224) and (vcnt<228) else '1';
то будут ложные переключения значения hsyn.
Если так:
process(vcnt)
begin
if vcnt=224 then
hsyn<='0';
elsif vcnt=228 then
hsyn<='1';
end if;
end process;
то результат может быть еще хуже, импульс hsyn может растянуться на изрядное пространство фрейма, притом в неположенном месте. Да и "защелка" ("latch") hsyn лишняя совершенно не нужна, ПЛИСы их очень не любят.
Поэтому лучше дать кусочек времени счетчикам для "успокоения значения". Для этого применяем тот же клок. В результате мы прочитаем значение на период (или полпериода) позже, зато чётко и надежно. Заодно latch превратится в обычный синхронный триггер, что само по себе очень хорошо:
process(clk,vcnt)
begin
if (clk'event and clk='1') then
if vcnt=224 then hsyn<='0'; end if;
if vcnt=228 then hsyn<='1'; end if;
end if;
end process;
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
а как тогда задать hsync='1' всегда кроме описанного примера выше, или по другому, до того как сменить значение на '0', hsync должен выдавать '1' ?. или это не нужно ( все равно после первой строки все войдет в норму)?
у меня сейчас вот так:
process (CLK,hcnt)
begin
if (CLK'event and CLK='1') then
---
if (hcnt>=320 and hcnt<382) then HSYNC<='0';
else HSYNC<='1';
end if;
---
if (hcnt>=312 and hcnt<400) then HBLANC<='1';
else HBLANC<='0';
end if;
---
if (hcnt>=8 and hcnt<264) then HSCR<='1';
else HSCR<='0';
end if;
---
if hcnt=448 then HRST<='1';
else HRST<='0';
end if;
---
end if;
end process;
но по твоему мне как то больше нравиться, все четко и понятно.
Последний раз редактировалось aniSKY; 22.08.2010 в 21:49.
БЭМЗ ПЭВМ БАЙТ 48к
CAHTAKA.002 48k
БПК "Элара-Д" 48к +BDI(TR-DOS 5.03)
SPECCY.2007 48k(2008.09)
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
переписал свои селекторы вот так:
process (CLK,hcnt)
begin
if (CLK'event and CLK='1') then
---
if hcnt=320 then HSYNC<='0'; end if;
if hcnt=382 then HSYNC<='1'; end if;
-- if (hcnt>=320 and hcnt<382) then HSYNC<='0';
-- else HSYNC<='1';
-- end if;
---
if hcnt=312 then HBLANC<='1'; end if;
if hcnt=400 then HBLANC<='0'; end if;
-- if (hcnt>=312 and hcnt<400) then HBLANC<='1';
-- else HBLANC<='0';
-- end if;
---
if hcnt=8 then HSCR<='1'; end if;
if hcnt=264 then HSCR<='0'; end if;
-- if (hcnt>=8 and hcnt<264) then HSCR<='1';
-- else HSCR<='0';
-- end if;
---
if hcnt=448 then HRST<='1';
else HRST<='0';
end if;
---
end if;
end process;
это по горизонтали (закоментил старый вариант)
и так:
process (CLK,vcnt)
begin
if (CLK'event and CLK='1') then
---
if vcnt=224 then VSYNC<='0'; end if;
if vcnt=225 then VSYNC<='1'; end if;
-- if vcnt=224 then VSYNC<='0';
-- else VSYNC<='1';
-- end if;
---
if vcnt=216 then VBLANC<='1'; end if;
if vcnt=241 then VBLANC<='0'; end if;
-- if (vcnt>=216 and vcnt<241) then VBLANC<='1';
-- else VBLANC<='0';
-- end if;
---
if vcnt<192 then VSCR<='1';
else VSCR<='0';
end if;
---
if vcnt=264 then VRST<='1';
else VRST<='0';
end if;
---
end if;
end process;
по вертикали (в коментах также старый вариант)
и как итог - опять появились срывы, но вот почему только в середине экрана(вторая из трех частей) ума не приложу...... на ЖКИ 22" вайдскрин - теже пилы видны, что и на стареньком ВГА 14". опять в легком тупнике...
Последний раз редактировалось aniSKY; 22.08.2010 в 22:22.
БЭМЗ ПЭВМ БАЙТ 48к
CAHTAKA.002 48k
БПК "Элара-Д" 48к +BDI(TR-DOS 5.03)
SPECCY.2007 48k(2008.09)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)