nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 13:09



Reply to topic  [ 53 posts ]  Go to page Previous  1, 2, 3, 4  Next
Real i8085 + Xilinx CPLDs + 2 * SIMM30 = Orionix :) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
HardWareMan wrote:
Херня какая-то этот ваш хилинх с VHDL...


Пренёс Хардваремановско-Альтеровский Орион с одним симмом в отдельный топик :roll:

http://www.nedopc.org/forum/viewtopic.php?t=10522

_________________
:dj: https://mastodon.social/@Shaos


03 Dec 2013 15:14
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Shaos wrote:
Покажи дописанный вариант - я попробую его своему зайлинксу скормить :)


Code:
// Циклогенератор для i8085 @5MHz на SIMM30 70нс
module Arbiter(
   input   MClk,         // Мастерклок
   output   reg PixClk,      // Пиксельклок
   output   CpuClk,         // Процессорклок
   output   reg nRAS,      // Сигнал RAS
   output   reg nCAS      // Сигнал CAS
);
// Переменные
reg [3:0]State = 4'h0;      // Счетчик состояний
// Провода
assign CpuClk = !State[2];   // Процессорный такт
// Логка работы
always @(posedge MClk) begin
   // 4 обращения из 8
   case (State[3:0])
      4'h0 : begin nCAS <= 1'b1; nRAS <= 1'b1; PixClk <= 1'b1; end
      4'h1 : begin nCAS <= 1'b1; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'h2 : begin nCAS <= 1'b0; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'h3 : begin nCAS <= 1'b0; nRAS <= 1'b1; PixClk <= 1'b1; end
      4'h4 : begin nCAS <= 1'b1; nRAS <= 1'b1; PixClk <= 1'b1; end
      4'h5 : begin nCAS <= 1'b1; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'h6 : begin nCAS <= 1'b0; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'h7 : begin nCAS <= 1'b0; nRAS <= 1'b1; PixClk <= 1'b1; end
      4'h8 : begin nCAS <= 1'b1; nRAS <= 1'b1; PixClk <= 1'b1; end
      4'h9 : begin nCAS <= 1'b0; nRAS <= 1'b1; PixClk <= 1'b0; end
      4'hA : begin nCAS <= 1'b0; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'hB : begin nCAS <= 1'b1; nRAS <= 1'b0; PixClk <= 1'b1; end
      4'hC : begin nCAS <= 1'b1; nRAS <= 1'b1; PixClk <= 1'b1; end
      4'hD : begin nCAS <= 1'b1; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'hE : begin nCAS <= 1'b0; nRAS <= 1'b0; PixClk <= 1'b0; end
      4'hF : begin nCAS <= 1'b0; nRAS <= 1'b1; PixClk <= 1'b1; end
      endcase
   // Следующее состояние
   State[3:0] <= State[3:0] + 4'h1;
end

endmodule


03 Dec 2013 19:22
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Вот чего из твоего Верилога нагенерилось для XC9572XL:
Code:
*************************  Mapped Resource Summary  **************************

Macrocells     Product Terms    Function Block   Registers      Pins           
Used/Tot       Used/Tot         Inps Used/Tot    Used/Tot       Used/Tot       
7  /72  ( 10%) 13  /360  (  4%) 11 /216 (  5%)   7  /72  ( 10%) 5  /34  ( 15%)

** Function Block Resources **

Function    Mcells      FB Inps     Pterms      IO         
Block       Used/Tot    Used/Tot    Used/Tot    Used/Tot   
FB1           4/18        3/54        3/90       2/ 9
FB2           2/18        4/54        6/90       2/ 9
FB3           1/18        4/54        4/90       1/ 9
FB4           0/18        0/54        0/90       0/ 7
             -----       -----       -----      -----   
              7/72       11/216      13/360      5/34

* - Resource is exhausted

** Global Control Resources **

Signal 'MClk' mapped onto global clock net GCK1.
Global output enable net(s) unused.
Global set/reset net(s) unused.

** Pin Resources **

Signal Type    Required     Mapped  |  Pin Type            Used    Total
------------------------------------|------------------------------------
Input         :    0           0    |  I/O              :     4      28
Output        :    4           4    |  GCK/IO           :     1       3
Bidirectional :    0           0    |  GTS/IO           :     0       2
GCK           :    1           1    |  GSR/IO           :     0       1
GTS           :    0           0    |
GSR           :    0           0    |
                 ----        ----
        Total      5           5

*************************  Summary of Mapped Logic  ************************

** 4 Outputs **

Signal              Total Total Loc     Pin  Pin     Pin     Pwr  Slew Reg Init
Name                Pts   Inps          No.  Type    Use     Mode Rate State
CpuClk              1     2     FB1_2   1    I/O     O       STD  FAST SET
nCAS                4     4     FB2_2   35   I/O     O       STD  FAST RESET
PixClk              2     2     FB2_8   38   I/O     O       STD  FAST RESET
nRAS                4     4     FB3_2   11   I/O     O       STD  FAST RESET

