Просмотр полной версии : Еще один Орион на ПЛИС
а раньше он на нескольких платках что ли помещался? :-)
Всё дело в размерах платки, которые ограничены 10*10см. Больше - не охота платить зазря...
OrionExt
21.07.2018, 18:20
Пожаловался? Ты такое пилишь. {censored}
Напоминаю, это ваш последний штрафной балл.
Пожаловался? Ты такое пилишь. {censored}
Извиняюсь, но к чему такие резкости? И где Вы увидели жалобы?
Всё ясно с уважаемым...
За выходные почти развёл платку. Уже почти закончил питание и тут вспомнил, что я не вывел на разъём синхру :v2_dizzy_facepalm:
Завтра подумаю как их лучше всего провести через текущие дебри дорожек и полигонов, что бы питание особо не побить.
А пока вот 2 картинки: верхний слой (https://image.prntscr.com/image/FV-oZjOARhSg0lZdScQ_Ig.png) и нижний слой (https://image.prntscr.com/image/bwbILPttSD_YInkISHS_FA.png).
Всё строго в 2-х слоях, полигон "общего" в местах перехода перфорировал переходными для снижения потерь на них. Так же слежу, что бы питание и "общий" были как можно "жирнее" - исхожу из общего тока в 4А, что бы хватило с запасом.
Например, дорожка VCC, идущая по правому краю в нижнем слое, имеет ширину 2мм, а слева - 1мм. Сделал разводку с разграничением по положительному питанию - 1 трасса на Step-Down до 3.3В и околопроцессорную обвеску с процессором, вторая уже полностью разведена.
Вариант данного участка платы ещё не финальный (из-за тех 2-х сигналов), так же потом ещё долго буду проверять ширину питания, что бы везде хватило.
По поводу 3,3В - это пока в теории, скорее всего будет без него, то есть только 5В.
Error404
23.07.2018, 11:35
Хостинг изображений какой-то странный - не показывает верхнюю четверть рисунка. Плата же квадратная? Или нет?
А где на ней процессор? Он же ведь не в ПЛИС?
Хостинг изображений какой-то странный - не показывает верхнюю четверть рисунка. Плата же квадратная? Или нет?
А где на ней процессор? Он же ведь не в ПЛИС?
Я обрезал верх просто - там пока вообще пусто. Процессор и ПЗУ ещё только добавляю в схему.
Вот вся плата вместе с процессором, ПЗУ и второй CPLD. Так же разместил конфигурационный переключатель. Остались ещё блокировочные конденсаторы и подтягивающие резисторы - добавлю в последнюю очередь уже. Пока ещё пытаюсь скомпоновать, переставляя оставшиеся 3 корпуса :)
- - - Добавлено - - -
Из отличий от стандартного ПРО - ПЗУ будет одна. В ней будут обе прошивки (ROM1, ROM2), переключаемые адресом A16 (формируется на основании сигналов выборки ROM. Так же адресные выводы А16 и А17 будут выведены на джамперы для выбора текущего банка.
Системный разъём - пока что оригинальный из журналов (распиновку брал в №4 за 93 год), а не ПРОшный.
- - - Добавлено - - -
Ещё думаю вывод PGM завести на CPLD - что бы в будущем иметь возможность перепрошить её средствами самого компьютера. Пущу через джампер, что бы можно было разорвать в любой момент.
- - - Добавлено - - -
Основная Шина (https://image.prntscr.com/image/fkuX0_gVQyGCQkZFZb2xrA.png), очень жирная :)
Выше - системный разъём, на который и выводятся почти все сигналы из этого пучка. Ну и соединяет основные 4 корпуса - процессор, ПЗУ и 2 CPLD...
Error404
24.07.2018, 18:16
Из отличий от стандартного ПРО - ПЗУ будет одна. В ней будут обе прошивки (ROM1, ROM2), переключаемые адресом A16 (формируется на основании сигналов выборки ROM. Так же адресные выводы А16 и А17 будут выведены на джамперы для выбора текущего банка.
Это исключит возможность использовать Альтаир-ДОС из ПЗУ (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=882456&viewfull=1#post882456). Конечно, в ПЗУ есть еще и ПРО-ДОС, но она несамодостаточная (там только код ОС и Нортон, и никакой файловой системы - чтобы что-то делать обязательно нужен дисковод FDD), тогда как в Альтаир-ДОС полноценная файловая система на весь расширенный (выше первых 64к) объем ПЗУ и файлы туда можно положить любые - это автоматизировано в моем TotalCommander (DoubleCommander, Far) плагине (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=885236&viewfull=1#post885236) для работы с файловыми системами CP/M. Также, в пустые места первых 64к ПЗУ ROM2 я встроил "псевдо ромдиск-Ордос" (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=881319&viewfull=1#post881319)(чтобы не делать для этого отдельную плату расширения) на 8к, управляется этим же плагином.
Это исключит возможность использовать Альтаир-ДОС из ПЗУ (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=882456&viewfull=1#post882456). Конечно, в ПЗУ есть еще и ПРО-ДОС, но она несамодостаточная (там только код ОС и Нортон, и никакой файловой системы - чтобы что-то делать обязательно нужен дисковод FDD), тогда как в Альтаир-ДОС полноценная файловая система на весь расширенный (выше первых 64к) объем ПЗУ и файлы туда можно положить любые - это автоматизировано в моем TotalCommander (DoubleCommander, Far) плагине (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=885236&viewfull=1#post885236) для работы с файловыми системами CP/M. Также, в пустые места первых 64к ПЗУ ROM2 я встроил "псевдо ромдиск-Ордос" (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=881319&viewfull=1#post881319)(чтобы не делать для этого отдельную плату расширения) на 8к, управляется этим же плагином.
У ПЗУ 2 старших адреса выведены на джамперы. А в процессорной CPLD 15 пинов остались свободны и я их вывел на "гребёнку". Так что соединить 2-мя проводками и дополнить прошивку CPLD - и готово расширение ПЗУ до 256Кб, управляя стандартным портом.
Но да, может лучше будет-таки вывесить отдельную мелкую ПЗУшку для ROM1-BIOS, что бы не засирать половину ёмкой - это можно будет сделать через системный разъём и те же свободные пины, например.
Так что всё решаемо и очень быстро. Просто места под вторую ПЗУ на плате уже нету вообще, только если крепить её "на сопли" к имеющейся.
Error404
25.07.2018, 12:27
У ПЗУ 2 старших адреса выведены на джамперы. А в процессорной CPLD 15 пинов остались свободны и я их вывел на "гребёнку". Так что соединить 2-мя проводками и дополнить прошивку CPLD - и готово расширение ПЗУ до 256Кб, управляя стандартным портом.
256кб - ни то ни сё. Какие вообще ПЗУ максимальной емкости есть в планаре с 8-битной организацией? На память приходит только 27/28x040 (512кбайт). А есть ли более ёмкие параллельные TTL-совместимые ПЗУ? 27с322 не предлагать - у них 10 лишних ног для возможности 16-разрядности (хотя и таки да - 4Mбайт в одном кристалле!), а тут лишние ноги на плату не влезают. Или влезет?
256кб - ни то ни сё. Какие вообще ПЗУ максимальной емкости есть в планаре с 8-битной организацией? На память приходит только 27/28x040 (512кбайт). А есть ли более ёмкие параллельные TTL-совместимые ПЗУ? 27с322 не предлагать - у них 10 лишних ног для возможности 16-разрядности (хотя и таки да - 4Mбайт в одном кристалле!), а тут лишние ноги на плату не влезают. Или влезет?
При текущей компоновке - уже даже 2 дорожки дополнительных от CPLD до ПЗУ не влезут - и так уже плотненько, а на втором слое я питание разводил. Если пихнуть больше трасс - где-то вполне может просесть "общий". Не хочу потом напаивать провода вдоль трасс для увеличения пропускной способности по току :)
По ПЗУ - путаю, у меня заложена 29F040, то есть 512Кб. На материнских платах их хватает. Да даже на Али чуть больше 1$ за корпус стоят. Дальше - уже другие корпуса, если рассматривать корпуса PLCC-32.
Вот внешний вид платы на данный момент - остались только сигналы прерываний. Верх (https://image.prntscr.com/image/X0uEqxgdT86UmP1cufoUhQ.png)и низ (https://image.prntscr.com/image/6mHmAfzoSjCvKQLmrX5M2g.png).
И да - на плате не уместились ни клавиатура, ни ROM-диск. Всё это придётся делать отдельной платой, подключаемой через системный разъём. Так что потом ещё долго буду думать - "а всё ли я туда вывел?" :)
Сейчас, как видно из картинки, получилось 26 корпусов (2 из них - одногейтовые инверторы). Весь видеовыход собран на логике. Во второй CPLD ещё достаточно свободных ячеек имеется для организации чего-либо (например, через свободные пины подвесить что-либо из периферии, если вывести их на системный разъём и т.д.). Основное назначение этих пинов на данный момент - использование в случае, если я что-либо "забыл" при переносе, что бы не паять к выводам волоски ;)
Итак, в отладке через ЛА нашел косяки в реализации и исправил их.
Сейчас вроде бы что-то запускается, но не полностью - на экране остаётся мусор, не отображаются символы (https://yadi.sk/i/AM5diLIo3ZucLp). В общем, буду дальше отлаживать. Уверен на 95%, что ошибка опять в менеджере памяти (по схеме ПРО - правый верхний угол первой страницы, я там очень много перевёл в другой базис и мог напортачить).
Так что - сижу и дальше пошагово сверяю с эмулятором и декомпилом...
- - - Добавлено - - -
Мда, а дальше - Ж*** с разбором кода. Оный копируется по кусочкам в оперативу, откуда и выполняется. Пока всё "сошью" в IDA, задолбается уже =/
Хм, нашел место, которое выполняется некорректно - сверял с эмулятором на том же ROM'е.
Исполняемый код:
seg005:F3F2 sub_F3F2:
seg005:F3F2 push bc
seg005:F3F3 push hl
seg005:F3F4 inir
seg005:F3F6 pop hl
seg005:F3F7 pop bc
Данный сегмент зануляет один столбец экрана и вызывается в цикле до конца экрана.
Команда INIR - читает из порта (C) и пишет в (HL), при этом увеличивая HL и уменьшая B, пока B не станет равен 0.
При выполнении этого кода "в железе"наблюдается отсутствие приращения для регистра HL - картинка с ЛА по ссылке (https://image.prntscr.com/image/qqnd-ko0SYmTPDdNgNO_Xw.png)
Буду копать причины такого поведения - до этого момента всё выполнялось вполне нормально.
Самый первый столбец обнуляется совсем другим кодом:
seg007:F448 sub_F448: ; CODE XREF: seg007:loc_F42Fp
seg007:F448 ; seg007:F438p
seg007:F448 push bc
seg007:F449 push hl
seg007:F44A ld d, a
seg007:F44B cpl
seg007:F44C ld e, a
seg007:F44D
seg007:F44D loc_F44D: ; CODE XREF: sub_F448+9j
seg007:F44D call sub_F3C0
seg007:F450 inc l
seg007:F451 djnz loc_F44D
seg007:F453 pop hl
seg007:F454 pop bc
seg007:F455 inc h
seg007:F456 dec c
seg007:F457 ret
seg004:F3C0 sub_F3C0: ; CODE XREF: sub_382E+1Ep
seg004:F3C0 ; sub_F448:loc_F44Dp
seg004:F3C0 ld a, (iy+0)
seg004:F3C3 and d
seg004:F3C4 ld c, a
seg004:F3C5 ld a, (hl)
seg004:F3C6 and e
seg004:F3C7 or c
seg004:F3C8 ld (hl), a
seg004:F3C9 ret
seg004:F3C9 ; End of function sub_F3C0
Сделано не самым оптимальным кодом, но авторам, видимо, было виднее...
PS: Очень бесит, что по одним и тем же адресам в памяти пишутся разные подпрограммы. Раз - одна записана, через пару вызовов - уже другая и с другим стартовым адресом:v2_dizzy_facepalm::v2_blink::v2_con f2::v2_crazy:Моя не понимать, зачем так писалось...
Завтра попробую понять причину некорректности обнуления памяти - из-за этого в дальнейшем каша на экране. А возможно и отсутствие символов связано с этим...
Error404
06.08.2018, 10:35
Область F000..F3FF - непереключаемая область страниц в режиме Ориона-128 и как переключаемая, так и нет в режиме ПРО (зависит от портов управления). В непереключаемой области места мало (плюс там еще системные переменные Монитора), а для межбанковских процедур его надо прилично (особенно это жмёт в режиме Ориона-128) - поэтому там и пишут процедуры одна поверх другой в мизерных не задействованных ничем областях.
Область F000..F3FF - непереключаемая область страниц в режиме Ориона-128 и как переключаемая, так и нет в режиме ПРО (зависит от портов управления). В непереключаемой области места мало (плюс там еще системные переменные Монитора), а для межбанковских процедур его надо прилично (особенно это жмёт в режиме Ориона-128) - поэтому там и пишут процедуры одна поверх другой в мизерных не задействованных ничем областях.
Если быть точнее, то это касается всей области F000-FFFF.
Но вот причину такого поведения процессора я не могу понять. Может софтовое ядро проблематичное - сейчас я с ним работаю, поскольку с реальным пока имеются аппаратные проблемы.
Это исключит возможность использовать Альтаир-ДОС из ПЗУ (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=882456&viewfull=1#post882456). Конечно, в ПЗУ есть еще и ПРО-ДОС, но она несамодостаточная (там только код ОС и Нортон, и никакой файловой системы - чтобы что-то делать обязательно нужен дисковод FDD), тогда как в Альтаир-ДОС полноценная файловая система на весь расширенный (выше первых 64к) объем ПЗУ и файлы туда можно положить любые - это автоматизировано в моем TotalCommander (DoubleCommander, Far) плагине (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=885236&viewfull=1#post885236) для работы с файловыми системами CP/M. Также, в пустые места первых 64к ПЗУ ROM2 я встроил "псевдо ромдиск-Ордос" (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=881319&viewfull=1#post881319)(чтобы не делать для этого отдельную плату расширения) на 8к, управляется этим же плагином.
Возвращаясь к теме - для компактного варианта платы я не нашел в продаже таких ёмких чипов. Может я что-то не так ищу, ткните носом...
А так - можно обойтись и 1 корпусом. Просто в верхних 2Кб будет размещён ROM1-BIOS, выборка которого будет происходить "автоматом" путём выставления на всех старших адресах (А13 и далее) лог.1 - реализуется подобное достаточно легко. Ну и плату придётся чутка подправить, что бы все адресные ноги были заведены на логику.
И самое главное - что бы чип был достаточно быстрым, поскольку время чтения составляет всего-то около 150ns при максимальной тактовой частоте (по результатам симуляции, по факту надо ориентироваться на ещё меньшую цифру, скорее всего). Вот кусочек захвата как раз с чтением из ROM2 (шаг выборок - 10ns):
https://image.prntscr.com/image/jT-hKw1dSuSRTz6BOwvkyg.png
Из подобной быстрой памяти я нашел только SST39SF040 - в худшем случае скорость доступа составляет 70ns, что покрывает потребность "с запасом". Если надо будет увеличить разрядность - будет проще использовать несколько таких чипов, судя по всему.
PS: И сейчас я всё-таки подумываю об отделении процессора с его логикой и ROM-ом на отдельную платку - тогда будет куда проще в остальном. Ну и на плате видео появится место для "творчества", о котором говорили ранее. ПГД будет проще организовать с такой же МС памяти, по таймингам она вполне удовлетворяет требованиям.
Итак, вопрос по памяти - насколько нужны 3-х и 4-х битный видеорежимы?
Думаю всё-таки отделить основную память процессора от видеопамяти и разместить на плате видеоадаптера 1 чип двухпортовки (64К*16). К этой же памяти будет обращаться и процессор, а всё что выше - на плате процессора чипами обычной SRAM уже, если надо.
Просто для 2-х битовых режимов (стандартных для простого Ориона) хватит и 1 чипа, а для более "широких" режимов смысл от установки 2-х чипов двухпортовки теряется уже - дешевле будет поставить более сложную схему управления обычной статикой и разместить всю память на плате видео (как сейчас).
Всё, платы ушли в производство - видеомодуль и кроссовая.
Картинки для видео:
https://image.prntscr.com/image/O5kDsUKBRuOQDVzxsDcCWQ.pnghttps://image.prntscr.com/image/9g27S9_UQbuh2ESx8aiLzA.png
Память поставил двухпортовую, 2 чипа по 64К*16. Порты F8 и FA выполнил на ТМ9 - ИР35 тяжело достать, пришлось отказаться.
Вся схема выполнена на рассыпухе с применением GAL - здесь их 3 штуки (2 для счётчиков и 1 на видеовыход). Дешифрация портов и сигналы управления памятью будут заведены с процессорного модуля, где (скорее всего) будет стоять уже CPLD'шка.
Так же добавил на будущее посадочные места под чип памяти в PLCC32 и 3 чипа в SOIC-16 (для последних разведено и питание).
Так же очень много перфорации на полигоне с "землёй" для уменьшения количества "узких" мест для тока.
Кроссовая плата - для подключения 5-и модулей и подачи питания на них (2 разъёма MOLEX, как для питания IDE).
Пока запланировано 3 модуля - видео, процессорный и периферия (клавиатура, дисковод/эмулятор и прочее. пока ещё даже не думал над ним).
Дополнено: Чип памяти 1.
LeoN65816
17.08.2018, 12:26
Память поставил двухпортовую, 2 чипа по 64К*16.
А какую двухпортовку использовал (маркировка, питалово)? Чипы у тебя уже есть? Почём брал и где? Почему/зачем две двухпортовки?
А какую двухпортовку использовал (маркировка, питалово)? Чипы у тебя уже есть? Почём брал и где? Почему/зачем две двухпортовки?
1 - IDT7028L15PFI, 5В.
2 - Уже идут, если что - возьму у другого продавца.
3 - 45 юаней за штуку, на тао :)
4 - Потому что имеется поддержка видеорежимов Орион-ПРО, где нужно 4 плоскости (32 бита). В текущем варианте все видеоданные идут напрямую с памяти на сдвиговые регистры, без защёлок и прочего.
LeoN65816
17.08.2018, 13:50
3 - 45 юаней за штуку, на тао :)
Ух-ты, очень вкусная цена! На taobao.com? На этом китайсясайте ничего не понятно... Как ты с ними работаешь? Поделись, пожалуйста.
4 - Потому что имеется поддержка видеорежимов Орион-ПРО, где нужно 4 плоскости (32 бита). В текущем варианте все видеоданные идут напрямую с памяти на сдвиговые регистры, без защёлок и прочего.
Ясно. А если двухпортовку взять большего объема (например 256Кх18) и с удвоенной частотой в регистры упреждения/буферы читать?
HardWareMan
17.08.2018, 20:33
1 - IDT7028L15PFI, 5В.
3 - 45 юаней за штуку, на тао :)
45 американских юаней?
http://jpegshare.net/images/55/43/55437e5c06e46532100c8ce0f1c09b88.png
:) А на таобао действительно есть по 45:
http://jpegshare.net/images/c3/3e/c33e23641f79a66b608ed4bb741ea279.png
Да вот незадача: кликаешь а там...
http://jpegshare.net/images/65/81/658101962461ecfd4001117f39a41b49.png
Так что, ты бы ссылочку приводил, что-ли...
Ясно. А если двухпортовку взять большего объема (например 256Кх18) и с удвоенной частотой в регистры упреждения/буферы читать?
Можно и так, но дешевле 2 чипа меньшего объёма. Да и не нашел 5-ти вольтовых двухпортовок я там на такой объём. Может плохо искал...
- - - Добавлено - - -
:) А на таобао действительно есть по 45:
Так что, ты бы ссылочку приводил, что-ли...
Вот (https://item.taobao.com/item.htm?id=574705464119), просто скидка 50%, потому и 45Ю.
А заказываю через знакомых - они для любителей периодически там книжки тарят, ну и моё барахло прицепом катается с книжками. Зачастую наоборот - книжки прицепом к моему барахлу едут. Особенно когда заказывал комплект движков на 2 принтера - 10 двигателей по пол кило каждый :) Ну и прочего ещё кило на 8 было там. Многими позициями куда выгоднее закупаться, но надо брать относительно много, что бы комиссия посредника и доставка из Китая окупилась нормально.
А тем временем процессорный модуль буду переделывать с 0.
За основу для тестов взял ядро ВМ80А - всё работает отлично.
Завтра думаю заменить на Z80-Card-II, после чего буду "наращивать" до ПРО путём раскомментирования портов. При этом оставлю полноценный порт FB (как это обсуждалось ранее) - вроде бы нет подводных камней с этим делом или я что-либо пропустил?
Z80-Card-II работает в полном объёме, с портами Орион-ПРО (https://yadi.sk/i/WKJgq7kN3aN63i). Дальше буду запускать уже в режиме ПРО.
OrionExt, Как автор эмулятора, может поможешь узнать причину проблемы. Суть такова, что в меню Орион-ПРО нет символов. Вообще. Методом обратного прохода от записи на экран дошел до кода по адресу 0xF501 - "ld a, (ix+0)". Здесь при выполнении в эмуляторе читается адрес 0x5190 (значение 0x00), а у меня в симуляции - 0x5190 (значение 0xFF).
Попробую раскрутить дальше назад, но может уже сталкивался кто-либо с таким вот симптомом...
- - - Добавлено - - -
Ага, проблема почти решена - оказывается, запись шла в банк памяти, за пределами видеопамяти. то есть выше первых 256Кб RAM - а в симуляции у меня только они. Буду подключать внешнюю память для расширения до 512Кб, на меньшем объёме ПРО не запускается даже, как получается...
- - - Добавлено - - -
И таки да, с дополнительными 256Кб памяти менюшка наконец-то завелась...
Из минусов текущей организации памяти - в первом чипе на плате CPU "исчезают" первые 256Кб памяти (ровно половина) - они перекрываются видеопамятью.
Можно, конечно, усложнить схему дешифрации банок памяти, но тогда объём оной будет не кратен 512Кб. Например - 256Кб+512Кб и тд, с прибавлением по 512Кб.
Набросок схемы процессорного модуля. (https://andreil.by/orion/orion_cpu.pdf)
В качестве ROM2 поставил 2 корпуса 29SF040 - что бы можно было уместить упомянутую выше ОСь.
так же в качестве ROM1 поставил 27С512 - банки будут переключаться DIP-переключателем/джамперами.
В качестве RAM стоит 4 корпуса 256Кб*8 (3 банки за пределами кадра остались).
Всю логику "спрятал" в CPLD'шку - на таких частотах оно надёжнее и можно обойтись без ожиданий за счёт того, что все ВВ55 эмулируются в ней (как тупые регистры, доступные для чтения/записи, без реализации других режимов).
Кроме эмулируемых ВВ55 и прочих портов в CPLD спрятана вся дешифрация портов и прочая логика (в том числе и отвечающая за переключение старших адресов памяти).
Почти все выводы CPLD используются, но надо будет проверить позже для надёжности - осталось всего 4 вывода.
Каюсь, грешен.
Накосячил я знатно, но ошибку признал и исправил. Плату за пару дней перерисовал и отправил на изготовление.
Исправил - убрал второй чип памяти и поставил защёлки на видеопамять.
Я, идиот такой, забыл, что разные плоскости всё равно в первых 128Кб памяти живут.
Итого по микросхемам видеомодуля:
ИЕ18 - 6 штук. Есть 10 74F163, идёт ещё SN74HC163DR;
ATF22V10 - 3 штуки;
ИР33 - 4 штуки. Идут SN74AHCT573DWR;
ИР10 - 4 штуки. Идут 74HC166D;
АП6 - 2 штуки. Имеются 74HCT245;
ТМ9 - 2 штуки. Идут MC74HC174ADR2G;
ЛН1 (1 гейтовый) - 1 штука. Имеются 74HCT1G04GW;
ИР23 - 2 штуки. Идут SN74AHCT374DWR;
IDT7028BPF - 1штука.
Все детали, кроме памяти, идут вместе с платой. Как придут - там и проверю (сперва без памяти, ест).
Сегодня накидал процессорный модуль с возможностью установки 2-х чипов по 512Кб - одним чипом 1Мб проблематичнее достать с подходящими таймингами, что бы не тормозить процессор.
Там получилось 12 корпусов:
Процессор - Z80 в DIP-40;
EPM7128STC-100 - основная логика, там спрятаны все порты;
ATF22V10 - 1 шт. Формирует вектор прерывания и сам сигнал прерывания. В CPLD не влезло банально по количеству пинов;
27C010 - ROM1, 1 штука. Проще достать, можно и на другую скальпелем переделать;
SST29F040 - 2 штуки. Можно и 1 - ROM2;
AS7C4098A - 4 штуки. В минимуме хватит и 1, будет 512Кб памяти. Первые 128Кб перекрывает двухпортовка из видеомодуля - её может сделаю только на запись для процессора;
АП6 - 2 штуки.
У CPLD осталось всего 4 неиспользуемых пина - и так оптимизировал как мог.
Пока всё будет идти, буду неторопясь разводить процессорный модуль и сяду за модуль клавиатуры - откладывал его уже очень долго, надо добивать...
За пару дней выполнил черновую трассировку процессорного модуля (https://image.prntscr.com/image/GDK9vTLoTdW2jwvazoDQcQ.png). Монтаж получился почти односторонний - на второй стороне только 2 чипа памяти и 1 буфер (резисторы/конденсаторы я банально не считаю).
Больше дня потратил на компоновку, и за день набросал имеющуюся "картинку". Все сигналы, кроме питания, уже разведены - буду их оптимизировать, и только после этого возьмусь за питание.
Думаю к концу недели отправить на изготовление.
Единственный момент - может придётся изменить тип корпуса у чипов памяти - с чипами в SOJ меня кинули, может буду покупать в TSSOP (других вариантов на Али нет, а с Тао ждать ещё месяца два-три, пока до меня дойдёт).
Возник вопрос по системному разъёму Орион-ПРО - используются платами расширения ли в нём сигналы /INTA, /BLRAM, HOLD, HLDA?
Поискал по схемам - вроде бы нигде не используются ли, но мало ли что-то пропустил...
На данный момент в схеме процессорного модуля они отключены и не используются.
Из вариаций по памяти - на Али доступны чипы CY7C1049D (512К*8), цена адекватная. Второй вариант платы развёл под них - возможно их и буду использовать.
Просьба к "шарящим" в FPGA/CPLD - направьте на путь истинный по оптимизации логики...
При текущей распиновке не лезет логика - не хватает путей для сигналов, как понимаю (сообщения "Error (163104): Can't place node "ram_wrn~12" of type max_mcell" и подобные в логе).
Пробовал переставлять часть пинов - ситуация особо не меняется. А делать распиновку по результату Fitter'а - уже изврат по трассировке.
Если убрать полный порт FB из логики, то всё равно не вписывается =/
В архиве - проект для EPM7128. Проект для Quartus 13.0 - 66082
Менять чип на более ёмкий - не подходит, поскольку уже почти на руках именно эти :(
направьте на путь истинный по оптимизации логики...
При текущей распиновке не лезет логика - не хватает путей для сигналов, как понимаю (сообщения "Error (163104): Can't place node "ram_wrn~12" of type max_mcell" и подобные в логе).
Оптимизацию переключал? (Speed/Balanced/Area). Может поможет внезапно. В Assigments-Settings-Analisis&Sinthesis.
- - - Добавлено - - -
В архиве - проект для EPM7128. Проект для Quartus 13.0
У меня 9.1, что никак не будет работать с проектом под 13.0...
Оптимизацию переключал? (Speed/Balanced/Area). Может поможет внезапно. В Assigments-Settings-Analisis&Sinthesis.
Пробовал - никак. И с параметрами синтеза и Fitter'а баловался - один фиг =/
А "кастрировать" логику как-то не хочется, что бы впихнуть её. После сборки занято 110 ячеек (86%) и 80 пинов (95%).
- - - Добавлено - - -
С автоматическим размещением пинов никаких проблем нет - всё влазит и даже остаётся место под сигналы для 4-х резервных пина.
Но трассировка там будет адской =/
С автоматическим размещением пинов никаких проблем нет - всё влазит и даже остаётся место под сигналы для 4-х резервных пина.
Но трассировка там будет адской =/
Возьми монетку и бутылку коньяка.
Брось монетку, и по результатам - менять камень, или влезать в трассировку.
А коньяк - все равно пить придется после, душевную рану залечивать ;)
- - - Добавлено - - -
А "кастрировать" логику как-то не хочется, что бы впихнуть её.
Лепить вторую CPLD будет глупо...
Может есть возможность вытащить часть логики в GAL, к примеру? Она в разводке удобнее и проще.
Возьми монетку и бутылку коньяка.
Брось монетку, и по результатам - менять камень, или влезать в трассировку.
А коньяк - все равно пить придется после, душевную рану залечивать ;).
Скорее всего, так и придётся делать...
Лепить вторую CPLD будет глупо...
Может есть возможность вытащить часть логики в GAL, к примеру? Она в разводке удобнее и проще.
Никак вообще. В CPLD "спрятаны" дешифраторы портов и сами порты со своей логикой. Выводить это всё наружу - намного больше пинов понадобится/
Вот исходник (https://github.com/andreili/Orion-NG/blob/master/fpga/fpga_ports/rtl/cpu_ports.vhd) текущей версии прошивки. Поменялось только пара сигналов в части RAM ну и соответствие пинов с сигналами.
Наружу и так вывел шифратор вектора прерывания - для него не хватало пинов...
Вот исходник текущей версии прошивки.
Я так понимаю, ты туда и порты от Орион-Про засунул? (тему не читал). Предполагается работа в режиме Про?
Я так понимаю, ты туда и порты от Орион-Про засунул? (тему не читал). Предполагается работа в режиме Про?
Да, тут "полный фарш" - реализация Орион-ПРО по схемам с доработкой порта FB до полноты (по схеме Z80-Card-II). Из отличий - возможность адресовать до 2Мб памяти (расширены порты 04-06 и F9). Так же расширен порт 09 для возможности адресовать до 1Мб ROM2 (на плате разбил на ROM2 и ROM3 в виду большей доступности чипов на 512Кб).
Остальное - 1:1 по схемам Орион-ПРО :)
возможность адресовать до 2Мб памяти
Чувствую тяжелую поступь Error404 :)
Упрощение задумки до 512кб с попутным выпиливанием расширений портов не спасет ситуацию? То есть, взять за основу так сказать "журнальный вариант"?
- - - Добавлено - - -
Честно говоря, я бы даже не дернулся делать Орион-Про на 7128. Там Пентагон еле поместился, а вы решили такой огроменный комбайн туда засунуть...
LeoN65816
29.08.2018, 07:40
направьте на путь истинный по оптимизации логики...
Проблема возникла из-за узости шин между LABами и PIA...
Быть может вместо MAX7000S посмотреть в сторону ACEX или FLEX? Они ведь 5-вольтовые?
Чувствую тяжелую поступь Error404 :)
Упрощение задумки до 512кб с попутным выпиливанием расширений портов не спасет ситуацию? То есть, взять за основу так сказать "журнальный вариант"?
- - - Добавлено - - -
Честно говоря, я бы даже не дернулся делать Орион-Про на 7128. Там Пентагон еле поместился, а вы решили такой огроменный комбайн туда засунуть...
Если память уменьшить до 1Мб - всё влазит...
- - - Добавлено - - -
Проблема возникла из-за узости шин между LABами и PIA...
Быть может вместо MAX7000S посмотреть в сторону ACEX или FLEX? Они ведь 5-вольтовые?
Только стоят намного дороже и с доступностью похуже будет сейчас, вроде бы...
Быть может вместо MAX7000S посмотреть в сторону ACEX или FLEX? Они ведь 5-вольтовые?
Цена. Это будет еще одна ПентЭва.
- - - Добавлено - - -
и с доступностью похуже будет сейчас, вроде бы...
и Квартус версии не моложе 7.2 понадобится :)
- - - Добавлено - - -
Если память уменьшить до 1Мб - всё влазит...
Припомни хоть одну программулину к Ориону/СРМ, которой понадобится 2Мб, и смело выпиливай лишний объем.
Припомни хоть одну программулину к Ориону/СРМ, которой понадобится 2Мб, и смело выпиливай лишний объем.
Да, уже выпилил. оба чипа на одной стороне платы, получилось 1Мб памяти. Второй чип опционален, то есть в минимальном конфиге будет 512Кб.
Плата уже переразведена, прошивка CPLD проверена для распиновки.
- - - Добавлено - - -
Вид платы на текущий момент: сверху (https://image.prntscr.com/image/d1wj0LrpSnaWLoOp5YVy8A.png) снизу (https://image.prntscr.com/image/e-DjnNTRRtuRBfNy_mYXWw.png).
Вид платы на текущий момент: сверху снизу.
ЗдОрово получилось! :)
- - - Добавлено - - -
А клавиатура каким образом?
А клавиатура каким образом?
Как писал выше - будет 3-я плата, на которой будут все УВВ. Клавиатура, FDD, HDD - всё там будет. И, скорее всего, будет стоять вторая CPLD для организации дешифрации портов, а так же организации буферов для медленных устройств.
Но эта часть пока ещё только в перспективе - для проверки мне будет достаточно подключить свою платку с STM32 к системному разъёму (ну и к паре пинов на самой плате, что бы не городить свои дешифраторы - потом это всё будет реализовано на другой плате).
LeoN65816
29.08.2018, 11:33
andreil, какой диаметр отверстий и диаметр пояска у via? В какой конторе с такими нормами заказывал? (На своей платке делаю 0.3/0.5, хочу заказать производство у Павла Рябцова, а он говорил, что у него в минимуме 0.3/0.6).
andreil, какой диаметр отверстий и диаметр пояска у via? В какой конторе с такими нормами заказывал? (На своей платке делаю 0.3/0.5, хочу заказать производство у Павла Рябцова, а он говорил, что у него в минимуме 0.3/0.6).
У меня 0.5/0.3, но можно и меньше. Вот ссылка на полный список норм (https://jlcpcb.com/capabilities/Capabilities). Переходные там минимум 0.45/0.2. Я всегда беру с запасом, что бы не было проблем с сопротивлением переходных отверстий.
Дорожки/зазоры тут - 0,127мм минимальные для двухслоек.
То есть - имеем почти 6 класс :)
Претензий по качеству к ним не было ни разу, цена вполне удовлетворяет (с доставкой 10 плат 100*100мм стоят около $14). Для больших плат цена резко увеличивается, ест. Но всё равно вполне нормально получается (при размерах 200*100мм с доставкой будет около $40).
Павел Рябцов
29.08.2018, 17:13
andreil, У моего производителя, стандарт 0.3 отверстие и 0.15, дорога. Меньше они не делают, зато качество отличное, заказывал было дело и с той конторы, что ссылку давали, качество раз на раз не приходится. По поводу отверстия и пятака. 0.3 и 0.5 это очень не серьёзно, потом будете говорить что погнул плату и где то отвалилось. Я заказываю с 0.3 минимум 0.62 пятак.
Писи, прочитал их стандарт для одно и двух слоек, пятак 0.6мм, откуда у Вас 0.5?
Писи, прочитал их стандарт для одно и двух слоек, пятак 0.6мм, откуда у Вас 0.5?
Ну, я у них так заказывал - и норм, ничего нигде ещё не отрывалось, по факту. Далеко не первая партия, некоторые пережили перепайку всех компонентов несколько раз (феном).
Подключил свою клавиатуру - и понеслось...
Сразу обнаружены неприятные проблемы - заметно даже на экране.
Если войти в Monitor, то на экране остаются следы от меню. Перезагрузка - остаются следы от Monitor'а :v2_dizzy_facepalm:
С остальными пунктами аналогично.
Кто сталкивался с такими проблемами?
Так же заметил, что после перезагрузки часть рамки в меню отрисовывается некорректно. перезагрузил ещё раз - норм. И так по кругу, нормально-плохо, как триггер где-то срабатывает по ячейке памяти :(
- - - Добавлено - - -
По поводу корректности работы - очень сильно подозреваю корку T80.
Очистка производится командой INIR. В эмулятор каждый шаг команды инкриментирует регистр HL, в симуляции же этого не происходит...
Очистка производится командой INIR
По поводу корректности работы - очень сильно подозреваю корку T80
Не все корки Т80 одинаково полезны.
У тебя версия с правкой от syd'а? Как раз команды INIR-OTIR там лечились, ибо в "оригинале" они были глючно сделаны.
- - - Добавлено - - -
Правильный вариант (https://yadi.sk/d/ox32GsYN2HPS0A).
Не все корки Т80 одинаково полезны.
У тебя версия с правкой от syd'а? Как раз команды INIR-OTIR там лечились, ибо в "оригинале" они были глючно сделаны.
- - - Добавлено - - -
Правильный вариант (https://yadi.sk/d/ox32GsYN2HPS0A).
Хм, спасибо за наводку. Код очень отличается, запустил сборку.
- - - Добавлено - - -
Да. заработало корректно.
осталось только добиться стабильности RAM-теста.
Error404
06.09.2018, 15:09
По поводу корректности работы - очень сильно подозреваю корку T80.
А у тебя в проекте разве не нативный Z80?
А у тебя в проекте разве не нативный Z80?
Кстати, да. Я тоже так считал...
Кстати, да. Я тоже так считал...
Был, но пинов GPIO девборды на все служебные сигналы не хватило, что бы в полной мере проверить всё. Да и сейчас через те пины, что планировалось использовать для Z80, подключён STM32 в роли клавиатурного модуля. Кусок платы с Z80 и буферами пришлось вырезать дремелем (https://pp.userapi.com/c847124/v847124678/e165c/FF-1pZK2Bic.jpg).
PS: Исправил косяки прошивки CPLD для процессорного модуля, тест памяти Орион-ПРО проходит успешно :)
Чем можно протестировать прерывания? В ближайшие дни собираюсь закончить модуль клавиатуры...
Чем можно протестировать прерывания?
Игрушками, типа Exolon, Soldier of Fortune....
Мапперы fullram и оконный менеджер у тебя уже сделаны?
- - - Добавлено - - -
Кусок платы с Z80 и буферами пришлось вырезать дремелем.
Ага... JLCPCB. Пользуешься их акцией 2$ за 10 плат? :)
omercury
06.09.2018, 17:23
очень сильно подозреваю корку T80.
5 коп от меня.
Исправлены фазы и длительность сигналов /MREQ, /IORQ;
Исправлены фазы и длительность сигналов /RD, /WR при обращении к памяти.
Остались неверными /RD и /WR при обращении к портам, но всё равно длиннее, чем в T80s. Может когда-нибудь поправлю.
На 39,375МГц тест ОЗУ от Прусака проходит ок (EP2C5 спидгрейд 8).
Правились по реальному Z80 от Toshiba тех годов, Зайлог и ST оказались дохлыми. ((
Мапперы fullram и оконный менеджер у тебя уже сделаны?
Да, проверял тестом Z80 (который для Z80-Card-II) - всё было ОК (менеджер, fullRAM, прерывания). Прерывания - по схеме Орион-ПРО, но шифратор вектора не проверял на корректность работы.
- - - Добавлено - - -
Ага... JLCPCB. Пользуешься их акцией 2$ за 10 плат? :)
Да, но так же и удобно делать тестовые платы. Если будет всё отлажено - не проблема скомпоновать и на 1 плате. Но пока что полной схемы нет вообще.
- - - Добавлено - - -
Игрушками, типа Exolon, Soldier of Fortune....
Для этого придётся допилить клавиатуру сперва :)
- - - Добавлено - - -
5 коп от меня.
Исправлены фазы и длительность сигналов /MREQ, /IORQ;
Исправлены фазы и длительность сигналов /RD, /WR при обращении к памяти.
Остались неверными /RD и /WR при обращении к портам, но всё равно длиннее, чем в T80s. Может когда-нибудь поправлю.
На 39,375МГц тест ОЗУ от Прусака проходит ок (EP2C5 спидгрейд 8).
Правились по реальному Z80 от Toshiba тех годов, Зайлог и ST оказались дохлыми. ((
Ну, мне это пока что не критично - отличается только длительностью /WR. А это мне вообще не критично - память успевает, остальное и в реале будет успевать :)
omercury
06.09.2018, 19:56
отличается только длительностью /WR.
Длительность-то как раз у /WR та же, положение изменилось.
Также, как и у других сигналов.
Впрочем, дело хозяйское.
Длительность-то как раз у /WR та же, положение изменилось.
Также, как и у других сигналов.
Впрочем, дело хозяйское.
Я сравнивал с коркой, выложенной на пару постов выше - отличается только формированием /WR ;)
omercury
06.09.2018, 22:09
Я сравнивал с коркой, выложенной на пару постов выше - отличается только формированием /WR ;)
Странно, в моей шина данных разделена на DI и DO, а у Евгения - нет...
Мож что не так сравнивал?
Ну ладно, положу сюда компиляцию с того, что все используют - t80s.vhd
реальный процессор TMPZ84C00AP Toshiba 24неделя 87 года выпуска
66154
обёртка t80s.vhd из пакета Евгения
66155
моя обёртка с тем же пакетом Евгения
66156
Пр ссылке архив (136Мб) с дампами на все 3 варианта для Saleae Logic.
https://cloud.mail.ru/public/3XpZ/jJVSc7LGc
Открывать этим.
https://www.saleae.com/ru/downloads/
Учебник
http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&dn=UM0080&ft=User%20Manual&f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2 T0RBdlZVMHdNRGd3TG5Ca1pnPT0=
P.S.
Кстати, с синхрогенератором от Ленинграда t80s.vhd работать отказался - завис...
Странно, в моей шина данных разделена на DI и DO, а у Евгения - нет...
Чего???
T80s:
DI : in std_logic_vector(7 downto 0);
DO : out std_logic_vector(7 downto 0);
- - - Добавлено - - -
или ты про асинхронный вариант с двунаправленной шиной T80a? Так оно так и должно быть :)
omercury
06.09.2018, 22:25
Чего???
T80s:
DI : in std_logic_vector(7 downto 0);
DO : out std_logic_vector(7 downto 0);
Э-э...
Того! )))
Скачал и не посмотрел?
- - - Добавлено - - -
или ты про асинхронный вариант с двунаправленной шиной T80a? Так оно так и должно быть :)
Таки да, t80a. ;)
Я в своей разделил для прямой замены.
omercury, в дистрибутиве два топ-файла, для синхронной и асинхронной работы. Называются они соответственно t80s и t80а. Это нормально и правильно. Как у тебя в файле t80a оказались раздельные шины - не знаю.
Странно, в моей шина данных разделена на DI и DO, а у Евгения - нет...
Мож что не так сравнивал?
Все отличия - разделение ШД и фаза сигнала /WR.
И да - использую вариант T80a :)
omercury
07.09.2018, 00:07
Все отличия - разделение ШД и фаза сигнала /WR.
Да эпическая ж сила!
По какому фронту начинаются и заканчиваются сигналы /MREQ и /RD ?
По какому фронту начинается и заканчивается сигнал /WR ?
По какому фронту заканчивается сигнал /IORQ ?
А должны по даташиту?
А в архиве Евгения?
Ну ёлки жеж патки-то?!...
/RD и /WR только во время доступа к портам неправильные да /IORQ начинается на полтакта раньше, чем должен, о чём собственно и написал выше.
Чтобы ваш Т80 заработал с реальным железом на шине, его нужно допиливать )
https://www.youtube.com/watch?v=MIculTTt_Uk
omercury
07.09.2018, 09:28
Как у тебя в файле t80a оказались раздельные шины - не знаю
Я в своей разделил для прямой замены.
Чтобы ваш Т80 заработал с реальным железом на шине, его нужно допиливать )
Как ещё написать, что выложенное в достаточной мере допилено для работы с реальным железом, я уже и не знаю...
Я в своей разделил для прямой замены.
А почему не взять уже разделенный?
Да эпическая ж сила!
По какому фронту начинаются и заканчиваются сигналы /MREQ и /RD ?
По какому фронту начинается и заканчивается сигнал /WR ?
По какому фронту заканчивается сигнал /IORQ ?
А должны по даташиту?
А в архиве Евгения?
Ну ёлки жеж патки-то?!...
/RD и /WR только во время доступа к портам неправильные да /IORQ начинается на полтакта раньше, чем должен, о чём собственно и написал выше.
Результаты DIFF'а Вас устроят? (https://pastebin.com/Wd3NM5fc) Убедитесь сами, что кроме /WR и ШД НИКАКИХ отличий нет.
- - - Добавлено - - -
Корка от Жени уже правленая была в основном, а вы думаете (судя по всему), что я сравнивал с оригинальной коркой...
omercury
07.09.2018, 12:03
А почему не взять уже разделенный?
А потому, что времянки управляющих сигналов неправильные.
По крайней мере с синхрогенератором Ленинграда, написанном со схемы, синхронный T80 работать отказался напрочь.
Впрочем tv80 и az80 тоже.)) Получается, что ни одна актуальная корка с opencores по факту не является потактовым клоном зетника.
Либо я чего-то там пропустил. :)
В синхронном дизайне по-быстрому переделать не получилось, так как клочить надо то по положительному, то по отрицательному перепаду клока, глубоко в ядро лезть не хотелось.
Асинхронный вариант оказался самым близким и простым для переделки под "настоящее" железо. Да и в "железном" Z80 на это дело стоит по-ходу комбинаторика.
Поправил времянки по учебнику и реальному зетнику и у Ленина всё тут же чудесным образом заколосилось. Со всеми мыслимыми и немыслимыми вариантами разгона.
Чтение/запись портов работает и с тем, что получилось. Так и оставил.
Пока.
"Может быть когда-нибудь".... ;)
как-то так.
- - - Добавлено - - -
Корка от Жени уже правленая была в основном, а вы думаете (судя по всему), что я сравнивал с оригинальной коркой...
https://opencores.org/project/t80
"Найдите 10 отличий" ;)
Убедитесь сами, что кроме /WR и ШД НИКАКИХ отличий нет.
А ведь и правда!
Ну значит это я синхронный курочил-курочил, да не докурочил...
А ведь и правда!
Ну значит это я синхронный курочил-курочил, да не докурочил...
Ну вот ;)
И в архиве выше - только оболочка для асинхронного, так что сорян, но всё норм.
Да и вообще - по таймингам я сейчас почти не загоняюсь. Память работает только на процессор, и она шустрая. CPLD, обрабатывающая порты и выдающая сигналы на прочие девайсы, отработает более чем шустро. ROM-ки выбрал так же шустрые - так что и на 12,5МГц без циклов ожидания работать должно.
PS: На клавиатуре остались неназначенными только всякие символы и цифровая клавиатура - йифры/буквы и стрелки работают. Результат работы клавиатуры наблюдаю во встроенном Монитор-е и проблем пока нет. Как будет готова раскладка рабочая, буду по таймингам смотреть возможность впихнуть логику в STM-ку, потому что иначе обработка матрицы в EPM7128 не влазит вообще никак. Сейчас для тестов у меня в 1 чипе эмулируется и ВВ55 клавиатурного порта и обработка матрицы. STM раз в 1мс пишет матрицу (8 строк по 11 бит, клавиатура MC7007).
Главное - чтобы все были счастливы. Аминь.
Итак, клавиатура кое-как работает. И полезли новые косяки...
При попытках загрузить режимы "Orion-PRO" или "Orion-128" всё намертво зависает.
Для Про - выводит экран с надписью "Loading Disk operating System" и больше ничего.
Для 128 - меняет режим отображения, фон становится синим вместо красного и всё. На ШД почти стабильное состояние (она выведена на светодиоды).
Буду копать причины такого поведения =/
- - - Добавлено - - -
По 128 - мой косяк, тут же вроде как нужен ROM-диск :)
- - - Добавлено - - -
Итак, исправил используемые образы ROM - взял с эмулятора версию 310.
Режим "ПРО" - при выборе страницы №1 загружается, но нет приглашения, как в эмуляторе ("BIOS ERR ON A:: SELECT"). Скорее всего причиной является полное отсутствие дисковода в принципе.
При выборе страницы №2 - зависает ещё на загрузке =/ Буду копать.
Проблема даже в меню - при входе в тестовое подменю на экране фигня творится. Меню мелькает на секунду и потом исчезает, в левом верхнем углу пара символов левых. При навигации клавишами вверх-вниз пункты прорисовываются и работают. RAM/ROM тесты проходят нормально, как и в эмуляторе всё.
Режим "128" - ничего не изменилось. По конфигурации - должно грузить с ROM-2 (проверял через меню - всё ОК).
Sancho45
10.09.2018, 07:08
И полезли новые косяки...
всё намертво зависает.
фон становится синим вместо красного и всё.
причины такого поведения =/
- - - Добавлено - - -
мой косяк
Буду копать.
Это объясняет ваши посты....
Это объясняет ваши посты....
Очень тонкий юмор, мсье...
Я хотел бы обкатать всё в симуляции перед воплощением в железе - иначе придётся много резать, а может и перепаивать чипы (хз, какое их состояние будет, может по оставшимся записям почти 0 будет).
А по поводу проблем - они и будут, потому что много чего в схеме изменил без подробного описания переделок (тот же порт 0xFB).
тот же порт 0xFB
А что ты с ним сотворил?
Error404
10.09.2018, 16:27
А что ты с ним сотворил?
Наверное, он его добавил от Ориона-128. :)
В оригинальном Орионе-ПРО от порта FB оставлен только один бит - включение прерываний (и кстати в ROM310 порт FB на ПРО инициализируется байтом 0 что годится для недоработанного ПРО и не некорректно как для Ориона-128 так и полного варианта порта FBh в ПРО, т.к. 0 включит диспетчер ОЗУ 16к по адресу 0). Корректный вариант инита для ВСЕХ вариантов - байтом 80h, что и реализовано в поправленных ROM320, ROM321.
Наверное, он его добавил от Ориона-128. :)
В оригинальном Орионе-ПРО от порта FB оставлен только один бит - включение прерываний (и кстати в ROM310 порт FB на ПРО инициализируется байтом 0 что годится для недоработанного ПРО и не некорректно как для Ориона-128 так и полного варианта порта FBh в ПРО, т.к. 0 включит диспетчер ОЗУ 16к по адресу 0). Корректный вариант инита для ВСЕХ вариантов - байтом 80h, что и реализовано в поправленных ROM320, ROM321.
Знаю эту фишку, потому использую ROM321 из репы эмулятора ;)
Просто может где-то в сигналах напортачил - сейчас ещё с клавиатурой разбираюсь. Пришлось загрузчик по дизасму восстанавливать - папка с программой на домашнем компе "попала под нож", а код в репу не включил тогда :)
Часть третьей платы собрана на имеющихся платах и работает успешно. При работе на 12,5МГц и без ожиданий клавиатура порой срабатывает за двойное, а то и четверное нажатие.
А раз клавиатура работает полностью, можно тестировать дальше в поисках ошибок процессорного модуля - его я буду всё-таки переразводить, что бы можно было поставить 4 чипа памяти. Будет не такая красивая трассировка, но рабочая.
- - - Добавлено - - -
А CPLD-шка на третьей плате пока занята на 51% - она эмулирует ВВ55 и общение с СТМ32, на которой реализована обработка клавиатуры. По таймингам - вполне успевает, но нужно оптимизировать пару мест для гарантии.
Кстати, такой вопрос по клавиатурам в Орион-е: опрос ведётся фиксированным драйвером или в некоторых программах/играх используется свой драйвер?
Сейчас я эмулирую только вариант клавиатуры MC7007 с опросом по столбцам (порт B и первая половина C). Если делать и обратную (с опросом по порту А), тогда логика эмуляции усложнится =/
PS: Клавиатура сейчас успевает отреагировать на сканирование последовательными командами out/in. Как понимаю, с использованием адресации как к ячейкам памяти, скорость только уменьшится...
Error404
11.09.2018, 21:25
Кстати, такой вопрос по клавиатурам в Орион-е: опрос ведётся фиксированным драйвером или в некоторых программах/играх используется свой драйвер?
Сейчас я эмулирую только вариант клавиатуры MC7007 с опросом по столбцам (порт B и первая половина C). Если делать и обратную (с опросом по порту А), тогда логика эмуляции усложнится =/
PS: Клавиатура сейчас успевает отреагировать на сканирование последовательными командами out/in. Как понимаю, с использованием адресации как к ячейкам памяти, скорость только уменьшится...
Опрос всегда в одну сторону (там же диоды, выход 8 бит, 11 входов для УКНЦ), все линии могут опрашиваться одновременно. А вот опрос по ячейкам памяти может быть почти вдвое быстее чем по портам - в режиме Ориона-128 с косвенной адресацией, пример с потолка:
ld de, portB
ld hl, portC
ld bc, portA
ld a,scаncode
ld (bc),a
ld a,(de)
ld b,(hl)
Опрос всегда в одну сторону (там же диоды, выход 8 бит, 11 входов для УКНЦ), все линии могут опрашиваться одновременно.
фух, слава богу :) Иначе пришлось бы делать опциональный переворот матрицы в зависимости от назначения порта А - сейчас выход вычисляется как построчный OR для сочетания "строка матрицы" и "скан-код". Такое решение максимально быстрое и позволяет опрашивать любое число столбцов сразу. Только реализацию надо чуть ускорить - пока что сделал немного "в лоб" и при неудачном стечении обстоятельств может не успеть среагировать.
А вот опрос по ячейкам памяти может быть почти вдвое быстее чем по портам - в режиме Ориона-128 с косвенной адресацией, пример с потолка:
ld de, portB
ld hl, portC
ld bc, portA
ld a,scаncode
ld (bc),a
ld a,(de)
ld b,(hl)
Глянул в справочник:
OUT r, (C) - 12 T-States
IN A, X - 11 T-States
LD (bc), a - 7 T-States
LD a, (de) - 7 T-States
LD r, (hl) - 7 T-States
Таки да, надо будет ужимать по времени максимально. Подумаю над этим вопросом завтра ;)
- - - Добавлено - - -
Опрос всегда в одну сторону (там же диоды, выход 8 бит, 11 входов для УКНЦ), все линии могут опрашиваться одновременно.
Просто в эмуляторе видел раскладку питерскую, где сканоды гнались в порт А, а выход читался из В и части С.
Error404
11.09.2018, 23:53
Просто в эмуляторе видел раскладку питерскую, где сканоды гнались в порт А, а выход читался из В и части С.
Мдя. Кстати, питерская схема - более правильная, т.к. совместима по включению с РК-86. Её я и имел в виду. Не знаю как в ПРО подключали МС7007. Лучше эмулировать клаву РК86, она универсальная, с МС7007 и несовместимым включением авторы накосячили КМК.
Мдя. Кстати, питерская схема - более правильная, т.к. совместима по включению с РК-86. Её я и имел в виду. Не знаю как в ПРО подключали МС7007. Лучше эмулировать клаву РК86, она универсальная, с МС7007 и несовместимым включением авторы накосячили КМК.
Как совместимы? В твоём эмуляторе для обоих вариантов MC7007 вижу массив клавиш 8*11.
Скорее всего, ну её в пень, МС7007, и сделать RK86-only? В этом варианте, как понимаю, порт А 100% только на вход работает, так?
Error404
12.09.2018, 08:54
Как совместимы? В твоём эмуляторе для обоих вариантов MC7007 вижу массив клавиш 8*11.
Скорее всего, ну её в пень, МС7007, и сделать RK86-only? В этом варианте, как понимаю, порт А 100% только на вход работает, так?
Да, лучше РК86, она одинаково включена во всех вариантах. Если смотреть со стороны Ориона, то в варианте РК в порт А (F400) пишется сканкод, а с портов B (результат) и половинки С (ctrl+shift+ruslat) идет чтение.
Массив УКНЦ везде 8х11, это понятно, клава то одинаковая, а вот включена по-разному: в Питерском варианте для Ориона-128 она ставится по порту так же как и в РК86 (Орион пишет в А читает с ВС), а в авторском (как для ориона128 так и ПРО) - УКНЦ поставили шиворотнавыворот (Орион пишет в В читает с АС) при том что РК86 у них же всегда ставится как и обычно (А, ВС).
а в авторском (как для ориона128 так и ПРО) - УКНЦ поставили шиворотнавыворот (Орион пишет в В читает с АС) при том что РК86 у них же всегда ставится как и обычно (А, ВС).
Вообще-то в ПРО (версия прошивки 321) пишется в ВС, читается А. Вот участок опроса, используемый в меню (взято с версии 210, но не менялось с тех пор):
ROM:165F loc_165F:
ROM:165F ld a, l
ROM:1660 out (19h), a
ROM:1662 ld a, h
ROM:1663 out (1Ah), a
ROM:1665 in a, (18h)
ROM:1667 cp 0FFh
ROM:1669 jr z, loc_16B4
ROM:166B ld b, a
ROM:166C ld a, (loc_FF6D)
Error404
12.09.2018, 22:00
Вообще-то в ПРО (версия прошивки 321) пишется в ВС, читается А. Вот участок опроса, используемый в меню (взято с версии 210, но не менялось с тех пор):
Ну, это всё кардинально меняет. :)
Вот участок опроса, используемый в меню
У меня в эмуляторе работает другой участок, по адресу 16E0h. Там в А пишется, а из В читается. Конфигурация - для клавы РК-86.
У меня в эмуляторе работает другой участок, по адресу 16E0h. Там в А пишется, а из В читается. Конфигурация - для клавы РК-86.
Ну, я как бы писал про клавиатуру МС7007 ;)
А сейчас - да, перевёл на РК86. Ну и делаю много оптимизаций по быстродействию - пишу обработчик на АСМе...
Закончил модуль клавиатуры. Используется только раскладка РК86, матрица хранится в CPLD, иначе быстродействие не получалось обеспечить без непрерывного сканирования (а это недопустимо в данном случае, поскольку МК будет занят ещё кучей дел). Матрица в CPLD обновляется максимально быстро, в каждой итерации основного цикла.
Так же реализовал интерфейс ROM-диска, с использованием защёлок на адресах (каким портом писать старшие адреса, с А16?).
Итого - 121/128 ячеек заняты, свободно ещё 10 ног.
Так же имеются 10 халявных экранов 128*64, монохром, - на них буду делать интерфейс для работы с образами на карте памяти/флешке. В перспективе - подключение образа FDD/HDD и полноценная работа с ними.
Кстати, модуль клавиатуры можно будет подключаться к ПРО - разъём соответствует ему, используются только стандартные сигналы. При необходимости могу быть использованы прочие сигналы (например, прерывания).
Функционал:
Собственно клавиатура и мышь. На данный момент поддерживаются только USB, позже буду добавлять PS/2;
USB-Flash и microSD - накопители для образов и прочего;
Эмуляция флоппи и винчестера - выбор образов осуществляется через меню (упомянутый выше экран);
Настройка алиасов и сочетаний клавиш - в нашем варианте только алиасы, то есть последовательность клавиш в ПК при нажатии 1 клавиши на клавиатуре.
В перспективе и прочее, но хотя бы это реализовать...
- - - Добавлено - - -
Так же сейчас пишу программу (https://image.prntscr.com/image/7amVl172Szq6LNGN1F7HyA.png)для помощи с составлением матриц клавиш - что бы было проще сопоставить разные матрицы для режимов "Рус/Лат". Но, в основном, это будет актуально для других версий клавиатуры - модуль универсальный.
Ну, с занятием на ближайшие пару дней по вечерам я уже определился (https://yadi.sk/i/lROUK9YFxNwTBw). На работе есть осцилл нормальный, буду им проверять тайминги в проблемных случаях. Ну и через пару дней придёт ЛА с полосой пропускания 200МГц по 16 каналам :)
И спустя 5 часов пайки плата собрана и готова к завтрашнему пробному включению (https://yadi.sk/i/iXxo5OwBAwT7tA) - сделаю на работе, через нормальный источник питания. Там же и ATF-ки буду проверять (осцил рабочий, так-то).
- - - Добавлено - - -
И да - на фото чуть корявый вариант, 3 счётчика не так запаял. Уже исправил...
А я думал что сначала паяют большие тараканы (в данном случае ПЛИС).
А я думал что сначала паяют большие тараканы (в данном случае ПЛИС).
Тут не плис, а двухпортовая память. Она в Москве и будет на руках к концу месяца. Проверять лучше без неё - можно все сигналы на регистры проводками просимулировать ;)
Эх, надо было брать все ATF-ки на работу - из 3-х 2 оказались битыми, не прошивает фьюз по одному и тому же адресу. Или проблема в программаторе? При этом 3-я прошилась успешно с 1-ого раза.
Проверять буду завтра - и ЛА дома забыл и осцил на работе занят =/
Видеоадаптер заработал почти с первой попытки - исправил только 1 опечатку в прошивке ATF'ки по горизонтали. Сегодня на макетке соберу процессорный модуль - имеются CPLD'шки и остальное, как раз на днях последнее пришло.
Сегодня спаял "костяк" макетки процессорного модуля. Завтра начну паять метры МГТФа :)
http://i66.tinypic.com/214ds1t.jpg
CPLD'шка уже запаяна - она на фрагменте в верхнем левом углу (снизу, там шаг 0,5мм). Ниже - процессор, Z84C0010 (есть в наличии, потому и воспользовался).
На правом фрагменте буду распаивать чип памяти, возможно ещё 1 плату потом прилеплю "бутербродом".
Error404
24.09.2018, 23:19
Ты же вроде цивильную плату разводил?
Ты же вроде цивильную плату разводил?
Да, но тут нюансы:
До конца так и не отладил, есть проблемы с запуском программ. Буду позже проверять с анализатором, отслеживая выполнение кода в симуляции. Есть подозрения на пару мест в схеме, но надо 100%;
Плату ждать месяц, я за это время на макетке лучше всё проверю и отлажу и закажу вариант без ошибок уже.
Error404, Такой вопрос по реализации ROM-диска - как его лучше делать, только по портам 28-31 или смешанный, ещё и по F500-F503?
- - - Добавлено - - -
Как я понял из схемы ПРО, там реализовано обращение только по порту 0x28-0x31, для этого же в ORDOS пропатчен участок чтения ROM-диска и вообще вся работа с портами (версия "ORDOS-PRO V4.10 281199"). Так что, достаточно будет сделать только 1 схему дешифрации...
ПЗУшка ROM-диска будет подключаться к CPLD через регистры и буфер - не хватает выводов на полноценное подключение :( Ну и сам диск будет находиться уже на 3-ей плате по счёту (видео, процессорный модуль, периферия). Кроме него там будет реализована клавиатура (без ожиданий, матрица непосредственно в CPLD) и прочие девайсы, эмулируемые STM32 (HDD, FDD, что-либо ещё). Там по ячейкам с пинами всё почти впритык, как и в процессорном модуле.
Завершена предварительная трассировка процессорного модуля - что-то из пинов по ходу дела переставлялось для упрощения, но больше уже ничего не переставляется от слова вообще :( Поэтому, приходится устраивать "взрыв на макаронной фабрике", который буду постепенно оптимизировать :)
И да - трасс питания пока не рисовал. Примусь за них только после завершения оптимизаций сигналов, потому что в данный момент там всё очень плотно сверху от CPLD.
https://image.prntscr.com/image/ln892MfvTFykMMN_QP6RtA.png
Error404
01.10.2018, 21:59
Error404, Такой вопрос по реализации ROM-диска - как его лучше делать, только по портам 28-31 или смешанный, ещё и по F500-F503?
Думаю так: если у тебя есть некий бит порта, переключающий "стандарт<->ПРО", то в режиме стандарт выборку РОМ-диска надо выводить от F600, а в режиме ПРО на 28-31. А если такого бита нет, то надо обе эти выборки сложить по ИЛИ (кроме режима FullRAM когда по адресу F500-F5FF - ОЗУ)
Думаю так: если у тебя есть некий бит порта, переключающий "стандарт<->ПРО", то в режиме стандарт выборку РОМ-диска надо выводить от F600, а в режиме ПРО на 28-31. А если такого бита нет, то надо обе эти выборки сложить по ИЛИ (кроме режима FullRAM когда по адресу F500-F5FF - ОЗУ)
Есть оба сигнала в этой CPLDшке - это бит 7 порта 0x0A и бит 5 порта 0xFB, соответственно.
Получилось так ( активный уровень сигналов - "1"):
cs_ROM <= pmF5 or p28;
pmF5 - выборка портов 0xF500, блокируется в режиме "ПРО" и при FullRAM.
p28 - выборка по in/out, блокируется в режиме "стандарт".
По какому порту лучше делать переключение "банок" диска?
Закончил разводку питания. Одна перемычка - иначе трассу +5 тянуть далеко, не самый лучший вариант. Иначе на данный момент никак не провести :(
Под углом - разъём JTAG.
Питание везде с запасом, "ветками" по 0,5мм до потребителя (до CPLD - 0,3мм, шире уже не лезет :) ). По краям платы шины 2мм, как и на видео. "Общий" разведён полигоном с обеих сторон платы, с максимальным перекрытием для исключения узких мест для тока.
https://image.prntscr.com/image/cDit91wqSguAvbfmyTW6lQ.png
А JTAG разъём для прикола поставлен не под прямым углом?
А JTAG разъём для прикола поставлен не под прямым углом?
Так проще трассы вокруг выстроить :)
Ну и пока вариант не финальный, буду долго думать над улучшением.
- - - Добавлено - - -
Нужно было делать с скрин полупрозрачностью слоёв, вот оно:
https://image.prntscr.com/image/dK5m7KhHQbizjKI6L4MOfw.png
Вот тут лучше видно, почему я так сделал на данный момент ;)
Тут в теме я видел видеоадаптер, а как они стыкуются между собой, есть какая-то "материнская" плата?
Тут в теме я видел видеоадаптер, а как они стыкуются между собой, есть какая-то "материнская" плата?
Да, есть кросовая плата. К ней же и питание подводится. Вот здесь на фото можно увидеть. (https://pp.userapi.com/c851416/v851416328/7d71/vBAGWszNHVM.jpg) Только с диаметром под выводы питания промахнулся - пришлось напильником углы срезать :) Ну и на кросе проведены все сигналы, в том числе и не используемые сейчас, что бы потом там не паять вообще. Питание только одно - +5В. В принципе, хватило бы и 1 разъёма, но решил перестраховаться.
По процессорному модулю - стоит ли ставить буфер из АП6 на ОЗУ? Оно 8 битное, шина везде двунаправленная. По нагрузке на процессор получается 13 чипов на запись (6 - порты и память в видео, 5 чипов в процессорном, 2 CPLD в прочих модулях). С буфером - будет 10 чипов. 3 ПЗУ, которые RO, не считаю.
Переделал порты на схемный вариант (https://andreil.by/orion/cpu_ports_sch.png). Так же заказал собственно плату процессорного модуля и адаптер для подключения своей платы с циклоном - буду с ней "обкатывать" сам процессорный модуль, что бы не тратить циклы стирания-записи у финального чипа. Ну и надо же полноценно протестировать видео-модуль ;)
Схемный вариант пока с ошибками - их выявлю на днях только, как просимулирую...
andreil, немного не в тему, но всё же разреши задать вопрос. С переходом на новую версию Квартуса (у меня 13) я полностью потерялся как создать симуляцию сигналов с выводом на экран. Ну назначать сигналы для вывода симуляции как-то получается, а дальше никак.
HardWareMan
01.11.2018, 03:54
fifan, ModelSim спасёт гиганта мысли. Так же как и сам Кактус, поставляется бесплатная версия (с ограниченными возможностями).
andreil, немного не в тему, но всё же разреши задать вопрос. С переходом на новую версию Квартуса (у меня 13) я полностью потерялся как создать симуляцию сигналов с выводом на экран. Ну назначать сигналы для вывода симуляции как-то получается, а дальше никак.
Я делаю через Waveforms - там всё просто :)
PS: Сейчас на работе творится пздц, так что давно сильно нет продвижений. А сейчас и по вечерам/ночам/выходным продолжаем работать, в том числе и дома.
Сейчас вот сижу, пытаюсь развернуть образ одного сервера на другом, с заменой драйверов и прочего. А в это время у нас упёрли аппаратные ключи лицензии, затёрли софт завода. Благо есть бэкапы, но не 100%, что их развернём...
Так что в ближайшее время прогресса тут не будет.
Я не понял внутренний симулятор Квартуса не работает?
omercury
01.11.2018, 19:04
Я не понял внутренний симулятор Квартуса не работает?
Его больше нет.
Я это понял. В версии 13.1 симулятор не хочет симулировать серию 7000S. На одном из компьютеров установлена была версия 9.1 - там всё получилось.
HardWareMan
02.11.2018, 05:30
Я это понял. В версии 13.1 симулятор не хочет симулировать серию 7000S. На одном из компьютеров установлена была версия 9.1 - там всё получилось.
fifan, когда ты в первый раз запускаешь встроенный симулятор у 9.1SP2 он говорит, что в следующей версии встроенного симулятора больше не будет и пора двигать на ModelSim. Но технически данные, которые готовятся к моделсиму можно использовать и в некоторых других программах.
Пришли платы процессорного модуля и переходника (для подключения внешней платы с FPGA, для тестов прошивок и прочих модулей):
https://pp.userapi.com/c851228/v851228410/44c38/hizanZhCgrg.jpg
https://pp.userapi.com/c851228/v851228410/44c25/vYEwDfaqR5Q.jpg
- - - Добавлено - - -
Завтра начну их тестировать...
Фигня какая-то с ATF'кой видеовыхода - начала она "пороть чушь" =/
"Порезал" её прошивку до стандартного режима (VM0-VM4=0) и всё, кроме канала G принудительно в 0 сидит. И анализатором наблюдаю такую вот картинку:
https://image.prntscr.com/image/CEZyrW9vSsSjQbjC_GMLxA.png
По сигналам:
/bl - инверсный BLANK. То есть при "1" картинка выводится. Тут претензий нет.
P0 - 0-ой "пиксель". То есть сигнал с самого первого сдвигового регистра. Там всё ОК, работает нормально.
G - выход ATF'ки. И тут всё плохо - сигнал почти всегда в "1", хотя по логике должен "плясать" от P0. Частота дискретизации - 400МГц, провал на канале - 10нс, как раз быстродействие чипа.
Сразу после сборки (месяца 2 назад) проверял без процессорного модуля, в монохромном режиме, и всё работало =/ Причём работало не раз и достаточно долго - часа 2 точно.
Мог ли ATF'ку сжечь перегрузом по выходу?
Вот участок схемы одного из каналов цвета:
https://image.prntscr.com/image/EDfgz21sTCmTddN_6lHqqg.png
Запаяны именно такие номиналы. R/IR - выходы ATF'ки, размах почти 5В. VR - сразу на VGA.
Долго меня тут не было. Но работа она такая :)
В общем, раз в таком виде проект мало кому интересен (кроме меня и ещё 1-2 человек), то решил сделать полностью иначе.
Итак, за месяц соорудил плату на основе Cyclone IV, все детали кроме плат уже на руках, а сами платы уже в пути. Из "фарша":
ROM - 1 шт SST39VF1681, с возможностью "прошить" без перепаивания;
RAM - 2 шт CY7C1049DV33 (512К*8). Раздельные чипселекты и данные;
Видео - 18-ти битный DAC (по 6 бит на канал). ADV7123, VGA;
Для подключения внешних устройств (в том числе и 5-ти вольтовых) выполнен разъём с преобразователями уровней (TXB0108DQSR) - 2 ряда по 32 контакта, краевой и обычный;
FPGA - EP4CE6F17, корпус 256-FBGA;
Опционально - STM32F407. Выполняет роль управляющего чипа при поддержке в прошивке FPGA, служит интерфейсом между microSD, USB, прочей периферией и FPGA.
В системном разъёме все сигналы подключены к FPGA. Если какие-либо пины требуется использовать как питание - разрезается перемычка на соответствующем джампере и один его контакт припаивается к "пятакам" питания , расположенным по бокам от разъёма.
Когда будет готова эта плата, буду делать вторую плату, подключаемую через 2 шлейфа. Там пока что планируются:
HDMI transmitter - подключается вместо DAC на основной плате. Опционально;
Ethernet. Подключается к STM на основной плате;
Oled display + кнопки - для управления системой. Подключается к STM на основной плате.
Уже сейчас в качестве теста реализовал вывод видео разрешением 1920*1080@60Hz. Для Ориона - с удвоением пикселей, процессор при обращении к памяти не тормозится, доступны все 4 плоскости видео. Тактовую частоту системы поднял до 75МГц, при этом процессор (в зависимости от состояния портов) тактируется частотами 9.375, 4.6875 или 2.34375МГц.
Габариты платы и компоновка подгонялись под конкретный корпус (купленный на Али).
Картинка из теста памяти в видеорежиме FullHD. (https://pp.userapi.com/c849228/v849228460/131421/UPicGirRFfk.jpg)
Компоновка платы: верх (https://pp.userapi.com/c844617/v844617460/1ae0e5/O8CQ8G4xMhQ.jpg) низ (https://pp.userapi.com/c844617/v844617460/1ae0ee/A_hZWFzMcvY.jpg). Рассчитано на то, что "верх" будет через термоинтерфейс полностью посажен на алюминиевый корпус для отвода тепла.
PS: Основная плата 4-х слойная, иначе не развести FPGA.
PPS: Sayonara~
PPPS: Проект задумывался как подарок отцу, который когда-то в детстве познакомил меня с Орионом. С этого и начался мой путь в электронику :)
LeoN65816
18.02.2019, 22:43
В общем, раз в таком виде проект мало кому интересен (кроме меня и ещё 1-2 человек),
Дык, с огромнейшим интересом ждем новостей в теме, а тут так на тебе, как кардинально рубанул... ;)
PS: Основная плата 4-х слойная, иначе не развести FPGA.
Эдак ты суро-о-о-ово к пациенту в тыл подошел... ;) А может модуль (https://www.waveshare.com/product/fpga-tools/altera/core.htm) использовать было бы проще и удобнее?
omercury
21.02.2019, 09:51
А может модуль (https://www.waveshare.com/product/fpga-tools/altera/core.htm) использовать было бы проще и удобнее?
За эти деньги есть варианты и поинтересней.
https://ru.aliexpress.com/store/product/QMTECH-Altera-Intel-FPGA-Core-Board-Cyclone-IV-CycloneIV-EP4CE15-SDRAM-Development-Board/4486047_32949281189.html?spm=a2g0v.12010615.814835 6.2.1d711c07rC5EfI
Последняя пришла за 10 дней.
ЗЫ
Ух ты, как у них ассортимент-то обеднел...
Эдак ты суро-о-о-ово к пациенту в тыл подошел... ;) А может модуль (https://www.waveshare.com/product/fpga-tools/altera/core.htm) использовать было бы проще и удобнее?
Этот проект будет так же в моём портфолио - готовлюсь к смене работы на всякий. Так что приходится и в крайности бросаться ;)
А готовых мелких платок у меня и так хватает. Но к ним надо много "обвеса" приделывать, а тут - все "хотелки" в 1 корпусе. Заодно потренируюсь и в разводке ВЧ цепей - при выводе FullHD через HDMI там будет клок 150МГц на плате.
А с "классическим" вариантом на CPLD и GAL пока - пока отложил его в сторону, там много "магии" из-за задержек, не всё учёл, придётся некоторые цепи потом искусственно замедлять.
А между делом первая плата полностью собрана и частично проверена - STM32 работает, FPGA работает. Остальное - уже после допиливания прошивки. А пока - подогнать корпус под плату, выпилить окна под разъёмы.
Фото 1 (https://pp.userapi.com/c855416/v855416174/1165c/GTnA_L8HLEU.jpg)
Фото 2 (https://pp.userapi.com/c855416/v855416174/11666/qu3JZaQ7sVA.jpg)
Корпус - всё, что есть в данной версии платы, выведено наружу. Остальное - со второй платы, которая пока в разработке и будет рисоваться по мере работы над проектом.
Фото 1 (https://pp.userapi.com/c849432/v849432231/157980/S4PyxaVHDuY.jpg)
Фото 2 (https://pp.userapi.com/c849432/v849432231/15798a/AcpDweEvW5E.jpg)
Фото 3 (https://pp.userapi.com/c849432/v849432231/157998/bJXYe_Fijjs.jpg)
Прошивка уже подогнана под реалии данной платы и пилится дальше. Первое же улучшение - стабильные тайминги памяти. На плате DE1-SoC память висела на разъёме GPIO, там каждый сигнал подключён к защитным диодам, да и линии длинные - в итоге пришлось тайминги растягивать для стабильной работы. А тут - всё укладывается в рамки ДШ с учётом задержи на самой FPGA, не более того.
LeoN65816
31.03.2019, 08:02
andreil, после "смены концепции" (https://zx-pk.ru/threads/28763-eshche-odin-orion-na-plis.html?p=1000021&viewfull=1#post1000021) возникли вопросы:
1. Проц не натуральный, а софтядро?
2. В угоду пиксельклоку ты перешел на оконный шаринг памяти, отказавшись от двухпортовки?
3. В угоду пиксельклоку у тебя такт 2.34375 МГц (и кратные турбы), а не 2.5 МГц (и кратные)? А как же совместимость? Особенно минимальная скорострельность при работе с КНГМД?...
OrionExt
31.03.2019, 17:13
Прикольный Орион-Майнер. Надо еще тыщю таких))) И может потечет прибыль.
andreil, после "смены концепции" (https://zx-pk.ru/threads/28763-eshche-odin-orion-na-plis.html?p=1000021&viewfull=1#post1000021) возникли вопросы:
1. Проц не натуральный, а софтядро?
2. В угоду пиксельклоку ты перешел на оконный шаринг памяти, отказавшись от двухпортовки?
3. В угоду пиксельклоку у тебя такт 2.34375 МГц (и кратные турбы), а не 2.5 МГц (и кратные)? А как же совместимость? Особенно минимальная скорострельность при работе с КНГМД?...
1) Да, но на второй платке можно и реальный проц разместить - шина в 64 сигнала на основном разъёме позволит такое сделать.
2) Да. При пиксельклоке в 150МГц с удвоением пикселей очень внатяг для 4-х плоскостей, но работает :)
3) На базовой частоте разница всего 6,6(6)%. ИМХО - не столь великая разница. КНГМД будет 100% эмулироваться на СТМке, поэтому не задавался вопросом таймингов и вейтов.
- - - Добавлено - - -
Всего 3 разрешения сейчас работают (последнее - с удвоением пикселей):
640x480, 60Hz
720x400, 70Hz
1920x1080, 760Hz
Разрешения так же будут переключаться с СТМки - там будет организовано системное меню, выводимое оверлеем поверх основной картинки. На это меню уйдёт приличная часть встроенной памяти.
Error404
01.04.2019, 13:27
1) Да, но на второй платке можно и реальный проц разместить - шина в 64 сигнала на основном разъёме позволит такое сделать.
2) Да. При пиксельклоке в 150МГц с удвоением пикселей очень внатяг для 4-х плоскостей, но работает :)
3) На базовой частоте разница всего 6,6(6)%. ИМХО - не столь великая разница. КНГМД будет 100% эмулироваться на СТМке, поэтому не задавался вопросом таймингов и вейтов.
- - - Добавлено - - -
Всего 3 разрешения сейчас работают (последнее - с удвоением пикселей):
640x480, 60Hz
720x400, 70Hz
1920x1080, 760Hz
Разрешения так же будут переключаться с СТМки - там будет организовано системное меню, выводимое оверлеем поверх основной картинки. На это меню уйдёт приличная часть встроенной памяти.
Если к режиму 3 (где 1920x1080 и орионовский экран удваивается по осям) от которого отказываться нельзя ибо на Орионе ПРО есть 512х256, добавить четвертый режим где в 1920x1080 орионовский экран уже учетверяется по осям, то туда идеально вписывается орионовсикй режим 480х256 (480х4=1920 и 256х4=1024)
Если к режиму 3 (где 1920x1080 и орионовский экран удваивается по осям) от которого отказываться нельзя ибо на Орионе ПРО есть 512х256, добавить четвертый режим где в 1920x1080 орионовский экран уже учетверяется по осям, то туда идеально вписывается орионовсикй режим 480х256 (480х4=1920 и 256х4=1024)
Всё можно сделать, но позже :) Пока я под реалии платы подгоняю тайминги памяти, потом займусь уже связыванием с СТМкой, что бы можно было управлять режимами. Но это дело далеко не 1 дня всё-таки...
Через СТМку у меня будет полное управление, потому без неё никак - там и прошивка FPGA (вернее, её конф-ПЗУ) и оверлей, и управление режимами/переключателями самого компьютера.
Разработка потихоньку продвигается - начал писать программную часть для STM32. Пока что - тестирую оверлей. Фото теста (VK). (https://pp.userapi.com/c854216/v854216559/254e6/1x38CNHeSSM.jpg)
Параметры оверлея - 256*256, монохром. Выводится поверх имеющегося изображения, замещая собой старшие биты одного из каналов цвета (в данном случае - зелёный). Буфер хранится в FPGA, периодически обновляемом микроконтроллером.
На оверлее будут выводиться все меню контроллера - в противном случае пришлось бы как-то умещать на мелком-мелком дисплейчике, что не очень удобно. А так - и информацию можно выводить, и по "железу" ничего не изменилось.
Меню будет доступно по сочетаниям клавиш подключаемой клавиатуры, нажатия кнопок с которой так же будут отправляться и в сам ПК.
А принцип затирания изображения какой? Меня интересует копируется ли куда-то затираемое изображение, ведь потом нужно вернуть все назад после свёртывания меню.
balu_dark
19.04.2019, 10:11
Ну так дополнительный же фрейм буфер ! В ФПГА!
Когда нужен оверлей - будет идти сквозь него , а когда не нужен - напрямую из компа. Поэтому и не нужно хранить ничего из замещаемого - оно автоматом восстанавливается каждый кадр из компа.
А принцип затирания изображения какой? Меня интересует копируется ли куда-то затираемое изображение, ведь потом нужно вернуть все назад после свёртывания меню.
Вот кусок вывода:
R(5) <= RR;
G(5) <= (GG and (not stm_ov_hint)) or (stm_ov_preg(7) and stm_ov_hint);
B(5) <= BB;
R(4) <= RR and II;
G(4) <= (GG and II and (not stm_ov_hint)) or (stm_ov_preg(7) and stm_ov_hint);
B(4) <= BB and II;
R(3 downto 0) <= (others => RR);
G(3 downto 0) <= (others => GG);
B(3 downto 0) <= (others => BB);
stm_ov_preg - такой же сдвиговый регистр, как и для остальных цветов в оригинале.
Error404
19.04.2019, 18:48
Только надо не в зеленом замещать, а в каком-то другом. В Орионе по умолчанию монохром, и он черно-зеленый, поэтому зеленое меню поверх зеленого изображения будет как-то не кузяво. Оно имело бы смысл если бы видеовыход был однобитным (черно-зеленым), но у нас же как минимум аппаратно есть RGBI (не зависимо от того что гонит Орион). Или я недопонял идею автора.
- - - Добавлено - - -
Синий для меню ИМХО был бы норм (если план меню иметь однобитным), красный слишком алармичен. :)
Только надо не в зеленом замещать, а в каком-то другом. В Орионе по умолчанию монохром, и он черно-зеленый, поэтому зеленое меню поверх зеленого изображения будет как-то не кузяво. Оно имело бы смысл если бы видеовыход был однобитным (черно-зеленым), но у нас же как минимум аппаратно есть RGBI (не зависимо от того что гонит Орион). Или я недопонял идею автора.
- - - Добавлено - - -
Синий для меню ИМХО был бы норм (если план меню иметь однобитным), красный слишком алармичен. :)
Всё будет меняться ещё много раз в этих местах, чую я ;)
Пока что занялся перетрассировкой платы - сильно много косяков было, в том числе в библиотеке KiCAD (https://github.com/KiCad/kicad-symbols/issues/1764).
До конца месяца закончу трассировку и отдам на производство, что бы к концу отпуска платы были на руках ;)
И да - там будет хватать мелочёвки (резисторы/конденсаторы - 0805 все, кроме 4-х):
https://pp.userapi.com/c844521/v844521455/1f801f/zbwfr2schWM.jpg
Это джамперы, которыми можно забайпасить интерфейсные чипы, если они не нужны. Шаг выводов чипа - 0,65мм :) Зато сразу полноценный двунаправленный преобразователь уровней (http://www.ti.com/lit/ds/symlink/txb0108.pdf) - можно подключить хоть реальный Z80 с обвесом :)
Плата почти готова и на днях отправится на производство...
https://pp.userapi.com/c849332/v849332468/1737b3/R9YQWUHQSw4.jpg
https://pp.userapi.com/c849332/v849332468/1737bc/8Gs3uLmmOLQ.jpg
balu_dark
25.04.2019, 13:28
Боковые коннектора IDC не сильно близко к краям ? Не будет ли в люминиевом корпусе цепляться за конструктивы ? И нормально ли сядут платы сверху - чтобы не цеплять нигде?
Боковые коннектора IDC не сильно близко к краям ? Не будет ли в люминиевом корпусе цепляться за конструктивы ? И нормально ли сядут платы сверху - чтобы не цеплять нигде?
Пазы корпуса для платы - сверху и снизу, если смотреть по скринам. Бока платы упираются в стенки, там ничего не выступает в корпусе. Да и глубина пазов - около 2мм всего.
Готова вторая версия платы, с учётом ошибок и недоработок.
Основное:
Исправлена распиновка интерфейсных чипов;
Добавлена пользовательская кнопка у FPGA;
Добавлены 3 светодиода на FPGA;
Увеличен типоразмер компонентов - 99% пассивки 0805, вместо 0402, намного легче паять :)
https://pp.userapi.com/c851420/v851420605/129c17/rKqjKJW11e4.jpg
omercury
24.05.2019, 11:11
с учётом ошибок и недоработок
А где у него зад и где перед?
Ибо по разъёмам неочевидно...
А где у него зад и где перед?
Ибо по разъёмам неочевидно...
Питание - сзади, остальные разъёмы спереди. А цанговые разъёмы - для подключения доп. плат, "бутербродом" ;)
OrionExt
24.05.2019, 17:46
andreil, вот год, вы потратили на модернизацию схемы ОРИОН. И так не доперли как там все работает. Теперь выкатили/майнер (там мощи на 1К ОРИОН-ов) эмульгатор (мулятор – более нежно). И чего?
Уж простите за уважительный тон. Раньше я выражался не только ВЫ. Подгорало от …
Но тем неимение подгороть у меня меньше не стало, гипер активный после 15лет, к товарищам которые несут пургу.
Как то так.
balu_dark
24.05.2019, 17:55
Ну а в чем подвох то ? тема этого топика какая ? перечитайте пожалуйста.
OrionExt
24.05.2019, 18:02
Да забанили меня нафиг от сладкий речей этого таварища.
Товарищь склонен все кидать в печку, как любой новоиспеченный мозг подвержен интернетам. А что такое синхронная схема, думаю даже на своем майнере не понял
omercury
24.05.2019, 19:26
Питание - сзади, остальные разъёмы спереди. А цанговые разъёмы - для подключения доп. плат, "бутербродом" ;)
А зачем спереди разъёмы клавомыши и видеовыход?
Не имеет ли смысл поменять местами разъём питания и сокет SD-карты и развернуть всё это передом назад?
Было бы логичнее, ЯТД.
Кнопу вкл/выкл, опять же, добавить не помешает.
А зачем спереди разъёмы клавомыши и видеовыход?
Не имеет ли смысл поменять местами разъём питания и сокет SD-карты и развернуть всё это передом назад?
Было бы логичнее, ЯТД.
Кнопу вкл/выкл, опять же, добавить не помешает.
1. Думал вообще всё на "лице" разместить, что бы в корпусе меньше пилить, но не поместилось;
2. USB может в любой момент понадобиться, потому он на лицевой стороне 100%, как и uSD;
3. VGA - да, логичнее не задней панели, но "так вышло" -_-;
4. Кнопка уже на БП только если. Для сброса всей схемы есть кнопка на лицевой панели - по факту сброс СТМки, которая на FPGA пошлёт сигнал сброса.
- - - Добавлено - - -
andreil, вот год, вы потратили на модернизацию схемы ОРИОН. И так не доперли как там все работает. Теперь выкатили/майнер (там мощи на 1К ОРИОН-ов) эмульгатор (мулятор – более нежно). И чего?
Уж простите за уважительный тон. Раньше я выражался не только ВЫ. Подгорало от …
Но тем неимение подгороть у меня меньше не стало, гипер активный после 15лет, к товарищам которые несут пургу.
Как то так.
Непосредственно к Ориону эта плата имеет уже не такое прямое отношение. Это только одно из возможных использований, не более того.
И да - это уже на публику не пойдёт, так что "всё моё, ничего не слышу".
- - - Добавлено - - -
А что такое синхронная схема, думаю даже на своем майнере не понял
Уж поверьте, по этой части там всё более чем в порядке, хотя на данный момент логика работает только частично - только для теста хардвари после пайки.
Участков без клока мало - самым большим является формирователь видео, где синхронность уже лишняя.
PS: Всё, ухожу в закат, может через полгода и вернусь, как перееду ;)
OrionExt
24.05.2019, 22:18
А так хорошо начинал, а по факту даже РК-86 не смог ….
- - - Добавлено - - -
Вот же блин жизнь. Нежданчик вылупился и ушел в закат, а я тут с банном и бананом остался :D
omercury
24.05.2019, 22:38
Участков без клока мало - самым большим является формирователь видео, где синхронность уже лишняя.
Чевой?
:v2_eek:
Может наоборот?
Error404
25.05.2019, 11:03
а я тут с банном и бананом остался :D
И это не предел если и дальше продолжать троллить участников форума. :)
Чевой?
:v2_eek:
Может наоборот?
Я про формирование из уже готовых пикселей:
ps <= ps1 when (video_mode(3) = '1') else ps2;
-- video modes manage
vm14 <= video_mode(1) or video_mode(4);
vm12 <= not (video_mode(1) and video_mode(2) and (not video_mode(4)));
vm_ps <= vm12 or (not vblank_n);
vm_st <= vm14 or (not vblank_n);
vm_pr <= not ((not vblank_n) or (vm14 and vm12));
sel16 <= (not vblank_n) or (not video_mode(4));
-- video data switchers
RR <= (video_mode(0) and pxls(0)) when ((vm_st='0') and (pxls(1)='0'))
else (not pxls(0)) when ((vm_st='0') and (pxls(1)='1'))
else ps(6) when ((vm_ps='0') and ((pxls(0)='0')))
else ps(2) when ((vm_ps='0') and ((pxls(0)='1')))
else pxls(2) when ((vm_pr='0') and ((sel16='0')))
else '0';
GG <= (video_mode(0) or pxls(0)) when ((vm_st='0') and (pxls(1)='0'))
else '0' when ((vm_st='0') and (pxls(1)='1'))
else ps(5) when ((vm_ps='0') and ((pxls(0)='0')))
else ps(1) when ((vm_ps='0') and ((pxls(0)='1')))
else pxls(0) when ((vm_pr='0') and ((sel16='0')))
else '0';
BB <= (video_mode(0) and (not pxls(0))) when ((vm_st='0') and (pxls(1)='0'))
else pxls(0) when ((vm_st='0') and (pxls(1)='1'))
else ps(4) when ((vm_ps='0') and ((pxls(0)='0')))
else ps(0) when ((vm_ps='0') and ((pxls(0)='1')))
else pxls(3) when ((vm_pr='0') and ((sel16='0')))
else '0';
II <= '0' when ((vm_st='0') and (pxls(1)='0'))
else '0' when ((vm_st='0') and (pxls(1)='1'))
else ps(7) when ((vm_ps='0') and ((pxls(0)='0')))
else ps(3) when ((vm_ps='0') and ((pxls(0)='1')))
else pxls(1) when ((vm_pr='0') and ((sel16='0')))
else '0';
Здесь - 99% асинхронности. Это тот участок, который в оригинале был реализован на КП12/КП11 и мелкой логике.
Решил всё-таки вернуться к железу, благо время появилось, спустя столько-то времени.
Поднял платку 18-ого года, нарастил "мясо" для тестов - на платке с STM32 выполнил генератор сигналов для системной шины с терминальным интерфейсом.
Пока что смог проверить только формирование видеосигнала - некоторые режимы некорректно работают, надо смотреть прошивку PLD'шки, формирующую выходной сигнал.
Результат на экране, 4-х битный режим. (https://yadi.sk/i/xi7DocCSAJgD-g)
Вид стенда. (https://yadi.sk/i/SscgGsy0tnjQWQ)
LeoN65816
29.04.2020, 05:13
Взглянув на твою фотку (https://yadi.sk/i/iXxo5OwBAwT7tA), категорически рекомендую обратить внимание на "подводный камешек" (https://zx-pk.ru/threads/28423-dvukhportovaya-pamyat.html?p=1059084&viewfull=1#post1059084).
Взглянув на твою фотку (https://yadi.sk/i/iXxo5OwBAwT7tA), категорически рекомендую обратить внимание на "подводный камешек" (https://zx-pk.ru/threads/28423-dvukhportovaya-pamyat.html?p=1059084&viewfull=1#post1059084).
Спасибо, возможно и придётся изменения вносить. Но некуда сигнал завести при текущей структуре - все ноги GAL'ки, формирующей стробы на защёлкивание данных из памяти, заняты...
LeoN65816
04.05.2020, 00:47
Но некуда сигнал завести при текущей структуре - все ноги GAL'ки, формирующей стробы на защёлкивание данных из памяти, заняты...
Стоп! Ты про какой сигнал говоришь?
А галки у тебя с какой маркировкой по скорости, на сколько нс?
Стоп! Ты про какой сигнал говоришь?
По логике - надо пин BUSY завести на GAL'ку и в зависимости от её состояния разрешать защёлкивание видеоданных. Ну и сам процесс делать дважды, для перестраховки. По схеме - это ИР'ки, которые стоят между памятью и сдвиговыми регистрами видео.
А галки у тебя с какой маркировкой по скорости, на сколько нс?
ATF22V10C-15PC
LeoN65816
07.05.2020, 00:49
По логике - надо пин BUSY завести на GAL'ку и в зависимости от её состояния разрешать защёлкивание видеоданных. Ну и сам процесс делать дважды, для перестраховки. По схеме - это ИР'ки, которые стоят между памятью и сдвиговыми регистрами видео.
Блин, andreil, что же ты "на ровном месте" проблему-то создал?
При чём здесь разрешение защёлкивания видеоданных??? :v2_dizzy_facepalm: У тебя на правом порту сидит видеоконтроллер, он только читает данные, и достоверные данные ему доступны всегда! Здесь все чики-пуки.
А вот на левом порту у тебя сидит процик, и он не только читает, но и пишет данные в видеопамять. И вот здесь при записи в те же адреса, где в данный момент идёт сканирование видеоконтроллером, возможны артефакты на экране из-за асинхронизма одновременного доступа к памяти двух потребителей. Арбитр просто блокирует запись, а когда коллизия по адресам устраняется, то происходит не совсем корректная запись по не совсем корректным адресам. AlexBel натурально это обнаружил в своём проекте. И я тоже в своём. У тебя же просто еще нет записи... Будь уверен - будет абсолютно так же. Если же не веришь - ты сначала запусти ориончик с тестом памяти, а потом и последуй совету:
Обходится этот "подводный камешек" элементарно - на вход Master/Slave подать постоянный нолик, а на вход левого Busy подать постоянную единичку.
Ты, наверное, сговорился с MM - ничего не видите ни в даташитах, ни в аппликухах... ;)
ATF22V10C-15PC
А вот это уже я лопухнулся... На фотке же видно, что 15 нс.
Просто вполне доступны и 7 нс чипы, и в видяхе они особенно были бы уместны.
Да пребудет с тобой Сила! ;)
Блин, andreil, что же ты "на ровном месте" проблему-то создал?
При чём здесь разрешение защёлкивания видеоданных??? :v2_dizzy_facepalm: У тебя на правом порту сидит видеоконтроллер, он только читает данные, и достоверные данные ему доступны всегда! Здесь все чики-пуки.
А вот на левом порту у тебя сидит процик, и он не только читает, но и пишет данные в видеопамять. И вот здесь при записи в те же адреса, где в данный момент идёт сканирование видеоконтроллером, возможны артефакты на экране из-за асинхронизма одновременного доступа к памяти двух потребителей. Арбитр просто блокирует запись, а когда коллизия по адресам устраняется, то происходит не совсем корректная запись по не совсем корректным адресам. AlexBel натурально это обнаружил в своём проекте. И я тоже в своём. У тебя же просто еще нет записи... Будь уверен - будет абсолютно так же. Если же не веришь - ты сначала запусти ориончик с тестом памяти, а потом и последуй совету:
Обходится этот "подводный камешек" элементарно - на вход Master/Slave подать постоянный нолик, а на вход левого Busy подать постоянную единичку.
Ты, наверное, сговорился с MM - ничего не видите ни в даташитах, ни в аппликухах... ;)
А вот это уже я лопухнулся... На фотке же видно, что 15 нс.
Просто вполне доступны и 7 нс чипы, и в видяхе они особенно были бы уместны.
Да пребудет с тобой Сила! ;)
Да, сам туплю порой. Тяжело вспоминать, что там и как устроено было :)
Я пока вместо процессора использую костыль для записи в видеопамять - на фото стенда это всё есть. Пока что хотя бы проверить логику работы именно видео, потому что могут быть разбежки по таймингам на пиксель-другой.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot