Там была симуляция. Я что-то не могу просимулировать этот код.
Вид для печати
Там была симуляция. Я что-то не могу просимулировать этот код.
Почему не могёшь? Сигналы стандартные делай и все.
Нуб потому что :) Вообще, можно модуль на верилоге сделать top level? Я так сделал, pin assigment раскидал пины с названиями как в input/output после module. Дальше CLK идет клок, делаю nRST вниз, потом nCS вниз, потом nWR вниз, на данных - 0xFFh и ничего на выходах :)
Обновил тот пост. Симуляцию добавлю сюда:
симуляция SPI для MX2
- - - Добавлено - - -
Можно. В этом проекте у меня так и было. Можно сделать схему, для верилога создать символ и положить его на схему. А на схеме уже пины расключить. Но у меня там .v топлевел.
Ну у нас там же Z80-like, а для ВМ80 и ВВ55 инвертится. Рассчитывалось, что не только для МХ2, хотя я уже и не помню. Теоретически можно и убрать инверсию, но на плате она есть, вроде.
- - - Добавлено - - -
А еще, n приставка у сигналов означает инверсию. Ну это так, для себя и для вас (в именах не желательны спецсимволы просто). Активный это как раз низкий, неактивный - высокий. Активный - это когда сигнал влияет на схему же.
Все правильно, это я в трех соснах заблудился просто. Прошу прощения.
Tronix, таки симулируется?
Нет. Делитель частоты вот такой:
(((Pre[3] & Pre[2] & Pre[1]) | Ctrl[1]) & Pre[0])
А теперь разберем скобки:
(
(Pre[3] & Pre[2] & Pre[1]) | Ctrl[1]
) & Pre[0]
Т.е., если Ctrl[1] = 0, то стэйт машина щелкает когда делитель Pre[3:0] = 4'b1111, или делит тактовую на 16.
Если Ctrl[1] = 1, то старшие биты делителя Pre[3:1] маскируются и учитывается только млаший Pre[0] = 1'b1, или делит на 2.
Т.е., при 10МГц тактовой, SLOW (по сбросу) будет 625кГц а FAST 5МГц. Можно подать 5МГц и тогда нижняя будет ниже рекомендуемых 400кГц. Добавить еще один бит в делитель не позволяет EPM3032. В EPM3064 можно его добавить.
Не пойму немного - сначала же выполняется (Pre[3] & Pre[2] & Pre[1]) | Ctrl[1]. По идее тут же не важно что будет в скобках, так как 1 or 1 = 1 ровно как и 0 or 1 = 1.
Я, в принципе, для IBM PC прикидываю, там 14,31818 MHz. Добавил еще один бит в делитель, убрав красный светодиод и сократив Ctrl[3:0] до Ctrl[2:0]. Извиняюсь за офтоп с IBM PC.
Ctrl[1] это бит скорости. И по сбросу он =0, поэтому не маскирует старшие биты делителя. Это же видно по симуляции. А потом, ты туда 1 записал и понеслась на ускоренном. Не забудь этот бит добавить внутрь скобок к уже имеющимся.
Спаял - не работает :smile:
Извиняюсь за офтоп со своим IBM XT, если грубо нарушаю, то может быть отрезать в другой раздел или, не знаю. Простите модераторы.
Просто посылка 10 байт от 1 до 10 выглядит так:
https://habrastorage.org/webt/of/lc/...eopcb567v0.png
В цикле послал байт в порт данных, жду пока сбросится BUSY в порту управления/статуса, шлю следующий. С другой стороны, если ПО "извне" игнорит BUSY и лупит подряд в порт данных, то передаются только "хорошие байты", но остальные есстественно теряются. Из тех же 10-ти байт передаются три нормальных байта - 0x03,0x05,0x09 (к примеру).
Код сейчас такой:
module MX2_CPLD(
// Системные
input Clk, // Входная частота 14.31818 МГц
input nRes, // Входной сигнал сброса, активный уровень лог.0
input nRD, // Вход строба чтения
input nWR, // Вход строба записи
input nCS, // Вход выбора контроллера
input Adr, // Вход адреса данные/управление
inout [7:0]Dat, // Шина данных
// SPI
output nSEL, // Выходной сигнал выбора карты
output reg SCK, // Выход тактовой частоты SPI
input MISO, // Вход данных SPI
output MOSI, // Выход данных SPI
output nRED, // Выход управления красным светодиодом
input nINS // Вход датчика вставления карты
);
// Внутренние регистры
reg [5:0]Pre; // Делитель частоты
reg [2:0]Ctrl; // Регистр управления
reg [7:0]Data; // Регистр данных
reg [2:0]Bits; // Счетчик сдвигаемых бит
reg RMISO; // Защелка сигнала MISO
reg BUSY; // SPI занят передачей
// Комбинаторика
assign nSEL = ~Ctrl[0]; // Выбор карты
assign nRED = ~Ctrl[2]; // Красная лампочка
assign MOSI = Data[7]; // Выход MOSI SPI
assign Dat[7:0] = (~nCS & ~nRD) ?
(Adr) ? {~nINS,BUSY,3'h0,Ctrl[2:0]} : Data[7:0]
: 8'hZZ;
// Синхронная логика
always @(posedge Clk) begin
// Делитель частоты
Pre[5:0] <= Pre[5:0] + 6'h1;
// Запись в управление может происходить асинхронно
if (~nCS & ~nWR & Adr) Ctrl[2:0] <= Dat[2:0];
// Сигнал сброса имеет приоритет вне зависимости от выбранной скорости
if (~nRes)
begin
// Сброс действует на эти регистры
Ctrl[2:0] <= 3'h0;
Bits[2:0] <= 3'h0;
BUSY <= 1'b0;
SCK <= 1'b0;
end else begin
// Состояние SPI
if (BUSY)
begin
// Делитель частоты
if (((Pre[5] & Pre[4] & Pre[3] & Pre[2] & Pre[1]) | Ctrl[1]) & Pre[0])
begin
// SPI работает
if (SCK)
begin
// Сбрасываем такт
SCK <= 1'b0;
// Спад, поэтому сдвигаем
Data[7:0] <= {Data[6:0],RMISO};
// Считаем биты
Bits[2:0] <= Bits[2:0] + 3'h1;
// Это был 7й бит?
if (Bits[2] & Bits[1] & Bits[0]) BUSY <= 1'b0;
end else begin
// Устанавливаем такт
SCK <= 1'b1;
// Это фронт, поэтому сэмплируем вход
RMISO <= MISO;
end
end
end else begin
// Обнуляем счетчик бит
Bits[2:0] <= 3'h0;
// Запись в регистр данных возможна только если SPI не занят
if (~nCS & ~nWR & ~Adr)
begin
Data[7:0] <= Dat[7:0];
BUSY <= 1'b1;
end
end
end
end
// Конец
endmodule[свернуть]
Из изменений - убран зеленый светодиод, делитель на 32, Res активный по высокому уровню. Вроде все.
Вот еще меня смущает вопрос о назначении пинов (pin assigment). Там у epm3032 вроде нет разных банков IO, и я думал сначала что вообще пофигу, какой пин куда назначать. Но как оказалось - не пофигу. Я хотел сигналы SD вывести на "правую" сторону EPM, назначил их, но квартус при компиляции стал ругаться на тему что-то не может проложить (найти) путь от пина (или сигнала) такого-то до пина такого-то. Ладно, распихал пины более-менее последовательно, начиная с первого и до какого-то, скажем 27. Ругаться перестал и стал компилироваться. Странно, я такого не ожидал.
И еще опять по пинам. У EPM3032 есть "глобальные" пины - Global Clock. Туда приходит OSC 14,3 MHz, это Clk у меня. Дальше есть еще Global Clear - это у меня Res и Global OE - это у меня nCS. И есть еще Ded. input (pin 2). Я туда nRD посадил. В то время как nWR у меня на обычном IO пине. Думаю не может здесь что-то такого быть. Может лучше nRD то же на обычный IO повесить?
Половина шины данных оказалась в B.....
Tronix, не замарачивайся с распределением пинов. Глобальные лучше по назначению. Если программа ругается предупреждениями это не критично. Главное чтобы не было ошибок. Где какой банк используется я никогда не обращал внимания. Вот с этим проектом при переописании я сталкнулся с глюками. Потом мне подсказали, что не задействованные пины нужно переводить в третье состояние. И всё стало нормально работать.
Tronix, ну а вопрос то в чем?
Там я есть легенда цвета светодиодов:
RED - сигнал обращения к карте ("0" - активация светодиода) - Operate;
GREEN - сигнал вставленной карты ("0" - активация светодиода) - Insert.
Можно, кстати, применить инверсную логику, как в свичах: не горит - нет карты, горит - карта вставлена и не работает, мигает - карта работает. Тогда хватит одной лампочки, высвободится регистр (и одна LE).
Я так не совсем и понял, достаточно ли ПЛИС EPM7032SLC44 или всё же нужна EPM7064SLC44 ?
Если достаточно - то не могли бы выложить прошивку?
И какие нужно сделать изменения на плате МХ2 от perestoronin ?
http://zx-pk.com/forum/viewtopic.php?f=7&t=466
Нужно было внимательнее читать тему. С ходу отвечу: на схемном вводе проект влезает только во вторую, на языке vhdl - в первую, т.е. требуется меньше ячеек. Я вроде пробовал оба варианта - работают.
Всё ж надо проштудировать всю тему, мне лень. Если не найдёшь - попроси ещё раз - сварганю.
Указанная плата - версии 2.2. Я допаивал держатель карты с деталями на монтажное поле платы версии 2.0. Вроде фото платы выкладывал - не сохранилось.
Опишу здесь по схеме: главное сначала разместить держатель карты на монтажном поле. К его выводам по схеме подпаять резисторы. Резисторы со светодиодами разместить где угодно, можно вне платы. Стабилизатор 5В -> 3,3В с обвязкой тоже где-нибудь разместить поблизости.
А можно вообще по современному - купить у китайцев плату, можно даже с держателям microSD карты. В этом случае всё на схеме (кроме светодиодов с их резисторами) уже есть, стабилизатор не нужен, модуль своими контактами припаивается сразу на выводы панельки плисины и плюс два вывода на питание.
Прошивку для EPM7032SLC44 я не нашёл, если не лень, пожалуйста выложи тут ещё раз.
По поводу самого контроллера - то хотелось бы использовать всё что уже разведено на плате МХ2 версии 2.2 по максимуму.
Поэтому и спросил что возможно кто то уже запустил последнюю версию контроллера на плате МХ2 версии 2.2 с ПЛИС EPM7032SLC44.
А то всё было куплено, собрано и впаяно ещё 2 года назад, поэтому хотелось бы завершить конструкцию ...
Схему на самой плате Специалиста МХ2 я не паял. Ну давайте посмотрим вашу схему (2.2.). Для реализации указанной переделанной схемы что нужно сделать:
1. Удалить резисторы R37...R37, R41, R42;
2. Удаляем транзистор VT5 и диод VD7;
3. Если уже есть китайский модуль - не нужен стабилизатор DA2 и конденсатор C41;
Паям новую обвязку на монтажном поле по данной схеме:
1. Резисторы на сигналы на держатель SD карты 1,7 кОм, 3,3 кОм и 1 кОм;
2. Сам держатель SD карты.
Если уже есть готовый упомянутый мною раннее SD модуль, то паять только выводы модуля непосредственно к ПЛИС. Забыл упомянуть, что не на всех модулях есть выведенный сигнал вставленной карты (/INS).
Вот проект на Верилоге для ПЛИС EPM7032SLC44 от HardWareMan'а. Файл для прошивки - spets_mx2_sd_v.pof.
Сделал изменения на моей плате, а именно:
на 43 пин EPM7032SLC44 вместо 40 мгц подал 10 мгц
на 41 пин EPM7032SLC44 вместо U2 подал U3
выпаял резисторы R33-36, R41, R42, транзистор VT5, диод VD7 и стабилизатор DA2
подключил внешний китайский кардридер со встроенным стабилизатором на 3.3 В.
вместо контакта наличия карты запаял переключатель
прошил EPM7032SLC44
перепрошил ПЗУ на spets_mx2.rar http://zx-pk.ru/attachment.php?attac...5&d=1486293725
СД контроллер не работает ... При разомкнутом датчике карты пишет вставьте карту, при замыкании датчика пишит "инициализация" и так и висит.
Если разомкнуть датчик то снова пишет вставьте карту, если замкнуть то снова пишит "инициализация" ...
Вопросы:
- нужно ли подключать сигнал RD на 14 пин EPM7032SLC44 ?
- совместимы ли приложенная прошивка для EPM7032SLC44 с лоадером из spets_mx2.rar , не нужно ли что ещё что переделывать или инвертировать ?
- что можно посмотреть в памяти или какие сигналы проконтролировать в контроллере ?
Да, при размыкании датчика карты вижу короткую серию импульсов на линии CLSD карты. Затем при выборе директивы U и появлении надписи "инициализация" никаких импульсов ни на каких сигналах карты не наблюдаю, либо их очень мало и они короткие, что просто не замечаю.
Импульсы проскакивают только при размыкании контактов датчика ...
По полочкам.
1. Нужно собрать схему по данному рисунку. Никаких дополнительных сигналов, кроме указанных на схеме, инвертирования сигналов выполнять не нужно.
2. Сигнал /U3 не анализируется и SD контроллер работает только по /U6.
3. Вроде бы без сигнала /RD должно работать.
4. Если нет реакции на инициализацию карты, то наверное нужно поменять карту. Лучше скажет HardWareMan какие карты у него в лоадере поддерживаются, но я бы порекомендовал карты не более 2 ГБайт SD/SDHC.
5. Если всё таки лоадер заработает, но не загрузится система, то наличие в корне SD карты файла bios.bin обязательно. Я в качестве bios.bin использую альтернативный монитор с записанным с адреса D000 загрузчиком RKS файлов собственного изготовления.
6. Вот последняя прошивка (см. аттач). Я всё пытаюсь вывести красивую надпись "Специалист МХ2" при сбросе компьютера. Она у меня появляется на сотни миллисекунд, ели уловимые глазом. Эту надпись выводил Vinxru когда-то в своём MXOS. В эмулляторе всё работает.
7. Специально я сигналы осциллографом не смотрел и так запустилось.
8. Какая прошивка используется в ПЛИС? Какая ПЛИС установлена?
Использую прошивку для EPM7032SLC44 от HardwareMan которую ты выложит двумя постами выше.
Поэтому и спросил совместима ли она с твоим лоадером?
Искажённую и еле заметную надпись "Специалист МХ2" однажды видел при сбросе компьютера.
И с прошивкой из первой страницы у меня сложилось впечатление что компьютер теперь стартует не с первого раза.
Сейчас иногда приходится включать по 2-3 раза чтобы выдало сообщение Монитора, раньше такого вроде не было ...
И после старта компьютера при нажатии сброса надпись Монитора теперь появляется только через 4-5 секунд.
Что компьютер делает эти 4-5 секунд не понятно ...
Вечером испытаю твой новый ROM.
Поищу у себя EPM7032SLC44, ведь именно эту прошивку никто не испытывал.
Именно 5 секунд он и должен выводить надпись, но он держит это время чёрный экран.
С последней прошивкой для РОМ, компьютер не показывает содержимое РАМ-диска.
По Х переход в МХ есть. А вот по Ф6 на рам-диск не переключается.
Также коммандере в РОМ из первой страницы есть баг: отображаются но не запускаются программы из внешнего флэш диска, которые благополучно запускаются из оболочки по директиве @ , к примеру Zoo.
И прошивка для EPM7032SLC44 от HardwareMan так у меня и не заработала ...
Интересно, а что мы хотим увидеть в RAM-диске? Только сбросили/включили комп, как бы весь RAM-диск пустой, вернее сказать там нет файловой системы, данные то может и есть хоть и хаотичные.
Надпись RAM_V6.4 - это и есть сигнализация пользователю, что он находится в RAM-диске и он как я писал выше пустой. F6 - переключение в DOS, в нашем случае MX-DOS, у Вас подключен дисковод? Ну а что тогда надеемся увидеть? По F4 - переключение на ROM-диск.
В каком коммандере? Если имеется в виду SpetsCommander, то я его благополучно забросил, я вообще не уверен что там что-то запустится.
Я уже сказал, что новая прошивка с RAMFOS версии 6.4, а его я не переделал и оставил как есть. Внимательно читаем анатацию к нему.
Наверное, прошивка для EPM7032SLC44 не рабочая. Её я повторяю не проверял. По ней вопросы к автору - HardWareManу.
Прояснялово по ПО:
В ближайшее время я допишу MX-DOS версии 4, но для Сябра, где SD контроллер от Vinxru. Я решил вместо MX-DOS (операционка, которая переписывается с дискеты в ОЗУ с адреса D400) вставить операционку, которая не будет поддерживать дисковод и будет сразу работать с SD картой, RAM/ROM-дисками. И там все процедуры общения с SD картой очень просты и не занимают много места. Я думаю в 5 кБайт я уложусь.
В Специалисте МХ2 исходный текст ПО для SD карты (я основываюсь на лоадере от HardWareMan) занимает много места и не влезет в 5 кБайт. Единственно я для Специалиста МХ2 написал брайзер RKS файлов ("Standard Spetsialist Browser версия для Специалиста_МХ2"), который входит в состав монитора (файл bios.bin). Его можно загрузить директивой U и запустить по GD000. Я так и делаю.
Я имел ввиду переключение в ДОС и показ РОМ-диска.
Прошил твою последнюю прошивку с RAMFOS версии 6.4 заново и понял что в прошивке профиксены сканкоды для Ф-клавиш и теперь для входа в ДОС нужно жать Ф6, а не Ф8 как в старой прошивке. По Ф6 всё работает.
А нельзя ли из прошивки совсем убрать попытку показа надписи "Специалист МХ2" и вернуть всё к первоначальному виду, но с лоадером для СД-карты по команде "U" ?
А то сейчас компьютер стартует со 2-3 раза и при нажатии сброс 5 секунд чёрный экран ...
И не мог бы ты всё же проверить прошивку от HardWareManа для EPM7032SLC44 ?
Чтобы точно знать у меня проблемы с железом или прошивка для EPM7032SLC44 просто не рабочая ...
Какой клавой пользуешься? PS/2? Если да, то всё правильно. При включении адаптер клавы переходит в МХ режим, где верхний ряд сдвинут. Нужно сначала перейти в Std режим. Блин железки нет под рукой, точно не скажу, но вроде Print Screen или Scroll Lock режимы переключает. Индикация MX режима - светодиод Num Lock, вроде.
Ладно прошивку перепишу. EPM7032SLC44 вроде у меня нет, хотя поищу.
Перезалил прошивку ПЗУ, убрал задержку и не работающий логотип.
Я не вижу смысла прошивать EPM7032SLC44, для начала попросим автора (HardWareMan) исправить её без переделки текущей схемы SD контроллера.
Я пытался уменьшить прошивку EPM7064SLC44 до размера EPM7032SLC44 (текущее значение 55% ячеек). Но пока не получилось. В начале этой темы были первые эксперименты без применения сигнала /RD, может убрать соответствующие ячейки и уложимся в 32?! Тем более на схеме контроллера нет сигнала /RD.
- - - Добавлено - - -
Проверяю описание пинов двух проектов (7032/7064), есть расхождения пинов, попробую переписать проект. Завтра, roma, проверишь новую прошивку.
- - - Добавлено - - -
Нужно изменить схему. /RD подключить актуально. /U6' мы не используем. Завтра перерисую схему.
Последняя прошивка ПЗУ работает. На сброс сейчас реагирует мгновенно.
Запаял ещё сигнал RD. Со старой прошивкой от HardWareMan при вызове директивы U загораются оба светодиода.
Но дальше ничего не происходит, висит надпись "инициализация."
А вот с новой прошивкой для EPM7032SLC44 при вызове директивы U загорается только зелёный свтодиод.
Дальше также ничего не происходит, висит надпись "инициализация."
Но как я уже писал, возможно у меня к.н. аппаратная проблема, поэтому было бы лучше проверить на компьютере,
который работает с EPM7064SLC44
Проверить работает вообще SD интерфейс можно так - на держателе карты, без карты естественно!, закоротить MOSI и MISO, затем хоть какой-то своей программой(я делал из sdOS), хоть из монитора(реально не проверял, но не вижу причин почему это не должно сработать), писать один байт в порт SD, и затем, из этого порта читать(вывести дамп), при рабочем SD интерфейсе
читаться должно то, что туда перед этим записано, с задержкой в один шаг записи, те записал 0х55, прочитал первый раз, будет 0хFF, записал 0хАА, прочитал 0х55, записал 0х33, прочитал 0хАА...
В этой прошивке используются адреса 0xF010/0xF011, где F011 это порт конфигурации, сюда можно записать (монитором MF011) разные значения, и посмотреть, работает ли чип селект карты (тестером на держателе карты) и светодиоды.
F010 это порт данных, сюда записать, а затем от сюда же прочитать что-либо...(из монитора MF010 - пишем, DF010,F010-читаем).
Можно проверить только тракт приема, для этого MISO посадить на землю (можно просто, а можно и через резистор) и при выполнении запись, а затем чтение, должен читаться 0х00, без этой закоротки должен читаться 0хFF.
Не стоит ли сменить карту? Желательно объёмом до 2 ГБайт.
Я попробую и заодно EPM7032SLC44 нашёл.
- - - Добавлено - - -
Да это значение выбрано не случайно. В МХ режиме это адрес контроллера дисковода, если что почти не занят. В Std режиме этот адрес занят портами "программатора", вот поэтому у меня по директиве @ комп виснит - занято Flash-диском - надо что-то думать.
EPM7032SLC44 я прошил и проверил - прошивка для этой плисины не рабочая. Нужно просить HardWareMan'а её допилить без переделки схемы.
Что именно вы хотите?
Если можно сделать рабочую прошивку для EPM7032SLC44 - то сделать, если нельзя - то значит нельзя, придётся тогда всем покупать EPM7064SLC44.
Просто изначально два года назад многие купили EPM7032SLC44, втом числе и я, и эта ПЛИС просто лежала и ждала своего часа.
Жалко будет просто выкинуть ...