Именно что логическая схема устройства (а не транзисторная) и позволяет понимать всю логику работы и перекладывать в таргет этот ваш повторяемый косвенный эффект.
Вид для печати
Именно что логическая схема устройства (а не транзисторная) и позволяет понимать всю логику работы и перекладывать в таргет этот ваш повторяемый косвенный эффект.
Что в итоге получилось:
- убрана зависимость от фазы F1
- фаза F2 переведена на фронт, единая частота для всей системы
- добавлена шина Wishbone
- сохранение таймингов зависит от реализации внешней памяти. При чтении модель выставляет адрес на шину только в такте Т2, если память успевает выдать данные за такт то оригинальные таминги сохраняются. В моей примерной системе память регистровая, она умеет только за два такта, поэтому чтение всегда растянуто на один такт. При чтении используется бывший вход READY. При записи адрес выставляется также в такте Т2, но поскольку строб записи по факту будет в T3 тут не так критично. Торможение при записи (если вдруг внешний агент не готов) осуществляется общим разрешением клока (тот что был F2). Как ни странно, ресурсов это не забирает, что с разрешением, что без - практически одинаково
- Результаты на плате DE0 (Cyclone EP3C16F484C6):
112MHz clock, 814 LUTs and 296 flip-flops при оптимизации по скорости
94 MHz clock, 662 LUTs and 187 flip-flops при оптимизации по размеру
- все это можно найти на гитхабе
BarsMonster написал в блоге статью про реверс, это дело немножко оттвиттили и отфейсбучили, теперь в теме некоторый наплыв гостей, в-основном, англоязычных. Я попытался часть своих постов перевести на английский при помощи гугля, убедился что слово "дралоскоп" не переводится, и вообще, в постах у меня изрядно идиом :biggrin:
ну - драть от слова копировать (но типа не законно ) вот и назови его - копископом :) или свето копировальным аппаратом. Это если я правильно понял о чем идет речь. У нас дралоскопом( местное название было дробоскоп - почему не знаю.) Это был стеклянный стол с лампой снизу. На стол клался чертеж, сверху чистый ватман либо калька и все обводилось.
Этим способом копировали чертежи и задания по черчению у отличников.
Vslav,
Поздравляю с формальным релизом!!
В верилог модели есть несколько закоментированых кусков. Думаю стоит их убрать, раз уж модель пошла в мир, чтоб не вызывало недопонимания у людей. :)
Еще есть маленькая ошибка в двух одинаковых коментариях "no in original 8080", надо заменить на "absent in original 8080".
Супер ! Мегатруд!
кстати, у нас в институте упомянутый светокопировальный девайс называли "козлотрон" ;)
Vslav,
Есть вопрос. На сайте у BarsMonster указано, что транзисторов 4758 и это число уже успело попасть на страницу википедии, однако в схеме транзисторов 4756. Очень интересно узнать, что это за 2 загадочных транзистора? :)
Вы плохо посчитали транзисторы, надо пересчитать еще раз, их ровно 4758 :)
Если серьезно, то при написании модели было обнаружено два транзистора, пропущенных при векторизации:
T4757 - добавлен в районе T733
T4758 - добавлен в районе T1552
Автоматически перенумеровать по ЕСКД, чтобы нумерация была сплошная - несложно, но в верилоге кое-где встречаются цепи и регистры с номерами транзисторов по текущей нумерации, поэтому я ее сознательно портить не стал. Может быть перенумерую, когда буду делать версию 2.0 - с единой тактовой, вишбоном и удобной турбосхемой.
Update: а наплыв гостей в тему все растет :)
Update2: прикольно, новый рекорд всего форума сегодня, правда, после обновления версии движка, но все равно приятно :)
Update3: ларчик открывается просто
Спасибо большое за развёрнутый ответ.
Жаль, что в PDF файле схемы не получается провести текстовый поиск. :)
Треду и года нет, а он уже практически подытожен. Это круто!
Если взять к примеру в корпусе SOT23 посадочное место PCB 4.5мм х 4.6мм.
5k транзисторов x $0.1/шт = $500 и это только процессор, Cmax которого с трудом дотянет 200kHz???. Интересно, сколько это будет кушать W?
Уже делали:
Проектирование собственного компьютера
Строим декоративный транзисторный компьютер
Решили, что лучше и дешевле уже на FPGA :)
Вот если сделать ещё soft-core ez80 по типу NextZ80 для новых FPGA проектов под Unix, было-бы интересней. Хотя, кому что... :)
http://www.righto.com/search/label/8085
прикольные тексты с описаниями z80 8085, классно офрмленые
Угу, расковырять процессор мало - надо еще популярно это дело подать :)
580ВМ80А - это был побочный проект, перед заходом на 1801ВМ1, поэтому он так получился "бегом-бегом". По ВМ1 пишется подробный документ, но он не совсем в популярной форме, а "вкусняшки" по реверсу я краткими постами в соответствующей ветке выкладываю.
Нефедов А.В., автор цикла справочников, "Интегрнальные микросхемы и их зарубежные аналоги" видимо имел доступ к проектной документации по 580-й серии. В своем справочнике он указал, что в КР580ВМ80А 4750 интегральных элементов. :)
Вот скан страницы справочника с этой информацией Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги. Том 6.
Там же можно найти информацию по количеству транзисторов в остальных микросхемах серии.
Сегодня выделил время на ВМ80. Исправил некоторые найденные косяки, запилил еще несколько узлов. Примерный прогресс:
http://savepic.ru/7513799.png
Слева заглушки несуществующих цепей (приходящих с других листов). Покрытие первого листа (закрашенное - реализовано и проверено):
http://savepic.ru/7506631.jpg
Крута! А в чем рисуется и проверяется?
И картинка не масштабируется по клику :)
Да все в кактусе. Не масштабируется, да, но пока и не надо. По завершению, когда модель будет работоспособна, я попробую сделать оптимизацию (есть несколько потенциальных узлов) и потом проект ляжет здесь, для всех желающих. Ну а позже, можно будет попробовать переложить его на верилог, я думаю он сильно упроститься относительно первоначального.
Вот и закончился первый лист, за исключением 3х маленьких узлов, которые я пока не отследил куда идут, хочу их в качестве оптимизации переместить поближе к месту назначения. Принялся, как и обещал, за 3й, где регистр инструкций и дешифраторы.
Итак, известно, что внутренняя шина данных у процессора двунаправленная, в первом листе для буфера внешней шины данных используются 2 сигнала управления: nDBIN_PIN и nDB_ENA. Первый разрешает проброс внешних сигналов с ножек на внутреннюю шину, а второй наоборот включает буферы с внутренней шины на внешние ножки. Так же, процессор использует емкость внутренней шины данных для временного запоминания, об этом, кстати, мало где говорится, но в одном из советских справочниках по ВМ80 на блок-схеме показан некий "Bus precharge", эта блок-схема была найдена пользователями соседнего NedoPC. Так вот, на этой схеме он находится на 4й странице:
http://savepic.su/5800364.png
Накачка шины включается всегда, кроме состояния сброса и записи в такте Т3, синхронно по F1. К чему я это? А вот к чему. Регистр инструкций имеет следующую схему управления:
http://savepic.su/5788079.png
Сигнал F2 проходит на регистр только либо в такте Т3 машинного цикла М1, либо в момент сброса. А во время сброса накачка шины запрещена, т.е. там 0. Входы и выходы так же неактивны. Следует ли рассматривать это явление как занесение 00H в регистр инструкций (сброс IR)? Я помню вроде есть требования на период сигнала сброса, имеет ли к нему отношение сама емкость внутренней шины?
В любом случае, регистр инструкций позже все равно запишет новое действующее значение в такте Т3 машинного цикла М1. А запись NOPа по сбросу, я предполагаю, нужен для приведение остальных схем в известное состояние не пробрасывая сам сигнал сброса по всей схеме и усложняя ее. Например для АЛУ, хотя я его еще не разбирал, он пойдет следующим листом.
---------- Post added at 17:05 ---------- Previous post was at 15:50 ----------
А вот и первое научное объяснение первому недокументированному опкоду:
http://savepic.su/5774759.png
Все потому, что не учитывается 1 бит при дешифрации:
http://savepic.su/5819814.png
Логический эквивалент:
http://savepic.su/5818790.png
---------- Post added at 17:11 ---------- Previous post was at 17:05 ----------
То же самое у CALL:
http://savepic.su/5806502.png
http://savepic.su/5793190.png
http://savepic.su/5805478.png
---------- Post added at 17:16 ---------- Previous post was at 17:11 ----------
А вот и NOPы!
http://savepic.su/5779878.png
http://savepic.su/5773734.png
http://savepic.su/5827001.png
---------- Post added at 17:29 ---------- Previous post was at 17:16 ----------
А вот так элегантно "вырезан" опкод 76H, чтобы не вызывать бессмысленную команду MOV M,M и заменить ее на HLT.
http://savepic.su/5797304.png
http://savepic.su/5785016.png
---------- Post added at 17:37 ---------- Previous post was at 17:29 ----------
Вот и JMP:
http://savepic.su/5782971.png
http://savepic.su/5790139.png
http://savepic.su/5768635.png
---------- Post added at 18:11 ---------- Previous post was at 17:37 ----------
Обнаружены дублирующие куски схемы. На схеме сигналы помечены как, например, ID_OPA/ID_OPAX, ID_OPI/ID_OPIX. Даже есть ID_HLT/ID_HLTX. Я не знаю, зачем эти повторы, единственное что приходит на ум это то, что они находятся в разных местах кристалла, и добавить еще один элемент ИЛИ-НЕ проще чем тянуть провод. Так как сейчас перевод "влоб", то я их оставлю, а в будущем постараюсь сократить.
Текущий прогресс:
http://savepic.su/5809611.png
Заполнение третьего листа:
http://savepic.ru/7561600.jpg
Регистр инструкций, 4 матрицы. Они замкнули практически полностью первый лист (слева на первом листе заглушек значительно поубавилось). Если закончить 3й лист полностью, то заглушки уйдут совсем. Останется только АЛУ на 2м и регистровый файл на четвертом.
---------- Post added at 20:41 ---------- Previous post was at 20:15 ----------
А действительно. Симуляция текущей схемы показывает, что генерация сброса порождает цикл чтения NOP без генерации внешних сигналов управления, причем такт Т1 растягивается на все время действия сигнала сброса:
http://savepic.su/5830092.png
Вполне логичное решение для приведение процессора во вменяемое состояние.
Нашел фотографии литографических масок для Intel 8080.
Вытянул с сайта полноразмерные картинки. Качество не самое плохое, так что надеюсь будет интересно и полезно. А может кто-то и сравнение с ВМ80 сделает.
Вложение 53313
Вложение 53314
Вложение 53315
Маски прикольные, несмотря на невысокое разрешение вполне можно отвреверсить процессор. От ВМ80А топология i8080A очевидно отличается, общее расположение блоков одинаково, часть блоков очень похожи. Не совсем близнецы.
Прогресс 3го листа:
http://savepic.ru/8275290.jpg
Очень интересная и логичная затея: ВМ80 формирует свое слово состояния, запоминая его в отдельном регистре на весь машинный цикл, а затем использует его биты для управления внутренней логикой. Т.е., само по себе слово состояния всегда есть в любом процессоре, просто здесь его выводят наружу чтобы не требовалось угадывать мысли процессора.
Так же обнаружил мультиплексор бит 0-2/3-5, которые участвуют не только в выборе номера регистра, но еще и номера регистровой пары. Кстати, в самом мультиплексоре стоит отдельный 3NOR, который активирует аккумулятор (код 111 = 7).
- - - Добавлено - - -
Очень интересно обрабатываются флаги. Берется сигнал с вышеупомянутого мультиплексора 0-2/3-5 бит 0/3 и ANDится с ORом бита внутренней шины данных и комбинации выходов мультиплексора. В результате получаем сигнал JMPTAKE, который переключает процессор на переход. Кусочек эквивалентной схемы:
http://savepic.ru/8258689.png
И мультиплексор:
http://savepic.ru/8263809.png
Что тут забавного:
1. Бит флага привязан к комбинации битов 1/4 и 2/5 опкода. Если посмотреть на табличку, то биты 4 и 5 выбирают флаг, а бит 3 установку или сброс. В обоих случаях это один и тот же выбор мультиплексора: ((T4 == 0) | (ID_MOV == 0)) & (ID_O P == 0)
2. Внутренняя шина данных используется не только для передачи данных, но и при анализе флагов. Я еще не добрался до АЛУ, но я думаю здесь тот же механизм что и выставление флагов в команде PUSH PSW.
3. Сигнал T4F1 формируется на листе с АЛУ и является сигналом T4, засинхронизированным к F1. Вообще, чем больше я анализирую схему тем сильнее убеждаюсь, что именно F1 является основной тактовой последовательностью. А F2 используется в основном для внешней синхронизации. Теоретически, можно попробовать запустить процессор (виртуальный, конечно) только на F1, подогнав все схемы, использующие F2, например, под инверсию F1.
АЛУ свои флаги на шину не выдает, только в зашелки флагов. В модели, кстати, трансляция флагов на шину выброшена (кроме случая push PSW), наружу они не выходят, используются внутри только схемой переходов по флагам, это упростило мультиплексор шины и заметно итоговую частоту подняло. Думаю, проводнички сэкономили, или была какая-то задумка еще у интеловцев с флагами на шине, так оно и осталось.
Я понимаю, что итоговая симуляционная модель может иметь значительные упрощения и оптимизации, но мы сейчас говорим за конкретную транзисторную схему. И я вижу, что биты опкода ANDятся с битами шины, между прочим разряды которой соответствуют флагам. Дойду до АЛУ там и пойму что и как.
PS Для тех кто не понял всю красоту формирования JMPTAKE: OR результат бита с его позицией (позиция - комбинация битов 4 и 5 в опкоде) ANDится с битом 3 опкода. Причем, OR результат с прямым битом 3, а NOR результат с инверсным битом 3. На выходе по OR получаем результат. Таким образом, мы в одной маленькой схемке обрабатываем одновременно сброс флага в CNx/JNx и установку флага в Cx/Jx. Очень красиво, я считаю.
- - - Добавлено - - -
Последний кусочек листа №3: триггер-перекидушка, который перекинется только если в такте T2 будет замечена команда ID_XCHG. При этом это возможно только если F2 будет =1 (F2MX это инверсия F2):
http://savepic.ru/8308910.png
Я сначала стормозил: почему он всегда перекидывается и не предустанавливается. Но потом понял, что он на выходе просто переключает роутинг управления регистрами DE и HL, и в сущности не важно кто из них кто. Таким образом работает однотактовый своп HL и DE. Уверен, что подобный трюк использован и в Z80 с регистровыми банками (команды EXX и EX AF,AF'). Так что третий лист закончен и прогресс следующий:
http://savepic.ru/8307876.png
Что делать следующим: АЛУ или регистровый файл с 16ти битным INC/DEC?
А там без разницы. Это старый психологический прием (иногда говорят что это английская поговорка), "как съесть слона, если он такой большой?" называется. "Отрезать по кусочку каждый день и съедать, когда-нибудь слон кончитcя". :biggrin: Психологи называют это "декомпозиция сложной задачи", о как.
Во-первых, смотря как поставлена задача. Быть может, вопрос стоит "как съесть слона за раз, если он такой большой?".
Во-вторых, мне больше по душе русское: Глаза боятся а руки делают. Всегда вспоминаю когда начинаю делать что-то большое и скучное.
- - - Добавлено - - -
А АЛУ забавный.
Ну все веселье еще впереди. На вскидку: нет вычитания, есть сложение с инверсией + взведенный перенос. Флаг четности действительно XOR всех бит результата (четность бит а не четность результата). Флаг перенос С вообще отдельная схема. С DAA тоже очень интересно сделано. В общем я пока не готов еще выдать полную палитру впечатлений, я пока еще разбираюсь что к чему.
поднимаю машинку (пока в эмуляции) на вм80а.
использовал сабжевую модель.
виснет :v2_cry:
ModelSim SE 10.1c,
ПЗУ "Monitor-F" http://zx-pk.ru/threads/24511-yut-88...nyj-modul.html
последняя исполняемая команда: адрес FDC2 = C2, FDC3 = DF, FDC4 = FD ..... дальше на шине адреса появляются нули и проц начинает косить с начала ОЗУ... соответсвенно дальше быстро виснет.
Где графики и отчеты Моделсима?
Спасибо за быстрый ответ, честно говоря не ожидал :v2_dizzy_vodka3:
я пока не настолько продвинут что б давать правильные отчеты, да и к тому же внутрь проца сильно не лезу, ибо сие пока несколько за рамками моего понимания.
если скажете куда смотреть то конечно постараюсь.
вот скриншот.
на нем видно как проц вынимает С2 и... нужно лезть внутрь проца...
А можно весь проект куда-то выложить? В осциллограмме на первый взгляд ничего криминального не видно.
могу в почту, жду адрес в ЛС.
- - - Добавлено - - -
да, Господа :v2_unsur:
не хочу вас растраивать, но это ваш косяк. прикрутил другую модель i8080 и всё заколосилось :v2_yahoo:
Atari, как же так, кормилец? У нас в железе все работает!
видел, почему и ухватился.
очень хорошо работает... но спотыкается...
я знаю почему не любят бетта тестеров :v2_dizzy_botan:
извините за банальность :v2_blush:
Сидит девочка в песочнице, мучает котика. Мимо проходит мужик, не выдерживает
- Девочка, ты что, не любишь животных?
Девочка, мрачно:
- Да я вообще-то и людей не очень люблю
На месте бета-тестера следует быть совсем осторожным :)
Там в системе шина болтается в неизвестном состоянии при активном сбросе, и при старте в регистр инструкции соответственно заносится xx с этой шины. Вследствие чего впадает в неопределенное состояние триггер-переключатель DE/HL и эти регистры тоже моделируются как неопределенные. На реальном железе этой проблемы нет, это проблема исключительно моделирования.
Вариант решения:
- при активном reset на входах pin_din обеспечивать 8'b00000000 (nop)
- - - Добавлено - - -
http://s018.radikal.ru/i509/1611/06/9fca1ae23fadt.jpg
На картинке в начале при активном reset входные сигналы pin_dbin неопределены.
Можно, конечно, регистр инструкций и обнулять при активном reset, но оригинал так не делает, транзистор T2722 явно говорит что надо прогружать регистр с шины по активному reset.
PS. Бли-и-и-и-н-н-н-н, в схеме всего 4 (четыре!!) крохотных листика, исходник в одном файле на 30Кб, после 1801 - это шара :)