Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ПЛИС и всё что с ними связано (http://zx-pk.ru/showthread.php?t=9342)

aniSKY 18th October 2010 16:00

3 Attachment(s)
:confused: помогите разобраться что не так.
пытаюсь написать на ВХДЛ ту часть, которая выводит графику на экран - что то ну ни как не поддается, в схемном вводе все нормально было, показывало как надо, а вот на ВХДЛе все ни как не получается:v2_conf2:
вот кусок проекта:
Code:

process(CLK25,TI,vcnt,hcnt)
begin
PIXa<="0"&"000"&vcnt(8 downto 7)&vcnt(3 downto 1)&vcnt(6 downto 4)&hcnt(7 downto 3);
ATRa<="0"&"000"&"110"&vcnt(8 downto 4)&hcnt(7 downto 3);
if (CLK25'event and CLK25='1') then
    if TI='0' then --CLK25/2
        if hcnt(2 downto 0)=0 then
            VA<=PIXa;
            PIXd<=VD;
        end if;
        if hcnt(2 downto 0)=3 then
            VA<=ATRa;
            ATRd<=VD;
        end if;
    else
            VA<=(others=>'Z');
            if (hscr and vscr)='1' then
                PIXd(7 downto 1)<=PIXd(6 downto 0);
                PIXd(0)<='0';
                if PIXd(7)='0' then
                    B<=ATRd(0);
                    R<=ATRd(1);
                    G<=ATRd(2);
                    Y<=ATRd(6);
                else
                    B<=ATRd(3);
                    R<=ATRd(4);
                    G<=ATRd(5);
                    Y<=ATRd(6);
                end if;
            else
                if (hvoe or vvoe)='1'then
                    R<='0';
                    G<='0';
                    B<='0';
                    Y<='0';
                    else
                    R<='1';
                    G<='0';
                    B<='1';
                    Y<='0';
                end if;
            end if;
    end if;
end if;
end process;

что не так? на экране цветной бред напоминающий нужную картинку(pic01.jpg).
если убрать загрузку атрибутов и выводить только пикселы - все четко, чб картинка отличная (pic02.jpg). а стоит только вернуть загрузку атрибутов обратно и выводить только пикселы - получается что выводятся атрибуты вместо пикселов, хотя данные загружаю в разные регистры(pic03.jpg).:v2_conf2:

b2m 18th October 2010 16:33

Адрес нужно как минимум на один клок раньше задавать. А так у тебя адреса атрибутов и пикселей получаются перепутаны. Для наглядности, поменяй местами строчки:
PIXd<=VD;
VA<=PIXa;
Ничего не изменится.

aniSKY 18th October 2010 17:12

поменял-все по прежнему.
вроде они должны выполнять параллельно?
а может у кого есть примеры других разработок спека на ВХДЛе? пытался подсмотреть в исходниках SPECCY2007 - сложно разобраться для новичка, много сигналов и регистров без коментов что за они.

Ewgeny7 18th October 2010 17:23

Quote:

Originally Posted by aniSKY (Post 323836)
вроде они должны выполнять параллельно?

Для самого ОЗУ сигналы не должны быть "параллельно".
Сначала ставится адрес на шину, спустя клок/полклока считываются данные. У тебя же это не сделано. И в результате в "цветной регистр" считываются данные пикселей, а не аттрибутов.

---------- Post added at 16:23 ---------- Previous post was at 16:21 ----------

посмотри реализацию в u10_speccy, к примеру.

Sandro 18th October 2010 18:26

Quote:

Originally Posted by aniSKY (Post 323823)
:confused: помогите разобраться что не так.

Попробуем :) Во-первых, начнём со стиля написания кода.
1) Зачем в процессе смешаны асинхронные присвоения в PIXa и ATRa с синхронными присвоениями по CLK25? Если хотелось их тоже обрабатывать синхронно, то надо было их засунуть под if (CLK25'event ..., ну а если они действительно асинхронные, то лучше их убрать из-под процесса.
Понятность кода увеличится, кроме того уменьшится вероятность случайно сделать latch во время правок кода. Ну и наконец некоторые синтезаторы потупее такой код не переваривают.
2) Я надеюсь, VA -- это вывод FPGA, а не какой-то её провод? Внутри FPGA проводов с Z-состоянием нету. И если это вывод, то лучше вынести Z-присвоение на верхний уровень проекта. Облегчает дальнейшую правку кода.
Плюс Квартус не всегда распознаёт "похороненные" Z-присвоения, я на эти грабли уже натыкался.

Теперь по функционированию:

1) b2m совершенно правильно сказал про работу с памятью. В этом коде ставится адрес и сразу читаются данные, так нельзя. Надо хотя бы один такт подождать, пока память не отработает.
2) В этом коде пиксель читается сразу же, а атрибут -- в середине знакоместа. То есть атрибуты будут показываться на 4 пикселя правее, чем надо. Так и задумано? ;)

b2m 18th October 2010 18:49

Quote:

Originally Posted by aniSKY (Post 323836)
поменял - все по прежнему.
вроде они должны выполнять параллельно?

Я тебе про это и написал. Глядя на твой код, можно догадаться про ход твоих мыслей. Так вот, поменяв местами строчки, представь, как оно бы работало, согласно ходу твоих мыслей.

Quote:

Originally Posted by Sandro (Post 323864)
атрибуты будут показываться на 4 пикселя правее, чем надо. Так и задумано? ;)

:v2_lol:

Ewgeny7 18th October 2010 18:53

Quote:

Originally Posted by Sandro (Post 323864)
То есть атрибуты будут показываться на 4 пикселя правее, чем надо. Так и задумано?

Так и делается. Содержимое регистров цвета и "яркости" выводится с запаздыванием на одно знакоместо.

b2m 18th October 2010 19:13

Quote:

Originally Posted by Ewgeny7 (Post 323878)
Так и делается. Содержимое регистров цвета и "яркости" выводится с запаздыванием на одно знакоместо.

Но не в вышеприведённом коде. Данные, считанные посреди знакоместа, надо бы где-то буферизировать, и уже потом копировать в выходные регистры, одновременно с данными, считанными на границе знакомест.

aniSKY 18th October 2010 20:37

спасибо всем за коменты и замечания, приму к сведению, теперь данную часть буду переписывать заново, а то исправлять все придется :)

aniSKY 21st October 2010 03:51

Правильно ли я все понял: https://docs.google.com/fileview?id=...thkey=CPq3w6sK


All times are GMT +4. The time now is 06:39.

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