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

viewtopic.php?t=10522
Moderator: Shaos
Пренёс Хардваремановско-Альтеровский Орион с одним симмом в отдельный топикHardWareMan wrote:Херня какая-то этот ваш хилинх с VHDL...
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
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);
Ну если бы оригинал был на i4004...Error404 wrote:Все клево конечно, но встает вопрос, а чо не на i4004?
Блиттер можно сделать опциональным (в виде отдельно стоящего XC9572XL) и по идее можно копировать не только в пределах экранных областей, но и вообще в пределах всех симов (для этого правда нужно будет задавать уже не 16, а 22 бита адреса), и не только симов, но и скажем и из ПЗУ-картриджа (который вставляется в общую память по биту P7 порта управления страницами памяти):Shaos wrote:P.P.S. Я тут думаю, что наверное CAS-before-RAS не нужно столь часто вызывать - вместо этого свободные циклы обращения к памяти можно отдать скажем под некий DMA, на котором можно сделать блиттер для быстрой графики...
P.P.P.S. #FB00 я планировал заюзать для задания смещения до начала экранной области (экран сможет перемещаться с шагом 256 байт), далее #FB01 можно заюзать под команду блиттера (0 - остановить копирование и приготовиться принимать данные, 1 - начать копирование с одного сима, 2 - начать копирование с двух симов, 3 - начать копирование пикселов из первого сима с маской из второго сима), #FB02 и #FB03 будут задавать начальный адрес источника, #FB04 и #FB05 будут задавать начальный адрес приёмника, а #FB06 будет задавать количество копируемых байт (от 1 до 256) - вобщем как-то так...
Наверное надо на полтакта сдвинуть формирование 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?
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 \_______________________/
А нонче всё идёт "искаробки" с интеловским многоядерным пентиум-совместимым процомError404 wrote:i8080 в поделках времен 89-90г.г. это дань предельной бедности тогдашних сельских радиолюбителей. Тремя годами позже все Орионы уже шли с Z80 "искаропки" (Ташкентский Турбо, Альтаир, Орион-ПРО). Предлагаю пересчитать на форуме предельно бедных радиолюбителей, у которых нет Z80.