** 3 Buried Nodes **

Signal              Total Total Loc     Pwr  Reg Init
Name                Pts   Inps          Mode State
State<3>            1     3     FB1_16  STD  RESET
State<1>            1     1     FB1_17  STD  RESET
State<0>            0     0     FB1_18  STD  RESET

** 1 Inputs **

Signal              Loc     Pin  Pin     Pin     
Name                        No.  Type    Use     
MClk                FB1_9   5~   GCK/I/O GCK

********** Mapped Logic **********

FTCPE_CpuClk: FTCPE port map (CpuClk,CpuClk_T,MClk,'0','0');
CpuClk_T <= (State(0) AND State(1));

FDCPE_PixClk: FDCPE port map (PixClk,PixClk_D,MClk,'0','0');
PixClk_D <= State(0)
    XOR
PixClk_D <= State(1);

FTCPE_State0: FTCPE port map (State(0),'1',MClk,'0','0');

FTCPE_State1: FTCPE port map (State(1),State(0),MClk,'0','0');

FTCPE_State3: FTCPE port map (State(3),State_T(3),MClk,'0','0');
State_T(3) <= (State(0) AND State(1) AND NOT CpuClk);

FDCPE_nCAS: FDCPE port map (nCAS,nCAS_D,MClk,'0','0');
nCAS_D <= ((NOT State(0) AND State(1))
   OR (State(1) AND NOT State(3))
   OR (State(1) AND NOT CpuClk)
   OR (State(0) AND NOT State(1) AND State(3) AND CpuClk));

FDCPE_nRAS: FDCPE port map (nRAS,nRAS_D,MClk,'0','0');
nRAS_D <= ((NOT State(0) AND NOT State(1))
   OR (State(0) AND State(1) AND NOT State(3))
   OR (State(0) AND State(1) AND NOT CpuClk)
   OR (NOT State(1) AND State(3) AND CpuClk));

Register Legend:
 FDCPE (Q,D,C,CLR,PRE,CE);
 FTCPE (Q,D,C,CLR,PRE,CE);
 LDCP  (Q,D,G,CLR,PRE);

_________________
:dj: https://mastodon.social/@Shaos


03 Dec 2013 22:19
Profile WWW
Maniac
User avatar

Joined: 05 Oct 2006 04:45
Posts: 269
Location: Moscow
Reply with quote
Post 
Все клево конечно, но встает вопрос, а чо не на i4004?

_________________
Всем добра!


05 Dec 2013 00:22
Profile
Retired
User avatar

Joined: 25 Jul 2011 00:14
Posts: 1331
Location: WWW
Reply with quote
Post 
ЖЫР


05 Dec 2013 00:26
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Почему то все думают, что СИМЫ у всех есть. Все равно заказывать детальки, так что можно использовать все что легкодоставаемо через ebay (и аналоги)


05 Dec 2013 01:22
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Error404 wrote:
Все клево конечно, но встает вопрос, а чо не на i4004?


Ну если бы оригинал был на i4004...

ИМХО: Оспектрумовливание советских компов (путём приклеивания Z80-проца соплями с 50 Гц прерыванием) было ошибкой - я строю свою альтернативную историю! :roll:

_________________
:dj: https://mastodon.social/@Shaos


05 Dec 2013 04:39
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
vinxru wrote:
Почему то все думают, что СИМЫ у всех есть. Все равно заказывать детальки, так что можно использовать все что легкодоставаемо через ebay (и аналоги)


Симы тоже вполне доставаемы через ebay ;)

_________________
:dj: https://mastodon.social/@Shaos


05 Dec 2013 05:01
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
P.P.S. Я тут думаю, что наверное CAS-before-RAS не нужно столь часто вызывать - вместо этого свободные циклы обращения к памяти можно отдать скажем под некий DMA, на котором можно сделать блиттер для быстрой графики... :roll:

P.P.P.S. #FB00 я планировал заюзать для задания смещения до начала экранной области (экран сможет перемещаться с шагом 256 байт), далее #FB01 можно заюзать под команду блиттера (0 - остановить копирование и приготовиться принимать данные, 1 - начать копирование с одного сима, 2 - начать копирование с двух симов, 3 - начать копирование пикселов из первого сима с маской из второго сима), #FB02 и #FB03 будут задавать начальный адрес источника, #FB04 и #FB05 будут задавать начальный адрес приёмника, а #FB06 будет задавать количество копируемых байт (от 1 до 256) - вобщем как-то так...


Блиттер можно сделать опциональным (в виде отдельно стоящего XC9572XL) и по идее можно копировать не только в пределах экранных областей, но и вообще в пределах всех симов (для этого правда нужно будет задавать уже не 16, а 22 бита адреса), и не только симов, но и скажем и из ПЗУ-картриджа (который вставляется в общую память по биту P7 порта управления страницами памяти):

