Короче, у меня тут аврал и времени на это не хватает. Делайте как знаете. Ставь 100 ног, заводи все адреса полностью. Между ними сделай несколько связей - так точно не промахнешься.
Короче, у меня тут аврал и времени на это не хватает. Делайте как знаете. Ставь 100 ног, заводи все адреса полностью. Между ними сделай несколько связей - так точно не промахнешься.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Мы дождёмся?
Мне тоже не интересен, закрываю тему.
А не всё таки столько сил потрачено, нужно уж допинать до конца. Есть у меня сырки по VGA видеоадптеру совместим с селектором адресов МХ2. Одобряете?
Да ладно? Вы как дети право, хотел вчера написать, да тема закрыта была. Давайте все по своим домам разбредемся и закроем на фиг форум. Мужики хватит ерундой заниматься. Игорь, давайте доделаем, найдите время, Виталий, надо спокойней ко всему относиться.
По полочкам:
- сырцы для VGA видеоадаптера позаимствую у Ewgeny7, когда-то опробованные на Специалисте на девборде U10 Reverse;
- селектор адресов от Специалиста МХ2 нужно будет писать с самого начала;
- добавлять пины (определение в Квартусе) буду по мере надобности.
Сейчас начал писать проект первой плисины. В ней будут: видеоадаптер, формирователь сигнала сброса (удинение импульса от клавиатуры). Будете смеяться, но если просмотрев исходники от U10, можно обнаружить, что в качестве входной частоты используется 16 МГц (у нас на плате стоит кварцевый генератор). Да, VGA видеоадаптер будет на этой частоте работать.
- - - Добавлено - - -
Пока такие результаты компиляции:
Много предупреждений (72), ошибок нет.Flow Status Successful - Sat Oct 06 19:16:49 2018
Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition
Revision Name spetsialist_mx2_cpld_1
Top-level Entity Name spets_mx2_1
Family MAX7000S
Device EPM7128STC100-15
Timing Models Final
Total macrocells 70 / 128 ( 55 % )
Total pins 79 / 84 ( 94 % )
Текст исходника приведу позже.
Последний раз редактировалось fifan; 06.10.2018 в 18:16.
Синхрогенератор проще, чем вы думаете.
Код:// MX2 Address Chipset module MX2_CPLD_VID( // Системные входы input Clk, // Тактирование input nRES, // Кнопка сброса input Fast, // Сигнал скорости 2,5МГц // Интерфейс процессора output reg nF1, // Инверсная фаза F1 для ВМ80 output reg nF2, // Инверсная фаза F2 для ВМ80, тактовая для Z80 input [15:0]A, // Входной адрес от процессора output reg RST, // Выход положительного синхронного уровня сброса // Интерфейс памяти output [15:0]MA, // Адрес на ОЗУ input [7:0]MD, // Данные ОЗУ графика input [7:0]CD, // Данные ОЗУ цвет // Интерфейс арбитра output SnC, // Арбитраж обращения input MX, // Выбор режима MX // Видеовыход output reg [1:0]R, // Пиксели красный output reg [1:0]G, // Пиксели зеленый output reg [1:0]B, // Пиксели синий output reg HSync, // Горизонтальная синхронизация output reg VSync // Вертикальная синхронизация ); // Синхрогенератор reg [6:0]Arb; // Арбитер цикла ОЗУ reg FSL; // Синхронизация входного сигнала wire [1:0]Red; // Текущий цвет пикселя красного wire [1:0]Green; // Текущий цвет пикселя зеленого wire [1:0]Blue; // Текущий цвет пикселя синего reg [7:0]Shift; // Сдвиговый регистр reg [7:0]Atrib; // Регистр атрибутов reg MXR; // Синхронизация входа цветового режима reg [6:0]X; // Горизонтальный счетчик reg HBlank; // Горизонтальное гашение reg [9:0]Y; // Вертикальный счетчик // Ассинхронная логика assign SnC = Arb[3] & Arb[2]; assign MA[15:0] = (Arb[3] & Arb[2]) ? {2'h2,X[5:0],Y[8:1]} : A[15:0]; // Биты цвета assign Red[0] = ~HBlank & ~Y[9] & ((Shift[7] & Atrib[6]) | (~Shift[7] & Atrib[2])); assign Green[0] = ~HBlank & ~Y[9] & ((Shift[7] & Atrib[5]) | (~Shift[7] & Atrib[1])); assign Blue[0] = ~HBlank & ~Y[9] & ((Shift[7] & Atrib[4]) | (~Shift[7] & Atrib[0])); // Биты яркости assign Red[1] = ~HBlank & ~Y[9] & ((~MXR & (Shift[7] & Atrib[6])) | (MXR & ((Shift[7] & Atrib[7]) | (~Shift[7] & Atrib[3])))); assign Green[1] = ~HBlank & ~Y[9] & ((~MXR & (Shift[7] & Atrib[5])) | (MXR & ((Shift[7] & Atrib[7]) | (~Shift[7] & Atrib[3])))); assign Blue[1] = ~HBlank & ~Y[9] & ((~MXR & (Shift[7] & Atrib[4])) | (MXR & ((Shift[7] & Atrib[7]) | (~Shift[7] & Atrib[3])))); // Синхронная логика always @(posedge Clk) begin // Счетчик цикла if (Arb[6] & ~Arb[5] & ~Arb[4] & Arb[3] & Arb[2] & Arb[1] & Arb[0]) Arb[6:0] <= 7'h00; else Arb[6:0] <= Arb[6:0] + 7'h01; // Синхронизация замедлителя if (Arb[6] & ~Arb[5] & ~Arb[4] & Arb[3] & Arb[2] & Arb[1] & Arb[0]) FSL <= ~Fast; // Арбитраж работает на скорости пиксельклока if (Arb[0]) begin // Выходные пиксели R[1:0] <= Red[1:0]; G[1:0] <= Green[1:0]; B[1:0] <= Blue[1:0]; // Режим MX MXR <= MX; // Сигналы процессора if (Arb[1]) nF1 <= (FSL & Arb[6]) | ~(~Arb[3] & Arb[2]); if (Arb[1]) nF2 <= ~(FSL & Arb[6]) & ~Arb[3]; // Сигналы сдвигового регистра и регистра атрибутов if (Arb[3] & Arb[2] & Arb[1]) begin // Загружаем оба {Atrib[7:0],Shift[7:0]} <= {CD[7:0],MD[7:0]}; // Горизонтальное гашение if (~X[6] & X[4] & ~X[3] & ~X[2] & ~X[1] & ~X[0]) HBlank <= 1'b0; else if (X[6]) HBlank <= 1'b1; end else Shift[7:0] <= {Shift[6:0],1'b0}; // Горизонтальный счетчик if (~Arb[3] & Arb[2] & Arb[1]) begin // Считаем горизонтальную координату if (X[6] & X[0]) begin // Обнуляем горизонтальный счетчик X[6:0] <= 7'h00; // Вертикальный счетчик if (Y[9] & Y[6] & Y[5] & Y[4] & Y[2]) begin // Обнуляем счетчик Y[9:0] <= 10'h000; // Синхронизируем сброс RST <= ~nRES; end else Y[9:0] <= Y[9:0] + 10'h001; // Вертикальная синхра VSync <= ~(Y[9] & ~Y[6] & Y[5] & ~Y[4] & Y[3] & Y[2]); end else X[6:0] <= X[6:0] + 7'h01; // Горизонтальная синхра if (X[3] & X[0]) HSync <= 1'b1; else if (HBlank & ~X[6] & ~X[3] & X[0]) HSync <= 1'b0; end end end // Конец endmodule
Варнинг:
И симуляция:Warning: Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family
Сигнал MX задает логику атрибутов MX/STD, при этом в режиме STD яркость каждого канала максимальна (чего нет у микросхемного MX2). В общем, ковыряйтесь.
Последний раз редактировалось HardWareMan; 06.10.2018 в 20:25.
Ну вот, HardWareMan, могём! Большое спасибо за код. Я его, если ты не против, вставлю в виде модуля без изменений. Частота Clk = 40 МГц? Хотя я писал, что у меня синхрогенератор и на 16 МГц работает, но с моим кодом. Твой код изяшнее, и самое главное уже причёсан и проверен. Ещё раз спасибо.
Во второй плисине поменьше на много предупреждений, но я там ещё не вставил диспетчер верхних адресов RAM-диска и эмулятор порта программатора. Я уже писал, что ради одного применяемого сигнала KA0 (R5) я решил не ставить реальную ВВ55, а эмулировать её.
Последний раз редактировалось fifan; 12.09.2022 в 17:12.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)