Не получится заюзать в качестве мультиплексоров - ног не хватитShaos wrote:Наверное надо на полтакта сдвинуть формирование RAS/CAS, причём удлиннив RAS и укоротив CAS:Shaos wrote:Пока прикидываю неразогнанный двухсимовый вариант для 5 МГц:Как я понимаю за 4 такта процессора (и 8 тактов пиксельклока) нам надо успеть прочитать один раз из видеопамяти и один-два раза прочитать-записать данные по требованию процессора, ну и может один раз сделать CAS-before-RAS рефреш - так?Code: Select all
| T 1 | T 2 | T 3 | T 4 | ___ ___ ___ ___ ___ ___ ___ ___ PIX ___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/ _______ _______ _______ _______ CLK _______/ \_______/ \_______/ \_______/ ______ ALE / \_______________________________________________________ _______ _______ _______ _______ RAS _______/ \_______/ \_______/ \_______/ ___ _______ _______ _______ ___ CAS \_______/ \_______/ \_______/ \_______/ _______________ _______________________ RD \_______________________/
Процессор всегда пишет-читает через такт после ALE. У нас может быть четыре состояния s0,s1,s2,s3, в первых трёх из которых по умолчанию будет читаться видеопамять и сохранять видеоданные в регистре, из которого в состоянии s3 видеоданные будут уходить в сдвиговый регистр и ALE может попасть на любое из этих состояний:
ALE попало на s0 - значит общение процессора с памятью будет во время состояния s2 и мы точно знаем, что регистр с видеоданными уже будет записан в текущем такте (s0), значит следующий такт s1 можно посвятить рефрешу CAS-before-RAS, а на s3 снова может выпасть ALE.
ALE попало на s1 - значит общение процессора с памятью будет во время состояния s3 и мы точно знаем, что регистр с видеоданными уже будет записан в текущем такте (s1), значит следующий такт s2 можно посвятить рефрешу CAS-before-RAS.
ALE попало на s2 - значит общение процессора с памятью будет во время состояния s0, а в следующем состоянии s3 регистр с данными уже должен быть записан, значит в текущем такте (s2) пишем регистр с видеоданными и больше ничего не делаем (CAS-before-RAS не заказывается).
ALE попало на s3 - значит общение процессора с памятью будет во время состояния s1 и следующий такт (s0) надо посвятить записи видеорегистра, значит CAS-before-RAS также не заказывается.
P.S. RD и WR надо попросту укоротить, откусив их начала и оставив только кусок, попадающий на T3?P.S. Пока прикидки такие - имеем 2 обязательных CPLD чипа:Code: Select all
| T 1 | T 2 | T 3 | T 4 | ___ ___ ___ ___ ___ ___ ___ ___ PIX ___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/ _______ _______ _______ _______ CLK _______/ \_______/ \_______/ \_______/ ______ ALE / \_______________________________________________________ | ROW | COL | ROW | COL | ROW | COL | ROW ___ ___ ___ ___ RAS / \___________/ \___________/ \___________/ \___ ___________ ___________ ............. _______ CAS / \___/ \___________________/ Hidden CAS-before-RAS _______________ _______________________ RD \_______________________/
Orionix Chip1 - дешифратор адресов и почти все порты (см. VHDL код выше)
Orionix Chip2 - видеоконтроллер, перебирающий адреса видеопамяти (PAL и NTSC)
и 2 опциональных:
Orionix ChipX - гибкий доступ к видеопамяти с шагом в 256 байт вместо 16К (горизонтальный скролл)
Orionix ChipY - блиттер (пока в базовом варианте с копированием без прозрачности)
плюс некоторое небольшое количество мелкой логики (регистры, мультиплексоры и т.д.)
P.P.S. По идее можно шаг сдвига видеопамяти и в 1 байт сделать - в этом случае можно будет вертикальный скролл поддержать, правда с минимальной софтверной поддержкой (программно придётся стирать перехлестнувшиеся пикселы), но этоу же мелочи...
P.P.P.S. С другой стороны в качестве мультиплексоров можно тот же Xilinx заюзать - дешевле будет (один XC9572XL-10 стоит $2.26, один XC9536XL-10 стоит $1.18, а шесть 74LS153 - уже $4.50) - тогда обязательными будут 3 CPLD-чипа...

Это целый чипсет получается для построения любых Орионов - стандартных и не очень

P.S. Я смотрю у 8085 при чтении опкода сигнал RD чуть длиннее получается - по видимому, чтобы всё срасталось, надо все операции с памятью по запросу процессора делать во втором такте - писать в память при WR и читать в регистр по RD, который отдавать процессору в следующем третьем такте, а сам третий такт использовать для видеоконтроллера, тогда имея 4 состояния:
s0 - H2=0 H1=0
s1 - H2=0 H1=1
s2 - H2=1 H1=0
s3 - H2=1 H1=1
их можно наложить на такты процессора таким образом:
s0 - ALE (читаем видеопамять)
s1 - RD/WR (читаем/пишем память для проца)
s2 - делаем CAS-before-RAS и одновременно отдаём регистр в проц, если был RD
s3 - отправляем прочитанное из видеопамяти в регистр сдвига (тут снова может быть ALE)
s1 - ALE (читаем видеопамять даже если она была прочитана в s0)
s2 - RD/WR (читаем/пишем память для проца)
s3 - делаем CAS-before-RAS и одновременно отдаём регистр в проц, если был RD, и одновременно отправляем прочитанное ранее из видеопамяти в регистр сдвига
s0 - тут опять может быть ALE, т.е. считаем что видеопямть будет прочитана
s2 - ALE (читаем видеопамять)
s3 - RD/WR (читаем/пишем память для проца и одновременно отправляем прочитанное из видеопамяти в регистр сдвига)
s0 - делаем CAS-before-RAS и одновременно отдаём регистр в проц, если был RD
s1 - тут опять может быть ALE, т.е. считаем что видеопямть будет прочитана
s3 - ALE (отправляем прочитанное из видеопамяти в регистр сдвига)
s0 - RD/WR (читаем/пишем память для проца)
s1 - делаем CAS-before-RAS и одновременно отдаём регистр в проц, если был RD
s2 - тут опять может быть ALE, т.е. считаем что видеопямть будет прочитана перед s3
Получается, что CAS-before-RAS делается каждый раз после WR или RD от проца. Видеопамять читаем в трёх состояниях s0,s1,s2, если на это же время не приходятся такты T2 или T3 процессора. Состояние s3 всегда используется для вскармливания регистра сдвига.
P.P.S. Тогда надо обратно сдвинуть RAS и CAS, чтобы они совпадали с тактами процессора:
Code: Select all
___ ___ ___ ___ ___ ___ ___ ___
10M ___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/
| T 1 | T 2 | T 3 | T 4 |
_______ _______ _______ _______
CLK _______/ \_______/ \_______/ \_______/
______
ALE / \_______________________________________________________
| ROW | COL | ROW | COL | ROW | COL | ROW | COL |
___ ___ ___ ___
RAS \___________/ \___________/ \___________/ \___________/
___________ ___________ ............. ___________
CAS \___/ \___________________/ \___/
Hidden CAS-before-RAS
________________ _______________________
RD \_______________________/