0000 0001 - копируем в пределах первого сима
0000 0010 - копируем в пределах второго сима
0000 0011 - копируем в обоих симах (16 бит за раз)

0001 0001 - копируем из ПЗУ в первый симм
0001 0010 - копируем из ПЗУ во второй симм

Биты 2 и 3 оставляем про запас на будущее (если вдруг дойдут руки сделать 4 сима для 16-цветного режима), а бит 7 в будущем сможет задавать копирование в пределах симов с накладыванием маски (тоже на будущее)...

P.S. Бит 5 можно заставить переключать приёмник при копировании:
0010 0001 - читаем из первого сима, но пишем во второй
0010 0010 - читаем из второго сима, но пишем в первый
0010 0011 - меняем байты в симах местами?

P.P.S. А в случае ПЗУ этот бит может выбирать вторую половинку ПЗУ-картриджа:
0011 0001 - копируем из второй половинки ПЗУ в певый сим
0011 0010 - копируем из второй половинки ПЗУ во второй сим
Хотя наверное это тоже на будущее...

P.P.P.S. А факт окончания копирования можно вводить через бит последовательного порта либо через одно из новых прерываний 8085 (которые вроде как можно читать программно без непосредственно самого прерывания).

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 05 Dec 2013 22:18, edited 1 time in total.



05 Dec 2013 07:45
Profile WWW
Retired
User avatar

Joined: 25 Jul 2011 00:14
Posts: 1331
Location: WWW
Reply with quote
Post 
Z80 много где применялся и прерывания по КСИ тоже.


05 Dec 2013 16:02
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
MC68k wrote:
Z80 много где применялся и прерывания по КСИ тоже.


ARM ещё больше где применяется, но это ведь не повод? :roll:

_________________
:dj: https://mastodon.social/@Shaos


05 Dec 2013 16:46
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Пока прикидываю неразогнанный двухсимовый вариант для 5 МГц:
Code:
   |      T 1      |      T 2      |      T 3      |      T 4      |
        ___     ___     ___     ___     ___     ___     ___     ___
PIX ___/   \___/   \___/   \___/   \___/   \___/   \___/   \___/
            _______         _______         _______         _______
CLK _______/       \_______/       \_______/       \_______/
     ______
ALE /      \_______________________________________________________
            _______         _______         _______         _______
RAS _______/       \_______/       \_______/       \_______/
    ___         _______         _______         _______         ___
CAS    \_______/       \_______/       \_______/       \_______/
    _______________                         _______________________
RD                 \_______________________/


Как я понимаю за 4 такта процессора (и 8 тактов пиксельклока) нам надо успеть прочитать один раз из видеопамяти и один-два раза прочитать-записать данные по требованию процессора, ну и может один раз сделать CAS-before-RAS рефреш - так?

Процессор всегда пишет-читает через такт после 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?


Наверное надо на полтакта сдвинуть формирование RAS/CAS, причём удлиннив RAS и укоротив CAS:
Code:
   |      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                 \_______________________/



P.S. Пока прикидки такие - имеем 2 обязательных CPLD чипа:
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-чипа...

_________________
:dj: https://mastodon.social/@Shaos


05 Dec 2013 21:48
Profile WWW
Retired
User avatar

Joined: 25 Jul 2011 00:14
Posts: 1331
Location: WWW
Reply with quote
Post 
Shaos wrote:
MC68k wrote:
Z80 много где применялся и прерывания по КСИ тоже.


ARM ещё больше где применяется, но это ведь не повод? :roll:

не надо путать божий дар с яичницей


06 Dec 2013 02:03
Profile
Maniac
User avatar

Joined: 05 Oct 2006 04:45
Posts: 269
Location: Moscow
Reply with quote
Post 
i8080 в поделках времен 89-90г.г. это дань предельной бедности тогдашних сельских радиолюбителей. Тремя годами позже все Орионы уже шли с Z80 "искаропки" (Ташкентский Турбо, Альтаир, Орион-ПРО). Предлагаю пересчитать на форуме предельно бедных радиолюбителей, у которых нет Z80.

_________________
Всем добра!


06 Dec 2013 08:08
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Error404 wrote:
i8080 в поделках времен 89-90г.г. это дань предельной бедности тогдашних сельских радиолюбителей. Тремя годами позже все Орионы уже шли с Z80 "искаропки" (Ташкентский Турбо, Альтаир, Орион-ПРО). Предлагаю пересчитать на форуме предельно бедных радиолюбителей, у которых нет Z80.


А нонче всё идёт "искаробки" с интеловским многоядерным пентиум-совместимым процом :)

_________________
:dj: https://mastodon.social/@Shaos


06 Dec 2013 08:22
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 53 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.