Короче, у меня тут аврал и времени на это не хватает. Делайте как знаете. Ставь 100 ног, заводи все адреса полностью. Между ними сделай несколько связей - так точно не промахнешься.
Вид для печати
Короче, у меня тут аврал и времени на это не хватает. Делайте как знаете. Ставь 100 ног, заводи все адреса полностью. Между ними сделай несколько связей - так точно не промахнешься.
Мы дождёмся?
Мне тоже не интересен, закрываю тему.
А не всё таки столько сил потрачено, нужно уж допинать до конца. Есть у меня сырки по 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 % )
Текст исходника приведу позже.
Синхрогенератор проще, чем вы думаете.
http://jpegshare.net/images/f7/0e/f7...53f2d82ca5.pngКод:// 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
http://jpegshare.net/images/23/2a/23...793441b2c1.png
Сигнал MX задает логику атрибутов MX/STD, при этом в режиме STD яркость каждого канала максимальна (чего нет у микросхемного MX2). В общем, ковыряйтесь.
Ну вот, HardWareMan, могём! Большое спасибо за код. Я его, если ты не против, вставлю в виде модуля без изменений. Частота Clk = 40 МГц? Хотя я писал, что у меня синхрогенератор и на 16 МГц работает, но с моим кодом. Твой код изяшнее, и самое главное уже причёсан и проверен. Ещё раз спасибо.
Во второй плисине поменьше на много предупреждений, но я там ещё не вставил диспетчер верхних адресов RAM-диска и эмулятор порта программатора. Я уже писал, что ради одного применяемого сигнала KA0 (R5) я решил не ставить реальную ВВ55, а эмулировать её.