Real i8085 + Xilinx CPLDs + 2 * SIMM30 = Orionix :)

Компьютер Орион-128 (1990) расширяемый до 256 КБ и его развитие

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

HardWareMan wrote:Херня какая-то этот ваш хилинх с VHDL...
Пренёс Хардваремановско-Альтеровский Орион с одним симмом в отдельный топик :roll:

viewtopic.php?t=10522
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:Покажи дописанный вариант - я попробую его своему зайлинксу скормить :)

Code: Select all

// Циклогенератор для 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
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вот чего из твоего Верилога нагенерилось для XC9572XL:

Code: Select all

*************************  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); 
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Error404
Maniac
Posts: 269
Joined: 05 Oct 2006 04:45
Location: Moscow

Post by Error404 »

Все клево конечно, но встает вопрос, а чо не на i4004?
Всем добра!
User avatar
MC68k
Retired
Posts: 1328
Joined: 25 Jul 2011 00:14
Location: WWW

Post by MC68k »

ЖЫР
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Почему то все думают, что СИМЫ у всех есть. Все равно заказывать детальки, так что можно использовать все что легкодоставаемо через ebay (и аналоги)
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Error404 wrote:Все клево конечно, но встает вопрос, а чо не на i4004?
Ну если бы оригинал был на i4004...

ИМХО: Оспектрумовливание советских компов (путём приклеивания Z80-проца соплями с 50 Гц прерыванием) было ошибкой - я строю свою альтернативную историю! :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

vinxru wrote:Почему то все думают, что СИМЫ у всех есть. Все равно заказывать детальки, так что можно использовать все что легкодоставаемо через ebay (и аналоги)
Симы тоже вполне доставаемы через ebay ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

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 (которые вроде как можно читать программно без непосредственно самого прерывания).
Last edited by Shaos on 05 Dec 2013 22:18, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
MC68k
Retired
Posts: 1328
Joined: 25 Jul 2011 00:14
Location: WWW

Post by MC68k »

Z80 много где применялся и прерывания по КСИ тоже.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

MC68k wrote:Z80 много где применялся и прерывания по КСИ тоже.
ARM ещё больше где применяется, но это ведь не повод? :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Пока прикидываю неразогнанный двухсимовый вариант для 5 МГц:

Code: Select all

   |      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: 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                 \_______________________/

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-чипа...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
MC68k
Retired
Posts: 1328
Joined: 25 Jul 2011 00:14
Location: WWW

Post by MC68k »

Shaos wrote:
MC68k wrote:Z80 много где применялся и прерывания по КСИ тоже.
ARM ещё больше где применяется, но это ведь не повод? :roll:
не надо путать божий дар с яичницей
User avatar
Error404
Maniac
Posts: 269
Joined: 05 Oct 2006 04:45
Location: Moscow

Post by Error404 »

i8080 в поделках времен 89-90г.г. это дань предельной бедности тогдашних сельских радиолюбителей. Тремя годами позже все Орионы уже шли с Z80 "искаропки" (Ташкентский Турбо, Альтаир, Орион-ПРО). Предлагаю пересчитать на форуме предельно бедных радиолюбителей, у которых нет Z80.
Всем добра!
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Error404 wrote:i8080 в поделках времен 89-90г.г. это дань предельной бедности тогдашних сельских радиолюбителей. Тремя годами позже все Орионы уже шли с Z80 "искаропки" (Ташкентский Турбо, Альтаир, Орион-ПРО). Предлагаю пересчитать на форуме предельно бедных радиолюбителей, у которых нет Z80.
А нонче всё идёт "искаробки" с интеловским многоядерным пентиум-совместимым процом :)
Я тут за главного - если что шлите мыло на me собака shaos точка net