Просмотр полной версии : Потактовый клон i8080 на FPGA/CPLD
balu_dark
06.09.2014, 20:54
Прошу прощения, что влезаю со своим любопытством - сколько примерно корпусов выйдет, если собирать аналог ВМ80 на 155 серии?
А потребление такого количества 155 серии - представляете ?
Думаю корпусов 50 не меньше. ибо полно триггеров, а ТМ2 имеют только по 2 элемента в корпусе.
shurik-ua
06.09.2014, 21:20
сделайте на 74HC* серии в смд корпусах и с питанием 3.3в - для применения с плисами )
HardWareMan
06.09.2014, 22:39
А потребление такого количества 155 серии - представляете ?
Думаю корпусов 50 не меньше. ибо полно триггеров, а ТМ2 имеют только по 2 элемента в корпусе.
А зачем ТМ2? Там почти все триггеры пачками тактируются либо от F1 либо от F2. Ставим ИР23 и вот уже 8 триггеров в одном флаконе. ;) А все-таки забавно, если на 1533 его собрать, сможет ли он преодолеть барьер в 3МГц? И если сможет, то как высоко?
balu_dark
06.09.2014, 23:31
ну так по идее можно попробовать задать в симуляторе задержку ттл чипов и по идее при синтезе он покажет максимальную частоту дизайна.
В любом случае 155 серия - во первых много жрет. во вторых - очень тормозная.
Заменить то на 74HC можно но человек задавал вопрос именно про 155 серию.
Это у ВАС там в эмуляторе-симуляторе можно менять на 74HC... - это СОВЕРШЕННО другое чем 155, логика якобы таже но входы совсем другие и внутренне другое и выходы другие. Менять можно только логически а в реальных схемах их припутывать друг-дружке к 74ALS нельзя ...
Viktor2312
07.09.2014, 00:23
На К155 серии будет работать на частоте 8 МГц без проблем. Да и кушать не так уж и много.
На К155 серии будет работать на частоте 8 МГц без проблем.
С чего уверенность? Цепочки логики-триггеров сколько задержки могут дать, не считал?
Viktor2312
07.09.2014, 01:12
С чего уверенность?
Потому, что во всех справочниках пишут, что предельная частота работы всех микросхем, за исключением некоторых, как К155ЛА12 (5 МГц), 10...30 МГц, и обычно тут же добавляют, что при проектировании цифровых приборов следует иметь в виду, что фактическое быстродействие триггеров и счётчиков превышает указанное в 1,5...2 раза.
Цепочки логики-триггеров сколько задержки могут дать, не считал?
Задержки, это уже другое, не считал. Но с 2...3 МГц К155 логика уж точно справится.
50 корпусов не так много.
Из спортивного интереса развожу вручную в Спринт-лейауте видеоконтроллер Микро 80. Причем развожу, чтобы выглядело под ретро - никаких дорожек между ногами микросхем, дорожки шириной 1мм - можно такую плату вручную маркером нарисовать и вытравить без фоторезиста и лазерного утюга. Практически готово, надо чуть переделать - забыл про конденсаторы по питанию.
Там 45 корпусов, так что 50 корпусов это реально.
---------- Post added at 09:30 ---------- Previous post was at 09:26 ----------
А по быстродействию - вообще не знаю какой в этом интерес - увеличивать быстродействие ВМ80. На эту тему мне интересней другое - какое получится быстродействие на 561 серии если собрать.
Собирал подобное, были критические места, где требовалось считать нс и распараллеливать логику, иначе не работало. К тому-же ещё важно было правильно развести сигнальные и питающие шины с блокировочными конденсаторами. Процесс отладки макета затягивался бывало на месяцы, т.к. приходилось разбирать и переделывать неработающие блоки. В общем геморное и неблагодарное это занятие, поэтому и перешел на универсальное и в разы практичное - FPGA.
А вообще то, многое зависит от человека и его цели. Просто многие ещё так и остались в 80-х, когда в аппаратуре доминировали три вида микросхем: ТТЛ, КМОП и ЭСЛ :) и интересно только долгое тра...
Просто многие ещё так и остались в 80-х, когда в аппаратуре доминировали три вида микросхем: ТТЛ, КМОП и ЭСЛ и интересно только долгое тра...
Да , хобби, оно такое - бессмысленное и беспощадное.:)
По нынешним временам смысла нет ни в ВМ80, ни в 155 серии , ни вообще в самопальных разработках, даже на новейшей элементной базе.
balu_dark
07.09.2014, 11:08
50 корпусов не так много.
50 корпусов всего - конечно не много а вот 50 корпусов только самого процессора - дофига. потребление около 1.5 ампер минимум вместо 200 мА за готовый чип и еще и размер платы нифига себе.
Проще и дешевле по всем параметрам( потреблению, габаритам и прочему) купить готовый процессор.
Единственно в случае реализации на CPLD надо посмотреть максимальную нагрузку чипа - с целью при необходимости добавить на плату переходник - регистры для усиления нагрузочной способности.
На эту тему мне интересней другое - какое получится быстродействие на 561 серии если собрать.
Думаю на 500khz должно заработать, тут же ещё момент какое предпологается напряжение питания? На пределе в 12в явно будет тормозить по сравнению с 3в.
Если уж делать на 74xxx, то я бы применил 74HC и 74HCT (для наружных цепей), но корпусов будет много, 50 - это вы, ребята, большие оптимисты :), мне видится 150+ (давать прогнозы неблагодарное занятие, так что это просто мнение, скорее всего ошибочное). На TTL/TTLS такую большую схему сделать можно, но потреблять будет ой-ей. Когда-то давно для похожей большой TTL схемы проектировался импульсный источник на 1 кВт, 5В и несколько каналов в сумме дававших 200А - при испытаниях на КЗ оно пинцет расплавило в лужицу.
Если кем-то будет разработана печатная плата и будет продаваться набор для сборки "процессора ВМ80А в тумбочке" - то я бы вероятно купил для школьного кружка. Только светодиодов побольше, побольше :)
И я тут подумал - у меня все равно будет делаться КСМ (контроллер символьного монитора от ДВК/Э-60) на FPGA, так что 580-ый модуль мне тоже пригодится. Когда дойдут руки до КСМ-а, доделаю процессор - будет одна тактовая и шина Wishbone снаружи, так же есть интересная идея для турбо/обычного режима, сохранится растактовка. Такое уже можно и на OpenCores выложить, но это все нескоро.
CodeMaster
11.09.2014, 12:00
при испытаниях на КЗ оно пинцет расплавило в лужицу.
Это по сути сварочный инвертор и есть.
Viktor2312
11.09.2014, 12:15
Это по сути сварочный инвертор и есть.
Вот только он не нужен такой мощный, для питания 200шт. микросхем 5А более чем достаточно.
CodeMaster
11.09.2014, 12:19
Вот только он не нужен такой мощный, для питания 200шт. микросхем 5А более чем достаточно.
На какой частоте?
Viktor2312
11.09.2014, 17:09
На какой частоте?
Всмысле на какой частоте, а на какой частоте используют К155/К555 серию, не более 20 МГц.
CodeMaster
11.09.2014, 18:57
Всмысле на какой частоте
В смысле того, что потребление сильно зависит от рабочей частоты.
Viktor2312
11.09.2014, 19:38
В смысле того, что потребление сильно зависит от рабочей частоты.
А я ориентируюсь на данные указанные в справочниках на К155 и К555 серию. Которые совпадают с реальным потреблением, проверено на практике, а частота для этих серий находится в диапазоне до 10 МГц, на больших частотах могут быть проблемы, хотя некоторые экземпляры работают и на больших частотах.
Но если учитывать сказанные выше частоты, до 10 МГц, то никаких заоблачных потреблений не будет, и можно ориентироваться в среднем 2А на каждые 50 шт. микросхем. И это с большим запасом.
BarsMonster
13.10.2014, 00:37
Итак, на чем мы остановились?
BarsMonster, так работает же проц: http://zx-pk.ru/showthread.php?t=24003
Кстати, а только мне интересно что же внутри настоящей ULA от Спектрумов 48/128?
Никто еще доноров не предлагал?
CodeMaster
13.10.2014, 07:42
Кстати, а только мне интересно что же внутри настоящей ULA от Спектрумов 48/128?
Нет, но несколько лет назад вышла книга на английском, Conan себе покупал, там вроде бы был реверс-инженеринг ULA, но продолжения это никакого не получило.
HardWareMan
13.10.2014, 09:00
Сильно загружен, нет времени пока продолжать проект по отрисовки логической схемы по транзисторной. Надеюсь через пару-тройку дней выделю время для этого. Верилог модель действительно работает. http://zx-pk.ru/showthread.php?t=23349&page=25 Зеркало исходников: http://hwm.us.to/vm80/
Итак, на чем мы остановились?
Вчера вечером остановились на 4 тыс (of 17) еще неразобранных транзисторов в схеме 1801ВМ1 :)
А 580-ый клон давно работает нормально, но есть еще что улучшить перед выкладыванием на ОpenCores. Буду делать реплику КСМ для ДВК, тогда его подпилю и будет совсем финиш.
Тоже использовал ядро vm80a.v для своей реализации Радио-86РК на ПЛИСине.
Машинка тикает исправно.
HardWareMan, я тоже хотел бы запустить экзорциста, в твоей реализации функции вывода на экран сделаны стандартно, по векторам эркашным?
Можно тебя попросить сделать файлик .RK с экзорцистом? :v2_blush:
HardWareMan
14.10.2014, 08:59
Вот, сделай как надо. Рабочий адрес как у оригинала: 0100Н.
Воть....
Переписал адреса для РК86 32кб.
http://savepic.org/6177517.jpg
Звук пришлось отключить, иначе с ума спрыгнешь от жужжания.
Изменяющийся мусор внизу - вроде как стек. Боюсь, не потрут ли его выводимые строки текста...
---------- Post added at 19:32 ---------- Previous post was at 19:02 ----------
Таки мешается стек. На ALUOP NN наехало на "мусор" и по результатам выдало ошибку CRC.
Еще разок передвинул, ниже экрана.
Теперь всё спокойно тикает.
HardWareMan
14.10.2014, 20:34
Осталось только поделиться со страждущими.
Да жду пока закончит. Уже давно мучает ALUOP(ABCDEHLХРЕНВАМВСЕМ) :)
---------- Post added at 21:31 ---------- Previous post was at 21:20 ----------
Вот эксисайзер (https://yadi.sk/d/J-mPVD8wc2JJi), для Радио-86РК 32кб ОЗУ.
---------- Post added at 23:12 ---------- Previous post was at 21:31 ----------
Йес!
http://savepic.org/6187554.jpg
Можно идти спать.
BarsMonster
17.11.2014, 02:00
BarsMonster, так работает же проц: http://zx-pk.ru/showthread.php?t=24003
А можно попросить сделать аннотацию кристалла по результатам, где что?
И можно в исходниках явно прописать лицензию, разрешающую использование с указанием авторства, что-нить вроде CC-BY 3.0?
Кстати, а только мне интересно что же внутри настоящей ULA от Спектрумов 48/128?
Никто еще доноров не предлагал?
Пока нет. Сейчас тут меня пинают с ВГ93 :-)
Ну и морально готовлюсь подступиться к i80386 - не хватает интеловских камней, AMD-шных-то завались.
А можно попросить сделать аннотацию кристалла по результатам, где что?
Типа взять фото кристалла и наложить полупрозрачные цветные области с подписями? Это не вопрос, сделаем.
И можно в исходниках явно прописать лицензию, разрешающую использование с указанием авторства, что-нить вроде CC-BY 3.0?
Та прописать можно, тут главное чтобы Интел не возражал :), все-таки авторы исходной топологии они.
Ну и морально готовлюсь подступиться к i80386 - не хватает интеловских камней, AMD-шных-то завались.
Угу, я тоже AMD DX40 прикупил пачку, все никак не открою :). Там "всего" 275К транзисторов, но наверняка упакованы в библиотечные ячейки. И слоев металла там, скорее всего, уже не один, и нормы субмикронные (40МГц вроде по 0.8мкм), в-общем, отреверсить "на коленке", имхо, малореально. Будет так - открыл кристалл, посмотрел, и закрыл :)
Типа взять фото кристалла и наложить полупрозрачные цветные области с подписями? Это не вопрос, сделаем.
Та прописать можно, тут главное чтобы Интел не возражал :), все-таки авторы исходной топологии они.
Угу, я тоже AMD DX40 прикупил пачку, все никак не открою :). Там "всего" 275К транзисторов, но наверняка упакованы в библиотечные ячейки. И слоев металла там, скорее всего, уже не один, и нормы субмикронные (40МГц вроде по 0.8мкм), в-общем, отреверсить "на коленке", имхо, малореально. Будет так - открыл кристалл, посмотрел, и закрыл :)
Некоторый оффтоп: Может я что упустил... Z80 отреверсили или нет ещё ?
BarsMonster
17.11.2014, 09:40
Угу, я тоже AMD DX40 прикупил пачку, все никак не открою :). Там "всего" 275К транзисторов, но наверняка упакованы в библиотечные ячейки. И слоев металла там, скорее всего, уже не один, и нормы субмикронные (40МГц вроде по 0.8мкм), в-общем, отреверсить "на коленке", имхо, малореально. Будет так - открыл кристалл, посмотрел, и закрыл :)
Ну, в старых тройках вроде 1.5мкм. Товарищи например довольно успещно PS1 ковыряют - а там ведь 0.8мкм... Транзисторы - в объемных регистровых файлах...
Вот найденная фотка (не моя) - http://s.zeptobars.ru/i386-4x-stitch.jpg
"тут главное чтобы Интел не возражал" - Интел не может быть против, если торговую марку не используем, а все патенты протухли уже даже на четверки... ;-)
Народ, создал новую тему по ВГ-шке. Прошу:
http://zx-pk.ru/showthread.php?p=754364#post754364
Ну, в старых тройках вроде 1.5мкм. Товарищи например довольно успещно PS1 ковыряют - а там ведь 0.8мкм...
"Безумству храбрых поём мы песню" (c) (psxdev.ru)
Только там три месяца тишина уже, лишь бы у них руки не опустились.
Вот найденная фотка (не моя) - http://s.zeptobars.ru/i386-4x-stitch.jpg
Из рентгенологии упёр, не иначе :).
Как и на костях - ничерта не видно и непонятно :).
А старый Интел DX16 или хотя бы 25 я с начала лета на барахолках/базарах присматриваю, пока не попадался.
HardWareMan
17.11.2014, 11:30
"Безумству храбрых поём мы песню" (c) (psxdev.ru)
Только там три месяца тишина уже, лишь бы у них руки не опустились.
Безумные обитают здесь (http://forum.emu-russia.net/viewtopic.php?f=13&t=4106&start=260).
Попытался сегодня оценить степень своего безумства, вскрыл Am386DX40 91-го года выпуска. Выяснил такие факты:
- размер пластинки теплоотвода 10х10мм
- размер кристалла 6.5х7.5мм
- залито в корпусе теплоотводом вверх, кристаллом вниз
- кристалл толстый (порядка 0,8мм), толще ангстремовской серии 1801
- кристалл хрупкий, ломается если начать отдирать не с той стороны (что-то я не подумал что может быть кристаллом вниз)
- но менее хрупкий чем серия 1801, выдралась дыра из толщи кристалла, но сам он не раскололся (раскололся позже, когда я решил что уже все равно и потащил неаккуратно)
- буржуйская смола при выжигании воняет меньше, но все равно воняет :)
По самой топологии:
- обнаружено два слоя металлизации
- нормы таки субмикронные, мелковато все
- насчет библиотечных ячеек - очень похоже что да, но без 100-процентной уверенности
Картинка для привлечения внимания, снято без юстировки на x20 объектив:
http://i003.radikal.ru/1411/f6/1f17312b9d7dt.jpg (http://i003.radikal.ru/1411/f6/1f17312b9d7d.jpg)
Ну не знаю, кмк, видно плоховато, надо снимать на более качественном микроскопе и делать шлифовку как "безумцы" с PS1.
BarsMonster
17.11.2014, 19:12
Ну не знаю, кмк, видно плоховато, надо снимать на более качественном микроскопе и делать шлифовку как "безумцы" с PS1.
На PS1 - кристалл 8.15x8.1mm, снимали на 40x (~2900кадров на кристалл), и там 2 металла + поли.
Так что тройка ощутимо проще...
Картинка для привлечения внимания, снято без юстировки на x20 объектив
Ё-маё.... Как вы там можете что-то видеть и понимать? надо быть инопланетянином, наверное... :)
BarsMonster
18.11.2014, 16:37
А старый Интел DX16 или хотя бы 25 я с начала лета на барахолках/базарах присматриваю, пока не попадался.
Кинул клич в твиттере - нашлись 2 16-мегагерцовых на ebay, уже выкупил.
Еще подсказали, что он до сих пор в продаже на digikey, цены вполне скромные: http://www.digikey.com/product-search/en?pv506=404&FV=fff40027%2Cfff80164%2Cfffc016b&mnonly=0&newproducts=0&ColumnSort=0&page=1&stock=1&quantity=0&ptm=0&fid=0&pageSize=500
Кинул клич в твиттере - нашлись 2 16-мегагерцовых на ebay, уже выкупил.
Так что, ждем качественных больших фоток троечки? :)
Троечка-то попроще чем PS1 - и транзисторов поменьше, и архитектура практически полностью документирована, но два металла - это два металла, шлифовать нада, однака.
А у парней с PS1 там заруба еще на пару лет, похоже.
BarsMonster
18.11.2014, 17:39
Так что, ждем качественных больших фоток троечки? :)
Троечка-то попроще чем PS1 - и транзисторов поменьше, и архитектура практически полностью документирована, но два металла - это два металла, шлифовать нада, однака.
А у парней с PS1 там заруба еще на пару лет, похоже.
Да, это будет проект тысячелетия. И привлечь на него можно будет больше людей. Десяток человек со всего миру прожевать за год смогут, по идее :-)
Ну и пасту для стирания металлов по одному я уже купил, но еще не пробовал.
BarsMonster
20.11.2014, 08:41
Типа взять фото кристалла и наложить полупрозрачные цветные области с подписями? Это не вопрос, сделаем.
Да, именно так. А еще интересно иметь описание кто что делал - чтобы всех причастных упомянуть - хочу статейку катануть, на русском и английском.
Ну и вопрос лицензии по прежнему актуален )
Да, именно так. А еще интересно иметь описание кто что делал - чтобы всех причастных упомянуть - хочу статейку катануть, на русском и английском.
Хммм... Сомнительная какая-то слава, разве что под псевдонимом :)
Хммм... Сомнительная какая-то слава, разве что под псевдонимом :)
В смысле сомнительная !
Людей которые могут такое сделать и довести до конца - в мире еденицы !
Их точно нужно знать поимённо !.
Viktor2312
20.11.2014, 12:51
хочу статейку катануть, на русском и английском.
А на английском зачем, мы его всё равно не знаем, уж лучше на русском точно написать. Хотя ожидать, что она будет на русском не приходится опять вся будет зачипчикана, а ведь есть нормальное русское слово кристалл.
А на английском зачем, мы его всё равно не знаем
Учите ...
и немецкий, и французский, и .. китайский
а ведь есть нормальное русское слово кристалл.
Криста́ллы (от греч. xxxxxx, первоначально — лёд, в дальнейшем — горный хрусталь, кристалл) — твёрдые тела, в которых атомы расположены закономерно, образуя трёхмерно-периодическую пространственную укладку — кристаллическую решётку.
https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B0%D0%BB%D0%BB%D 1%8B
Viktor2312
20.11.2014, 15:06
Учите ...
и немецкий, и французский, и .. китайский
Спасибо, но и так есть, что поучить, а не забивать себе голову, всягой ерундой.
Криста́ллы (от греч. xxxxxx, первоначально — лёд, в дальнейшем — горный хрусталь, кристалл) — твёрдые тела, в которых атомы расположены закономерно, образуя трёхмерно-периодическую пространственную укладку — кристаллическую решётку.
Да не нужно эту бредятину сюда постить, все и так знают, что такое кристалл. Когда речь идёт об электронике, кристалл, это какая нибудь схема реализованная на кристалле, а если этот кристалл оформлен в корпус, то это микросхема, МИС, СИС, БИС или СБИС. И так было всегда, это русский технический язык, и я не понимаю, и не пойму, зачем сейчас интенсивно начинают подменять русские слова английскими, записанными русскими буквами. Это перетекает из разговорного, но это не правильно.
есть нормальное русское слово кристалл.
Самое тупое слово на свете, хуже только "камни" применительно к рубинам в часах.
Кристалл - это шняга, которую надо в болдердаше собирать, и в диззи4.
Viktor2312
20.11.2014, 16:39
Самое тупое слово на свете, хуже только "камни" применительно к рубинам в часах.
Кристалл - это шняга, которую надо в болдердаше собирать, и в диззи4.
И тем не менее, это правильно, и в серьёзной литературе, как-то умудряются корректно, правильно и по русски писать. Например, журнал "Компоненты и технологии" тот же Зотов В. как-то умудряется писать на русском, а он супер классные статьи пишет по ПЛИС.
Пример:
https://img-fotki.yandex.ru/get/17849/48644933.2d/0_eadc6_533c7c1c_orig.png (http://fotki.yandex.ru/users/lpiti/view/961990)
ст01
И всё лаконично, по русски, что должно быть английским, как имена нарицательные, они на английском, а что переводится на корректный технический русский, переведено. И нет подмены понятий, разговорных словечек и другой словесной дряни.
И всё лаконично, по русски, что должно быть английским, как имена нарицательные, они на английском, а что переводится на корректный технический русский, переведено. И нет подмены понятий, разговорных словечек и другой словесной дряни.
Корректный технический русский, созданный журналистами-гуманитариями? Ну-ну. Не может слово "кристалл" в таком значении возникнуть нормальным образом. Или выдумано журналистами/радиолюбителями, или это технический жаргон, который и есть те самые "разговорные словечки".
Термины должны быть самоочевидными. Я из-за таких любителей повыдумывать русские аналоги где ни попадя всё детство думал, что однокристальная ЭВМ - это ЭВМ, выпиленная из монокристаллического кремния.
Viktor2312
20.11.2014, 17:45
Корректный технический русский, созданный журналистами-гуманитариями? Ну-ну. Не может слово "кристалл" в таком значении возникнуть нормальным образом. Или выдумано журналистами/радиолюбителями, или это технический жаргон, который и есть те самые "разговорные словечки".
Термины должны быть самоочевидными. Я из-за таких любителей повыдумывать русские аналоги где ни попадя всё детство думал, что однокристальная ЭВМ - это ЭВМ, выпиленная из монокристаллического кремния.
Ну, тогда я умываю руки, бесполезно, я в 11 лет знал, что такое однокристальная ЭВМ, так как было абсолютно понятно, что все компоненты ЭВМ, выполнены на одном кристалле. Пишите дальше все эти словечки, но скоро вас абсолютно станет не понятно, называйте кристаллы, микросхемы, БИС и СБИС вашими чипчиками, называйте конденсаторы капами или капациторами, мне пофиг.
Я лишь высказал своё пожелание, если уж писать хорошую статью, то не применять там английские слова тупа написанные русскими буквами.
на одном кристалле
Кристалле чего?
Viktor2312
20.11.2014, 18:03
Кристалле чего?
Это не важно. Понятна сама суть, что всё находится на одном кристалле и упаковано в один корпус, в отличии от микропроцессорного комплекта, как например, микропроцессорный комплект КР580, где микропроцессор на одном кристалле и соответственно, это отдельная микросхема, а системный контроллер на другом кристалле, который так же представляет собой отдельную микросхему.
Это не важно.
Да важно же! Если за словом не стоит физического смысла, значит это жаргон! Великодержавный Русский, но жаргон. Это, скорее всего, сокращение от "подложка из кристаллического кремния" или типа того.
Давайте тогда в технической литературе говорить "электронка" вместо "электронная почта", "КМ-ка" вместо "конденсатор серии КМ" и "заправка" вместо "автозаправочная станция". А что, все же смысл понимают?
я в 11 лет знал, что такое однокристальная ЭВМ
А я в 11 лет на Бейсике писал лучше, чем ты сейчас - и что? :) Меня мало интересовал уровень ниже ассемблера, но журнал "Радио" я почитывал, и обилие этого взявшегося из ниоткуда жаргона очень раздражало мой неокрепший мозг.
Давайте не будем (спамить - зачеркнуто) мусорить :) в полезной теме? Спасибо.
Самое тупое слово на свете, хуже только "камни" применительно к рубинам в часах.
Кристалл - это шняга, которую надо в болдердаше собирать, и в диззи4.
Оффтоп:
Нормальное слово "кристалл".
А вот всякие "чики", "чекиниться", "супервайзер по клинингу" и т.д. это мусор в языке
англо-русский словарь по вычислительной технике 1990г стр 97
chip -
1) кристалл
2) микрокадр
3) конфетти
4) элементарный сигнал
5) микросхема.
Толковый словарь по вычислительным системам 1990г стр 75
chip -
1) кристалл (подразумевается полупроводниковая пластина итд)
2) интегральная схема (нестрогое толкование термина)
Вопросы ?
Кто может объяснить, как выполняется инструкция DAA и как выставляются флаги A и C в результате её исполнения?
DAA - десятичная коррекция после сложения.
Входные параметры:
A - аккумулятор
AC - флаг переноса из младшего нибла в старший (из 3-его в 4-ый разряд)
C - флаг переноса (перенос из 7-го разряда)
Выполняет такие действия (R временная переменная):
R = 0;
if (((A & 0x0F) > 9) || AC) R |= 0x06;
if (((A & 0xF0) > 0x90) || C) R |= 0x60;
A = A + R;
Установить все флаги согласно результата операции сложения.
Возвращает:
A, установленные флаги
A = A + R;
Установить все флаги согласно результата операции сложения.
Не совсем. Если был перенос, то он останется. А просто в результате сложения A + R переноса может и не быть:
0x90+0x90=0x20 C=1
0x20+0x60=0x80 C=0
Не совсем. Если был перенос, то он останется. А просто в результате сложения A + R переноса может и не быть
Да, верное замечание, флаги P, AC, Z, S ставятся как при обычном сложении A+R. Флаг C сохраняет свое значение, но устанавливается если добавлялся 0x60. Скорректированный алгоритм:
R = 0;
if (((A & 0x0F) > 9) || AC) R |= 0x06;
if (((A & 0xF0) > 0x90) || C) {R |= 0x60; C=1;}
A = A + R;
установить флаги S, Z, AC, P согласно результата сложения.
HardWareMan
10.12.2014, 13:53
А теперь то же самое, но на схеме. :3
А теперь то же самое, но на схеме. :3
То есть? Готова схема в логических вентилях?
HardWareMan
10.12.2014, 17:07
То есть? Готова схема в логических вентилях?
Моя еще только в процессе, я на пару недель уезжал в Тайланд. Только вот вернулся. Думал у тебя уже есть.
Моя еще только в процессе, я на пару недель уезжал в Тайланд. Только вот вернулся. Думал у тебя уже есть.
Так я не вижу в ней практического смысла, мне транзисторов и верилога достаточно. Это только если кто удовольствие хочет получить и перерисовать из транзисторов в стандартные логические вентили.
Так я не вижу в ней практического смысла, мне транзисторов и верилога достаточно. Это только если кто удовольствие хочет получить и перерисовать из транзисторов в стандартные логические вентили.
Хм что интересно, упоминали что Masatoshi Shima тоже рисовал процы оперируя чисто транзисторами а не логическими вентилями. Обьясните как так? Неужели легче понять логику работы думая о схеме как об аналоговой?
HardWareMan
10.12.2014, 20:44
Хм что интересно, упоминали что Masatoshi Shima тоже рисовал процы оперируя чисто транзисторами а не логическими вентилями. Обьясните как так? Неужели легче понять логику работы думая о схеме как об аналоговой?
Транзисторная схема не обязательно аналоговая. Ключевой режим и все такое. К тому же, транзисторная схема позволяет делать несколько нестандартные логические операции. Однако, мне интересна именно логическая схема а не транзисторная. Вот я и разбираю.
Транзисторная схема не обязательно аналоговая. Ключевой режим и все такое. К тому же, транзисторная схема позволяет делать несколько нестандартные логические операции. Однако, мне интересна именно логическая схема а не транзисторная. Вот я и разбираю.
Я тоже согласен, что большинству железячников ближе к пониманию именно логическая схема (в виде законченных блоков типа триггеров, счетчиков и т.д.), а не транзисторная или на непонятном иноземном языке верилоге. Я за то, чтобы приводить реверсенные чипы в логическую схему.
ram_scan
20.12.2014, 15:46
Я тоже согласен, что большинству железячников ближе к пониманию именно логическая схема (в виде законченных блоков типа триггеров, счетчиков и т.д.), а не транзисторная или на непонятном иноземном языке верилоге. Я за то, чтобы приводить реверсенные чипы в логическую схему.
Иногда проще использовать повторяемый косвенный эффект зависящий от железной реализации, чем городить сфероконичную логическую схему.
В качестве примера - с точки зрения сфероконной логической схемы динамическая и флэш память в принципе неработоспособные вещи (хотя на кристалле как таковых отдельных конденсаторов чуть меньше чем совсем нет). А по крайней мере в Z80 существует емкостная "подтяжка" шин.
Не, на сфероконичную логику это переложить конечно можно (применительно к процессору), мультиплексоров натыкать например. Только вот это только усложняет дело.
Поэтому думать полезно шырше.
HardWareMan
20.12.2014, 21:18
Именно что логическая схема устройства (а не транзисторная) и позволяет понимать всю логику работы и перекладывать в таргет этот ваш повторяемый косвенный эффект.
Что в итоге получилось:
- убрана зависимость от фазы 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 написал в блоге статью про реверс (http://zeptobars.ru/ru/read/KR580VM80A-intel-i8080-verilog-reverse-engineering), это дело немножко оттвиттили и отфейсбучили, теперь в теме некоторый наплыв гостей, в-основном, англоязычных. Я попытался часть своих постов перевести на английский при помощи гугля, убедился что слово "дралоскоп" не переводится, и вообще, в постах у меня изрядно идиом :biggrin:
balu_dark
02.02.2015, 23:07
ну - драть от слова копировать (но типа не законно ) вот и назови его - копископом :) или свето копировальным аппаратом. Это если я правильно понял о чем идет речь. У нас дралоскопом( местное название было дробоскоп - почему не знаю.) Это был стеклянный стол с лампой снизу. На стол клался чертеж, сверху чистый ватман либо калька и все обводилось.
Этим способом копировали чертежи и задания по черчению у отличников.
BarsMonster написал в блоге статью про реверс (http://zeptobars.ru/ru/read/KR580VM80A-intel-i8080-verilog-reverse-engineering), это дело немножко оттвиттили и отфейсбучили, теперь в теме некоторый наплыв гостей, в-основном, англоязычных. Я попытался часть своих постов перевести на английский при помощи гугля, убедился что слово "дралоскоп" не переводится, и вообще, в постах у меня изрядно идиом :biggrin:
Круто !
а можно ссылки на всё это, а то я потерялся.
Круто !
а можно ссылки на всё это, а то я потерялся.
Там в статье есть ссылки на схему (http://s.zeptobars.ru/kr580vm80a/vm80a_sch10d.pdf) и полный пакет (http://s.zeptobars.ru/kr580vm80a/vm80a_rev10j.zip) полученных исходников.
Ну а перевода я не делал и не выкладывал, просто было любопытно как оно увидится через переводчик не русскоговорящими.
Vslav,
Поздравляю с формальным релизом!!
В верилог модели есть несколько закоментированых кусков. Думаю стоит их убрать, раз уж модель пошла в мир, чтоб не вызывало недопонимания у людей. :)
Еще есть маленькая ошибка в двух одинаковых коментариях "no in original 8080", надо заменить на "absent in original 8080".
vlad6502
03.02.2015, 17:56
Супер ! Мегатруд!
кстати, у нас в институте упомянутый светокопировальный девайс называли "козлотрон" ;)
Vslav,
Есть вопрос. На сайте у BarsMonster указано, что транзисторов 4758 и это число уже успело попасть на страницу википедии, однако в схеме транзисторов 4756. Очень интересно узнать, что это за 2 загадочных транзистора? :)
однако в схеме транзисторов 4756. Очень интересно узнать, что это за 2 загадочных транзистора? :)
Вы плохо посчитали транзисторы, надо пересчитать еще раз, их ровно 4758 :)
Если серьезно, то при написании модели было обнаружено два транзистора, пропущенных при векторизации:
T4757 - добавлен в районе T733
T4758 - добавлен в районе T1552
Автоматически перенумеровать по ЕСКД, чтобы нумерация была сплошная - несложно, но в верилоге кое-где встречаются цепи и регистры с номерами транзисторов по текущей нумерации, поэтому я ее сознательно портить не стал. Может быть перенумерую, когда буду делать версию 2.0 - с единой тактовой, вишбоном и удобной турбосхемой.
Update: а наплыв гостей в тему все растет :)
Update2: прикольно, новый рекорд всего форума сегодня, правда, после обновления версии движка, но все равно приятно :)
Update3: ларчик открывается просто (http://habrahabr.ru/post/249613/)
Спасибо большое за развёрнутый ответ.
Жаль, что в PDF файле схемы не получается провести текстовый поиск. :)
HardWareMan
04.02.2015, 06:29
Треду и года нет, а он уже практически подытожен. Это круто!
Спасибо большое за развёрнутый ответ.
Жаль, что в PDF файле схемы не получается провести текстовый поиск. :)
Хорошо, маленький сюрприз - схема (http://u.zeptobars.ru/yuot/8080/vM80_10d.sch) и топология (http://u.zeptobars.ru/yuot/8080/vm80_10d.pcb)
Хорошо, маленький сюрприз - схема (http://u.zeptobars.ru/yuot/8080/vM80_10d.sch) и топология (http://u.zeptobars.ru/yuot/8080/vm80_10d.pcb)
Я прикинул на калькуляторе:
5000 транзисторов по 5*5мм == 125000 мм^2 или 50см на 25 см
Получилось вполне разумная площадь процессора. Можно паять для милитари на радиационно стойких транзисторах.
Кто возьмётся ?
Получилось вполне разумная площадь процессора. Можно паять для милитари на радиационно стойких транзисторах.
Кто возьмётся ?
Если взять к примеру в корпусе SOT23 (http://www.siongboon.com/projects/2005-09-07_home_pcb_fabrication/footprint/sot23_philips.pdf) посадочное место PCB 4.5мм х 4.6мм.
5k транзисторов x $0.1/шт = $500 и это только процессор, Cmax которого с трудом дотянет 200kHz???. Интересно, сколько это будет кушать W?
Уже делали:
Проектирование собственного компьютера (http://habrahabr.ru/post/178071/)
Строим декоративный транзисторный компьютер (http://habrahabr.ru/post/179705/)
Решили, что лучше и дешевле уже на FPGA :)
Вот если сделать ещё soft-core ez80 (http://www.zilog.com/index.php?option=com_product&task=product&businessLine=1&id=77&parent_id=77&Itemid=57) по типу NextZ80 (opencores.org/project,nextz80) для новых FPGA проектов под Unix, было-бы интересней. Хотя, кому что... :)
http://www.righto.com/search/label/8085
прикольные тексты с описаниями z80 8085, классно офрмленые
прикольные тексты с описаниями z80 8085, классно офрмленые
Угу, расковырять процессор мало - надо еще популярно это дело подать :)
580ВМ80А - это был побочный проект, перед заходом на 1801ВМ1, поэтому он так получился "бегом-бегом". По ВМ1 пишется подробный документ, но он не совсем в популярной форме, а "вкусняшки" по реверсу я краткими постами в соответствующей ветке выкладываю.
Нефедов А.В., автор цикла справочников, "Интегрнальные микросхемы и их зарубежные аналоги" видимо имел доступ к проектной документации по 580-й серии. В своем справочнике он указал, что в КР580ВМ80А 4750 интегральных элементов. :)
Вот скан страницы справочника с этой информацией Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги. Том 6. (http://radiowiki.ru/images/thumb/d/dc/%D0%9D%D0%B5%D1%84%D0%B5%D0%B4%D0%BE%D0%B2_%D0%90. %D0%92._%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0 %D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B8%D0%BA% D1%80%D0%BE%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B8_% D0%B8%D1%85_%D0%B7%D0%B0%D1%80%D1%83%D0%B1%D0%B5%D 0%B6%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BD%D0%B0%D0%BB%D0 %BE%D0%B3%D0%B8._%D0%A2%D0%BE%D0%BC_6.djvu/page264-800px-%D0%9D%D0%B5%D1%84%D0%B5%D0%B4%D0%BE%D0%B2_%D0%90. %D0%92._%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0 %D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B8%D0%BA% D1%80%D0%BE%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B8_% D0%B8%D1%85_%D0%B7%D0%B0%D1%80%D1%83%D0%B1%D0%B5%D 0%B6%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BD%D0%B0%D0%BB%D0 %BE%D0%B3%D0%B8._%D0%A2%D0%BE%D0%BC_6.djvu.png)
Там же можно найти информацию по количеству транзисторов в остальных микросхемах серии.
HardWareMan
04.07.2015, 19:37
Сегодня выделил время на ВМ80. Исправил некоторые найденные косяки, запилил еще несколько узлов. Примерный прогресс:
http://savepic.ru/7513799.png
Слева заглушки несуществующих цепей (приходящих с других листов). Покрытие первого листа (закрашенное - реализовано и проверено):
http://savepic.ru/7506631.jpg
Крута! А в чем рисуется и проверяется?
И картинка не масштабируется по клику :)
HardWareMan
05.07.2015, 07:56
Крута! А в чем рисуется и проверяется?
И картинка не масштабируется по клику :)
Да все в кактусе. Не масштабируется, да, но пока и не надо. По завершению, когда модель будет работоспособна, я попробую сделать оптимизацию (есть несколько потенциальных узлов) и потом проект ляжет здесь, для всех желающих. Ну а позже, можно будет попробовать переложить его на верилог, я думаю он сильно упроститься относительно первоначального.
HardWareMan
06.07.2015, 15:11
Вот и закончился первый лист, за исключением 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. Я не знаю, зачем эти повторы, единственное что приходит на ум это то, что они находятся в разных местах кристалла, и добавить еще один элемент ИЛИ-НЕ проще чем тянуть провод. Так как сейчас перевод "влоб", то я их оставлю, а в будущем постараюсь сократить.
HardWareMan
06.07.2015, 17:41
Текущий прогресс:
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
Вполне логичное решение для приведение процессора во вменяемое состояние.
Нашел фотографии литографических масок (http://www.computerhistory.org/revolution/digital-logic/12/287/1608) для Intel 8080.
Вытянул с сайта полноразмерные картинки. Качество не самое плохое, так что надеюсь будет интересно и полезно. А может кто-то и сравнение с ВМ80 сделает.
53313
53314
53315
Маски прикольные, несмотря на невысокое разрешение вполне можно отвреверсить процессор. От ВМ80А топология i8080A очевидно отличается, общее расположение блоков одинаково, часть блоков очень похожи. Не совсем близнецы.
HardWareMan
10.01.2016, 17:01
Прогресс 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.
2. Внутренняя шина данных используется не только для передачи данных, но и при анализе флагов. Я еще не добрался до АЛУ, но я думаю здесь тот же механизм что и выставление флагов в команде PUSH PSW.
АЛУ свои флаги на шину не выдает, только в зашелки флагов. В модели, кстати, трансляция флагов на шину выброшена (кроме случая push PSW), наружу они не выходят, используются внутри только схемой переходов по флагам, это упростило мультиплексор шины и заметно итоговую частоту подняло. Думаю, проводнички сэкономили, или была какая-то задумка еще у интеловцев с флагами на шине, так оно и осталось.
HardWareMan
10.01.2016, 19:59
АЛУ свои флаги на шину не выдает, только в зашелки флагов. В модели, кстати, трансляция флагов на шину выброшена (кроме случая 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?
Что делать следующим: АЛУ или регистровый файл с 16ти битным INC/DEC?
А там без разницы. Это старый психологический прием (иногда говорят что это английская поговорка), "как съесть слона, если он такой большой?" называется. "Отрезать по кусочку каждый день и съедать, когда-нибудь слон кончитcя". :biggrin: Психологи называют это "декомпозиция сложной задачи", о как.
HardWareMan
11.01.2016, 04:53
Во-первых, смотря как поставлена задача. Быть может, вопрос стоит "как съесть слона за раз, если он такой большой?".
Во-вторых, мне больше по душе русское: Глаза боятся а руки делают. Всегда вспоминаю когда начинаю делать что-то большое и скучное.
- - - Добавлено - - -
А АЛУ забавный.
А АЛУ забавный
Я скромно помалкиваю, ибо - балбес.
Но хочется спросить - и?
HardWareMan
12.01.2016, 07:43
Ну все веселье еще впереди. На вскидку: нет вычитания, есть сложение с инверсией + взведенный перенос. Флаг четности действительно XOR всех бит результата (четность бит а не четность результата). Флаг перенос С вообще отдельная схема. С DAA тоже очень интересно сделано. В общем я пока не готов еще выдать полную палитру впечатлений, я пока еще разбираюсь что к чему.
поднимаю машинку (пока в эмуляции) на вм80а.
использовал сабжевую модель.
виснет :v2_cry:
ModelSim SE 10.1c,
ПЗУ "Monitor-F" http://zx-pk.ru/threads/24511-yut-88-displejnyj-modul.html
последняя исполняемая команда: адрес FDC2 = C2, FDC3 = DF, FDC4 = FD ..... дальше на шине адреса появляются нули и проц начинает косить с начала ОЗУ... соответсвенно дальше быстро виснет.
HardWareMan
28.11.2016, 07:07
Где графики и отчеты Моделсима?
Спасибо за быстрый ответ, честно говоря не ожидал :v2_dizzy_vodka3:
я пока не настолько продвинут что б давать правильные отчеты, да и к тому же внутрь проца сильно не лезу, ибо сие пока несколько за рамками моего понимания.
если скажете куда смотреть то конечно постараюсь.
вот скриншот.
на нем видно как проц вынимает С2 и... нужно лезть внутрь проца...
http://i.piccy_.info/i9/0fb5bf529bb928b99971d4d7d17144cd/1480328055/246528/1094208/brok1.jpg
http://i.piccy_.info/i9/0fb5bf529bb928b99971d4d7d17144cd/1480328055/246528/1094208/brok1.jpg
А можно весь проект куда-то выложить? В осциллограмме на первый взгляд ничего криминального не видно.
могу в почту, жду адрес в ЛС.
- - - Добавлено - - -
да, Господа :v2_unsur:
не хочу вас растраивать, но это ваш косяк. прикрутил другую модель i8080 и всё заколосилось :v2_yahoo:
HardWareMan
28.11.2016, 22:25
Atari, как же так, кормилец? У нас в железе (http://zx-pk.ru/threads/23349-potaktovyj-klon-i8080-na-fpga-cpld/page24.html) все работает!
видел, почему и ухватился.
очень хорошо работает... но спотыкается...
я знаю почему не любят бетта тестеров :v2_dizzy_botan:
извините за банальность :v2_blush:
я знаю почему не любят бетта тестеров
Сидит девочка в песочнице, мучает котика. Мимо проходит мужик, не выдерживает
- Девочка, ты что, не любишь животных?
Девочка, мрачно:
- Да я вообще-то и людей не очень люблю
На месте бета-тестера следует быть совсем осторожным :)
Там в системе шина болтается в неизвестном состоянии при активном сбросе, и при старте в регистр инструкции соответственно заносится xx с этой шины. Вследствие чего впадает в неопределенное состояние триггер-переключатель DE/HL и эти регистры тоже моделируются как неопределенные. На реальном железе этой проблемы нет, это проблема исключительно моделирования.
Вариант решения:
- при активном reset на входах pin_din обеспечивать 8'b00000000 (nop)
- - - Добавлено - - -
http://s018.radikal.ru/i509/1611/06/9fca1ae23fadt.jpg (http://radikal.ru/big/djfbq61jn9p43)
На картинке в начале при активном reset входные сигналы pin_dbin неопределены.
Можно, конечно, регистр инструкций и обнулять при активном reset, но оригинал так не делает, транзистор T2722 явно говорит что надо прогружать регистр с шины по активному reset.
PS. Бли-и-и-и-н-н-н-н, в схеме всего 4 (четыре!!) крохотных листика, исходник в одном файле на 30Кб, после 1801 - это шара :)
дык, Господа....
я на своей картинке указал конкретное место на котором спотыкается, до него молотит без вопросов.
первые две мкросекунды я видел много много раз...
я на своей картинке указал конкретное место на котором спотыкается, до него молотит без вопросов.
первые две мкросекунды я видел много много раз...
:v2_dizzy_facepalm:
И я на своей картинке указал конкретное место. Если поправить мое "конкретное место", то в твоем "конкретном месте" спотыкаться перестанет. Я глубоко в программу не вникал, но после коррекции она успешно поехала дальше. Там имеет место распространяющаяся неопределенность моделирования, в конце-концов она зажирает весь процесс. Точку ее зарождения я указал.
- - - Добавлено - - -
Строчку:
if (~f2 & (reset | (m1 & t3))) i <= pin_din;
Заменить на:
if (~f2 & (reset | (m1 & t3))) i <= reset ? 8'b00000000 : pin_din;
Это обнуление регистра инструкции при сбросе. Будет отличаться от оригинала. Позволит моделироваться, ухудшит синтезабельность, на поведение в реальной FPGA влияния не окажет.
а теперь, извиняюсь....
это заменить где? все мои сырцы а Вас есть, дайте пожалуста хоть +- 5 строк.
это заменить где?
Файл vm80a.v, строчка 593.
если с разверткой разберусь то попробую (в ФПГА)
HardWareMan
29.11.2016, 09:36
Можно, конечно, регистр инструкций и обнулять при активном reset, но оригинал так не делает, транзистор T2722 явно говорит что надо прогружать регистр с шины по активному reset.
Да, но не забывай, что эта шина в этот момент отрезана от входа и не накачивается:
http://savepic.ru/12433439.png
Я уже писал об этом здесь.
Да, но не забывай, что эта шина в этот момент отрезана от входа и не накачивается:
Угу, получается у оригинала в регистр пишется мусор. Я что-то такое про эти грабли помню, у меня тоже не моделировалось из-за этого, пришлось прицепить вход i на входные пины непосредственно, там еще из-за этого мультиплексор шины данных хорошо разгрузился, ЕМНИП и максимальная частота выросла.
Update:
Посмотрел код "отдохнувшим" взглядом и после опыта с ВМ1, упростить можно модельку ВМ80 очень серьезно. Я же старался сохранить максимальную совместимость с оригиналом для моделирования и синтезируемое ядро в одном проекте. А надо разделить на два, как с ВМ1 сделано. Тогда чисто синтезируемая ветка на wishbone с одним тактовым сигналом просто катастрофически упрощается, регистры элементарно в блок памяти засовываются, частота растет. А то 670LE и 240FF как-то толсто для 8-битника.
да, Господа, еще раз снимаю щляпу.
в железе молотит нормально. и разумеется в отличии от "аналогов" все осцилограммы действительно как в учебнике.
фотку не привожу т.к. ПЗУ не залил, т.е. процик вертит мусором по экрану.
упростить синтезируемую модель - это очень хорошо, щас всяких FPGA как грязи, может народ подтянется.
- - - Добавлено - - -
ладно, покажу "как есть", чтоб меня свитсуном не считали...
http://i.piccy_.info/i9/10c36f8edae6d1e2ab4b25578fe0812f/1480415712/597856/1094582/IMG_20161129_032924.jpg
да, Господа, еще раз снимаю щляпу.
Та мы только котика в песочнице помучали...
Да, на Xilinx интересно будет на результат посмотреть. А то все Altera да Altera.
надо разобраться как бинарники подгружать, покаместь единственный выход только как в знакогенераторе, но это такой гемор....
- - - Добавлено - - -
а еслиб вы знали сколько ISE ворнингов насыпает :v2_dizzy_facepalm:
тут "и мои и ваши", все сырцы у вас есть, так что разберетесь где чьи:
WARNING:Xst:1710 - FF/Latch <t382> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <intr> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <t976> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <inta> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <hold> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <t887> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <t980> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:2677 - Node <control_word_0> of sequential type is unconnected in block <control_word>.
WARNING:Xst:2677 - Node <control_word_1> of sequential type is unconnected in block <control_word>.
WARNING:Xst:2677 - Node <control_word_2> of sequential type is unconnected in block <control_word>.
WARNING:Xst:2677 - Node <control_word_3> of sequential type is unconnected in block <control_word>.
WARNING:Xst:2677 - Node <control_word_5> of sequential type is unconnected in block <control_word>.
WARNING:Xst:2677 - Node <control_word_6> of sequential type is unconnected in block <control_word>.
WARNING:Xst:1898 - Due to constant pushing, FF/Latch <mstart> is unconnected in block <cpu>.
WARNING:Xst:1710 - FF/Latch <t383> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <minta> (without init value) has a constant value of 0 in block <cpu>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:2677 - Node <inte> of sequential type is unconnected in block <cpu>.
WARNING:Xst:1898 - Due to constant pushing, FF/Latch <t3144> is unconnected in block <cpu>.
WARNING:Xst:2677 - Node <control_word_0> of sequential type is unconnected in block <vk28>.
WARNING:Xst:2677 - Node <control_word_1> of sequential type is unconnected in block <vk28>.
INFO:Xst:3226 - The RAM <ram/Mram_ram> will be implemented as a BLOCK RAM, absorbing the following register(s):WARNING:Xst:2677 - Node <control_word_2> of sequential type is unconnected in block <vk28>.
WARNING:Xst:2677 - Node <control_word_3> of sequential type is unconnected in block <vk28>.
WARNING:Xst:2677 - Node <control_word_5> of sequential type is unconnected in block <vk28>.
WARNING:Xst:1710 - FF/Latch <cpu/t976> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/intr> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/t382> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/hold> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/inta> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/t980> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/t887> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1898 - Due to constant pushing, FF/Latch <cpu/inte> is unconnected in block <kefircheg>.
WARNING:Xst:1898 - Due to constant pushing, FF/Latch <cpu/mstart> is unconnected in block <kefircheg>.
WARNING:Xst:1710 - FF/Latch <cpu/t383> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cpu/minta> (without init value) has a constant value of 0 in block <kefircheg>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1898 - Due to constant pushing, FF/Latch <cpu/t3144> is unconnected in block <kefircheg>.
WARNING:Xst:2677 - Node <control_word/control_word_6> of sequential type is unconnected in block <kefircheg>.
WARNING:Xst:2040 - Unit kefircheg: 8 multi-source signals are replaced by logic (pull-up yes): data_bus<0>, data_bus<1>, data_bus<2>, data_bus<3>, data_bus<4>, data_bus<5>, data_bus<6>, data_bus<7>.
WARNING:Xst:1710 - FF/Latch <counter_3> (without init value) has a constant value of 0 in block <board>. This FF/Latch will be trimmed during the optimization process.
а еслиб вы знали сколько ISE ворнингов насыпает
Квартус тоже насыпает, но они все касаются I/O основной платы (напоминает что 3.3V совместимость, требует задания токов и прочего, все это не нужно для тестового проекта на DE0), к IP-ядру вроде претензий у него нет. Если ISE чего в самом vm80a.v не нравится - то выкладывайте, посмотрим в чем проблема.
HardWareMan
29.11.2016, 15:37
Вот погодите, закончу я перевод в логическую схему, проведу свертывание схемы, вот тогда и посмотрим, насколько похудеет и т.д.
- - - Добавлено - - -
Угу, получается у оригинала в регистр пишется мусор. Я что-то такое про эти грабли помню, у меня тоже не моделировалось из-за этого, пришлось прицепить вход i на входные пины непосредственно, там еще из-за этого мультиплексор шины данных хорошо разгрузился, ЕМНИП и максимальная частота выросла.
Не, я еще раз говорю: внутренняя шина имеет емкость. В начале цикла по F1 в нее закачивается лог.1 на каждую линию. Затем по необходимости эти лог.1 зануляются и получаются данные. По сбросу накачка запрещена, что дает стабильный лог.0. В купе с блокировкой внешних сигналов это дает принудительное выполнение NOP для автомата и некоторые модификации (предустановки) некоторых регистров (например регистр адреса). Отсюда и требование - не менее 3х тактов вроде, чтобы попасть на чтение опкода. Поведение емкостной шины у нас не симулируется. Поэтому, можно применить принудительное зануление внутренней шины без ущерба качеству симуляции.
По сбросу накачка запрещена, что дает стабильный лог.0.
А это почему? Разве при сбросе активируются какие-то агенты шины производящие обнуление? Если нет, а сброс долгий (сотни миллисекунд для микросхемы - долго), то состояние шины будет определяться утечками. А эта штука зависит от технологии, производителя и партии, простым смертным предсказать никак нельзя, имхо.
HardWareMan
29.11.2016, 17:22
Vslav, вот именно утекают в схемы приемники. Т.е. весь заряд какой бы он ни был теряется.
Vslav, вот именно утекают в схемы приемники. Т.е. весь заряд какой бы он ни был теряется.
А это откуда следует? Заряд может прекрасно и натекать, зависит от паразитных параметров конкретной схемы.
Представь что под затвор одного из транзисторов накачки попало чуток грязи. Немного, транзистор закрывается, но не так чтобы очень хорошо, килоом 10 в закрытом состоянии дает. И все работает нормально, 10К закрытого состояния для работы достаточно. А вот затворы приемников чудесно отпечатались, там десятки мегаом входного сопротивления. И получаем в состоянии сброса, когда все выключено, банальный делитель из паразитных резисторов.
- - - Добавлено - - -
В подтверждение своего тезиса о натекании заряда приведу хороший пример - 565РУ5. Грубо говоря - это массив маленьких изолированных конденсаторов. Если ее оставить без регенерации, то спустя какое-то время все ячейки придут к определенным состояниям. К РАЗНЫМ - будут и нули и единицы. Потому что в какой-то ячейке утечка на землю, а в какую-то натекает с питания.
К РАЗНЫМ - будут и нули и единицы. Вроде-бы это состояние является общеизвестной функцией адреса - изображение на экране спектрума без ПЗУ тому иллюстрация.
Вроде-бы это состояние является общеизвестной функцией адреса
Может быть. У меня сейчас изготовлена плата универсального тестера РУ-шек, я проверю при случае.
- изображение на экране спектрума без ПЗУ тому иллюстрация.
А разве процессор не исполняет циклически RST 7 (подтянутая к единице шина)? И не заполняет видеопамять адресами возврата? Я не большой знаток спектрума, могу и ошибаться.
s_kosorev
29.11.2016, 20:12
изображение на экране спектрума без ПЗУ тому иллюстрация
Скорее без процессора
HardWareMan
30.11.2016, 06:21
Какой именно Спектрум имеется в виду? Если наши, с шахматкой и прозрачной регенерацией, то это не тот случай. Если оригинал, то я не в курсе, ULA там регенерирует или сам Z80.
Имеется в виду шахматка. Область графического экрана регенерируется прозрачно почти везде :) Формально это состояние после выключения питания, а не регенерации; но, насколько я помню по Радио-86РК, они совпадают.
Надо у технологов спрашивать, как и зачем это сделано. На вопрос "как?" может ответить и реверс РУшек.
да, к стати, синтезатор ISE почти в конце выдал такую строчку: Maximum Frequency: 70.285MHz
т.е. как я понимаю, данную модель разогнать до 50 МГц - легко ;)
т.е. как я понимаю, данную модель разогнать до 50 МГц - легко ;)
Quartus на Cyclone III на плате DE0 дает 100+ МГц.
HardWareMan
30.11.2016, 20:22
А ежели с комбинаторикой разобраться (что возможно будет после завершения преобразования транзисторной схемы в логическую и ее анализа) то и все 200 на каком-нибудь старшем Cyclone IV/V или Arria2 GX.
70 МГц это скорость "всего проекта", в т.ч. с моими кусками - памятью и видеовыводом.
на данный момент процик стучит на 25 МГц т.е. тактовая 100 поделена на 4... экзорциста еще не гонял.
хочу разогнать до 50...100 МГц.
вопрос: насколько критична фазировка f1 и f2 ? можно делать "по простому" или нужно делить на 9 как в оригинальной 8224 (гф24)?
вопрос: насколько критична фазировка f1 и f2 ? можно делать "по простому"
Можно сделать произвольную тактовую последовательность по таким правилам:
- любое количество тактов активной F1 (F2 неактивна), но не менее одного такта
- любое количество тактов неактивных F1 и F2, допускается нулевое
- любое количество тактов активной F2 (F1 неактивна), но не менее одного такта
- любое количество тактов неактивных F1 и F2, допускается нулевое
То есть - можно просто чередовать фазы F1/F2, без пустых пропусков.
Оригинальному процессору пропуск после Ф2 тоже не нужен? Не поможет ли более длинный Ф2 по сравнению с Ф1 получить большую частоту на FPGA?
HardWareMan
06.12.2016, 06:56
На оригинале меандр на F2 обусловлен чисто удобством сопряжения с внешними устройствами, потому как именно по F2 обычно и организована синхронизация обмена. Но ключевая фаза у него F1, и в ДЩ тоже от нее пляска идет. В ПЛИС же скорости достаточно, чтобы не выдерживать соотношения между F1 и F2, поэтому можно просто чередовать.
охренеть :v2_confu:
http://i.piccy_.info/i9/eef7c72444d37cc7fc4e23e1d68672d7/1481076336/553561/1097222/IMG_20161207_040036.jpg
25 МГц, экзорцист в ПЗУ 0000-1fff, видео e800-efff двухпортовая без арбитража, RAM - f000-f7ff, ПЗУ - f800-ffff "монитор-ф" ЮТ-88.
клок - 1(f1),2(f2),1(-)
HardWareMan
07.12.2016, 05:40
Не все экзорцисты (https://web.archive.org/web/20151006085348/http://www.idb.me.uk/sunhillow/8080.html) одинаково полезны. Правильный есть в этом треде (пару десятков страниц назад), но даже он требует допиливания под вашу систему. А судя по одинаковым значениям у вас скорее всего ОЗУ стека повело конкретно (т.е. нужно допиливание под вашу карту памяти).
так я Ваш (от специалиста) и перепиливал.
ячейки с f000 до f0ff (потолок стека)
за-то быстро :v2_clap2:
HardWareMan
07.12.2016, 06:36
Там еще ОЗУ кроме стека используется. Т.е., в Спеце я их перенес в экран (последний столбец) для визуализации процесса.
я читал.
у Вас заняты 256 байт с bf00 по bfff, у меня эти ячейки находятся с f000 по f0ff (я уже писАл).
впрочем наверное уберу кадровое гашение и перенесу их в видео ОЗУ для наглядности.
- - - Добавлено - - -
а зачем некоторые строки преобразованы в байты?
...
0049 0000 C3 13 00 begin: jmp start
0050 0003
0051 0003 ; machine state before test (needs to be at predictably constant address)
0052 0003 000000000000 msbt: .db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00 h,00h
0053 0011 00 00 spbt: .db 00h,00h
0054 0013 ;msbt .equ 0F000h
0055 0013 ;spbt .equ 0F010h
.....
0215 012E ; aluop a,<b,c,d,e,h,l,(hl),a> (753,664 cycles)
0216 012E ;alu8r: db 0ffh ; flag mask
0217 012E ; tstr 080h,0c53eh,0573ah,04c4dh,msbt,0e309h,0a666h,0d0h, 03bh,0adbbh
0218 012E ; tstr 03fh,0,0,0,0,0,0,0,-1,0 ; (16,384 cycles)
0219 012E ; tstr 0,0ffh,0,0,0,-1,-1,0d7h,0,0 ; (46 cycles)
0220 012E ; db 0cfh, 076h, 02ch, 086h ; expected crc
0221 012E ; tmsg 'aluop <b,c,d,e,h,l,m,a>'
0222 012E FF800000003E alu8r: .db 0FFH,080H,000H,000H,000H,03EH,0C5H,03AH,057H,04DH, 04CH,003H,001H,009H,0E3H,066H
0223 013E A6D03BBBAD3F .db 0A6H,0D0H,03BH,0BBH,0ADH,03FH,000H,000H,000H,000H, 000H,000H,000H,000H,000H,000H
0224 014E 000000000000 .db 000H,000H,000H,000H,000H,000H,0FFH,000H,000H,000H, 000H,000H,000H,0FFH,000H,000H
0225 015E 0000000000FF .db 000H,000H,000H,000H,000H,0FFH,0FFH,0FFH,0FFH,0D7H, 000H,000H,000H,0CFH,076H,02CH
0226 016E 86 .db 086H
0227 016F 616C756F7020 .text "aluop <b,c,d,e,h,l,m,a>."
0228 0187 000000000000 .db 0,0,0,0,0,0,0
....
Ну а позже, можно будет попробовать переложить его на верилог, я думаю он сильно упроститься относительно первоначального.
Хотелось бы поинтересоваться как обстоят дела с "отрисовкой" - есть шанс довести до конца?? Уж больно интересная тема - "первый процессор"))) как первая любовь не забывается никогда!
HardWareMan
17.01.2017, 08:20
К сожалению пока вялотекуще. Но я пытаюсь выделять больше квантов времени.
HardWareMan
08.02.2017, 18:28
Маньяки. Они везде. (http://lovqvist.net/8080/index.html)
Маньяки. Они везде.
Даешь ВМ80 на операционниках. :)
Картинка для привлечения внимания :)
http://s019.radikal.ru/i633/1711/51/57bba88b155ct.jpg (http://radikal.ru/big/vfgeqksw0ageh)
shurik-ua
03.11.2017, 19:16
Маньяки. Они везде. (http://lovqvist.net/8080/index.html)
як то кажуть - пан має час и натхнення )
Закинул ядро vm80a на GitHub (https://github.com/1801BM1/vm80a)
На opencores.org более закрытое сообщество, для скачивания требуется регистрация,
проект вышел бы более закрытым, поэтому выбрал github, хотя git мне неудобнее
чем svn
Из нового
- упорядочил директории под требования открытого проекта
- прикрутил UART и адаптировал на него Exerciser
- начал адаптацию на плату DE1 (в планах еще пара плат)
А кто-нибудь с Xilinx работал? Повозился я с ISE, давненько я так не страдал. Особенно доставляет инициализация памяти (та что ROM, с программой). Сначала попробовал core generator, он притащил в проект кучу вонючего хлама на много мегабайт, а всего-то надо сгенерировать блок 16К*8. Потом он никак не хотел жрать .coe файл (контент для инициализации). Там у него особо извращенческие требования, умирает сразу при любой непонятке. Потом начал падать мой любимый srec_cat (я им пытался .coe родить из хекса) - оказывается там с 2014 года ошибка в генерации .coe до сих пор неисправленная. Потом я попробовал пару разных конвертеров. Наконец, с десятой попытки генератор сожрал .coe, он его удовлетворил. Урюкам из х#йлинкса даже не приходит в голову что кто-то может генерить файлы не из их EDK - нет никаких утилит для генерации .coe файлов из стандартных. Запустился 580-ый процессор, но полезли проблемы. Начал корректировать тестовую программу, и выяснилось, что для подстановки нового контента снова надо генерить память генератором с самого начала. Долго и нудно, снова мудачизм полный...
Посмотрел что народ делает. Оказывается можно память тупо задать массивом и инициализировать ее $readmemh(), который у х#йлинкса стал синтезируемым. Новости географические, блин. Перешел в состояние радостно-отстраненного удивления. Вышел из него. Очередная долгая и нудная возня с форматом файла для $readmemh(). О, да! Их считыватель не жрет .mem файлы по стандарту Верилога, только очень ограниченное подмножество. В софте 2014 года, Карл! Который продается по $4K. Посмотрел примеры, подобрал формат. Но не нашел утилиту которая его автоматически может генерировать из .bin/.hex. Приходится допатчивать руками после каждой компиляции. Может кто из опытных чего посоветует? Нужен быстрый маршрут обновления содержимого ROM в Спартане после перекомпиляции ассемблерных исходников тестового кода 580-го.
Ну... В итоге все заработало на плате AX309 со Sparta6-SLX9-3, сравним с DE0 и Cyclone III:
- частота проекта чуть более 100МГц у обоих, примерно одинакова
- LUT 750 у Spartan и 948 у Cyclone
- REG 451 (260 slices) у Spartan и 416 у Cyclone
Vslav, сочувствую. Я только скачал ISE на днях, повозился пару часов с этим адом, меня тяжко стошнило и я стал Квартус еще больше ку.
Vslav, сочувствую
Да ладно, это был любопытный опыт. Это как в "Голубую устрицу" забежал, осмотрелся и выскочил. Успел, без потерь :)
Привыкнуть к ISE можно, но Квартус как-то побыстрее работает (ISE ну очень неспешно все делает), ошибок меньше, в ISE есть явные косяки, даже просто в текстовом редакторе. Симулятор не пробовал, там все равно есть интеграция с привычным Modelsim.
Проверилась переносимость кода, вылезло что все константы надо задавать 64-битными, Q2 делитель правильно посчитал, а вот XST его обрезал, в итоге UART неверно битрейт генерировал. А так - все быстро завелось. Еще с блочной памятью разобрался, теперь ВМ1 понятно как портировать. Lattice еще попробовать, что ли... Есть на Али недорогие платы с MachXO3
PS. Проект для Spartan-6 на плате AX309 опубликован.
Кстати, портировал проект на DE2-115, там толстый Cyclone IV E EP4CE115. Так частота упала до 73МГц. Микросхема то большая, отлично, но - медленнее.
в ise есть planahead он более понятен чем исе. Смотрите видео и читайте документацию от xilinx. Докучи есть понятие вебпак - он бесплатный.
пс: лично по мне xilinx более приятен и интуитивно понятен чем altera. У каждого есть свои "причуды и глюки".
пс: просьба ко всем: не развивать тему кто лучше! Лично я "сижу" на вивадо - он тож есть бесплатный.
в ise есть planahead он более понятен чем исе
Да, planahead хорошая штука, мне понравилась. Правда я редко и квартусовским аналогом Floorplan Editor пользуюсь.
пс: лично по мне xilinx более приятен и интуитивно понятен чем altera. У каждого есть свои "причуды и глюки".
пс: просьба ко всем: не развивать тему кто лучше! Лично я "сижу" на вивадо - он тож есть бесплатный.
Это вопрос привычки. Увы, Вивадо не поддерживает Spartan6, приходится кушать исю, как она есть.
Согласен, тему тут развивать не будем, не нужен нам холивар. Я посмотрел на Xilinx, представление получил, проверил портируемость кода и ОК.
Кстати, портировал проект на DE2-115
Оффтоп: ВМ2 очень просит словами благодарных пользователей себя доделать)
Интересная жизнь, однако. Сижу, убираю зависимость от F1. Все хорошо, процессор сохнет, уже ~600LUT и менее 200 триггеров. Выношу последние стробы из F1, и тут оно хлоп - перераспределяет регистры для этих стробов - и у снова 260 триггеров. Ну зато 100МГц, да. А я наивный чукотский юноша - хотел чтобы и быстро и компактно :)
Оффтоп: ВМ2 очень просит словами благодарных пользователей себя доделать)
Та доделаем, 580-ый - это один из моих висячих хвостов, вот щаз его отрубим, всяко веселее будет.
- - - Добавлено - - -
Update: в-общем, все хорошо, флажок "Register Retiming" в Квартусе позволяет собрать ядро или быстро (100МГц, 300 регистров) или компактно (93МГц, менее 190 регистров). Только Квартус глючит, надо выйти и стереть промежуточную базу, иначе флажок не воздействует.
Ну, тут уже те 7% разницы не так существенны, как экономия 110 регистров...
Только Квартус глючит
Квартус глючит, а Титус канючит)
Что в итоге получилось:
- убрана зависимость от фазы F1
- фаза F2 переведена на фронт, единая частота для всей системы
- добавлена шина Wishbone
- сохранение таймингов зависит от реализации внешней памяти. При чтении модель выставляет адрес на шину только в такте Т2, если память успевает выдать данные за такт то оригинальные таминги сохраняются. В моей примерной системе память регистровая, она умеет только за два такта, поэтому чтение всегда растянуто на один такт. При чтении используется бывший вход READY. При записи адрес выставляется также в такте Т2, но поскольку строб записи по факту будет в T3 тут не так критично. Торможение при записи (если вдруг внешний агент не готов) осуществляется общим разрешением клока (тот что был F2). Как ни странно, ресурсов это не забирает, что с разрешением, что без - практически одинаково
- результаты на плате DE0 (Cyclone EP3C16F484C6) - 104МГц clock, 607 LUTs and 187 flip-flops без оптимизации по скорости
- все это выложено в репозиторий
ОФФТОП
planahead эта тоже полноценная среда разработки как ISE. По сути из planahead сделана VIVADO
те сперва Foundation потом ISE потом Planahead потом VIVADO. В конторе используют и xil и alt "в параллель" - посему осведомлён в причудах и того и другого. VIVADO только с 7 семейства. Нынче "сделана" ISE 14.7 для виндовс 10 и спартан 6 онли.
Как оно конвертировалось, с точки зрения абстрактной логики, картинка:
64092
Весь процессор ВМ80 можно представить как схему состоящую из двух групп защелок (latch), первая группа срабатывает от фазы F1, вторая от фазы F2. Между группами защелок имеются наборы логики, часть логических функций формирует выходные сигналы. Можно переписать логику так что она будет зависеть только от выходов группы защелок F2, и свести ее к единому набору, а защелки группы F2 непосредственно присоединяются к выходам группы F1. Далее остается только заменить группы защелок на регистры (flip-flops). Регистры являются нативными базовыми элементами FPGA и предоставляют уже готовую реализацию. Как видно из картинки, в схеме остались только элементы, срабатывающие по фронту F2, соответственно все выходные сигналы будут тоже синхронизированы с фронтом F2, что нам и требовалось для системы в FPGA. Внутренняя же логика обработки процессора осталась практически той же самой, все такты T и циклы М неизменны, их отлично видно на симуляторе.
Update: еще прикол в том что Wishbone достаточно простой, и почти совпадает с внешней шиной оригинального i8080 (если не цепляться к синхронности). В системе WB шину модели можно в пару строчек конвертировать в привычную шину.
Картинка для привлечения внимания
Скажи, а ты 580ВМ1 не планируешь также разобрать на транзисторы, как ВМ80?
Update: еще прикол в том что Wishbone достаточно простой, и почти совпадает с внешней шиной оригинального i8080 (если не цепляться к синхронности). В системе WB шину модели можно в пару строчек конвертировать в привычную шину.
С этого места поподробнее, я записываю ;)
В моей реализации Ориона, например, сигнал DSYN формируется как "cpu_rd or cpu_wr", а в оригинальной реализации - задержанный на 1 такт F2 сигнал SYNC от процессора.
Глядя на сигналы и комментарии к ним, понимаю, что надо плясать от wb_tgc_o и wb_we_o, но что там ещё надо намешать - хз даже =/
- - - Добавлено - - -
Скажи, а ты 580ВМ1 не планируешь также разобрать на транзисторы, как ВМ80?
А при реверсе сперва как раз на транзисторы и разбирается в любом случае ;)
Потом уже по схеме восстанавливается логика.
Скажи, а ты 580ВМ1 не планируешь также разобрать на транзисторы, как ВМ80?
Пока запланировано только фото. Я сейчас делаю новый микроскопный столик, моторизованный, двухкоординатный, с простеньким гониометром. Это упростит процесс фотографирования, как доделаю - отсниму кучку накопившихся микросхем.
Пока запланировано только фото. Я сейчас делаю новый микроскопный столик, моторизованный, двухкоординатный, с простеньким гониометром. Это упростит процесс фотографирования, как доделаю - отсниму кучку накопившихся микросхем.
Это хорошо, будет работы людям надолго :)
Я вот думаю изучить топологию КМОП и прочие, что бы присоединиться к реверсу ВГ93, а то тема совсем заглохла =/
С этого места поподробнее, я записываю ;)
В моей реализации Ориона, например, сигнал DSYNC формируется как "cpu_rd or cpu_wr", а в оригинальной реализации - задержанный на 1 такт F2 сигнал SYNC от процессора.
На DSYN, фазы и прочее - забить. Можно использовать сигналы типа гангнам ВК28-стайл:
nMEMRD = ~(wb_stb_o & ~wb_we_o & ~wb_tgc_o[1] & ~wb_tgc_o[4]);
nMEMWR = ~(wb_stb_o & wb_we_o & ~wb_tgc_o[1] & ~wb_tgc_o[4]);
nIORD = ~(wb_stb_o & ~wb_we_o & wb_tgc_o[1] & ~wb_tgc_o[4]);
nIOWR =~(wb_stb_o & wb_we_o & wb_tgc_o[1] & ~wb_tgc_o[4]);
nINTA = ~(wb_stb_o & wb_tgc_o[4]);
Ну и wb_ack_i теперь заменяет бывший READY, подать туда постоянно высокий и получить обычный процессор с шиной ISA8 :)
Теги wb_tgc_o стабильны на протяжении всего цикла обмена и содержат всю информацию что выводил раньше ВМ80А при активном DSYN - M1, IO, stack, INTA и прочее. Убраны только ненужные подтверждения прерываний в момент останова, ну и защелка по DSYN теперь просто не нужна.
Update: осталось еще клок-модератор прикрутить, чтобы оригинальный режим при низкой тактовой работал - то есть шина останется быстрая, а само ядро сможет жужжать медленно, хоть на родных 2.5МГц, не тормозя при этом остальную систему.
Добавил клок-модератор. Теперь легко эмулируется любая низкая частота, без понижения частоты системной шины. Можно три часа гнать экзорциста как на оригинальном процессоре, а можно дернуть тублер и пройти тест на сотке за две с половиной минуты. Причем тумблер можно перекидывать "на лету", в любой момент.
Поправил выход из режима halt по прерыванию. В книжке было написано что выход из halt только по сбросу, а реально оно должно выходить и по прерыванию. Я про это забыл, сегодня вот изучал исходники КСМ, увидел там инструкцию hlt, пришлось вносить правки в корку :)
Поправил выход из режима halt по прерыванию. В книжке было написано что выход из halt только по сбросу, а реально оно должно выходить и по прерыванию. Я про это забыл, сегодня вот изучал исходники КСМ, увидел там инструкцию hlt, пришлось вносить правки в корку
Так что же, ваша модель основана на инструкции, а не на реверсе?
Так что же, ваша модель основана на инструкции, а не на реверсе?
Основана на реверсе, но сделана оптимизация. Когда я сделал форк на вишбон, то выполнил ряд оптимизаций - убрана фаза F1, убраны HOLD/HLDA/WAIT, ну и еще выбросил по ошибке просыпалку, считая что она тоже не нужна. Теперь выяснилось, что это я погорячился, вернул просыпалку на место. Экзорцист-то все тестирует, кроме HLT. Пришлось еще тестик на HLT добавить.
Но, надеюсь, оригинальная потранзисторная схема осталась? Для будущих поколений, которые захотят пойти не путем верилога.
Но, надеюсь, оригинальная потранзисторная схема осталась? Для будущих поколений, которые захотят пойти не путем верилога.
Там на гитхабе все расписано в описании проекта. И схема выложена полностью со всеми материалами, и верилог. В репозитории две ветки - одна оригинальная, полифазная, с F1/F2, а вторая оптимизированная под SoC, хотя и сохранением всех растактовок T1-T5/М1-М10.
HardWareMan
07.02.2018, 09:56
Titus, http://hwm.us.to/vm80/
Titus, http://hwm.us.to/vm80/
Может стоит апдейт первого поста сделать? Там ссылки все повыкладывать, а то по теме искать - не айс.
HardWareMan
07.02.2018, 20:12
Ищите остальные, кидайте в личку. Я добавлю.
HardWareMan
13.02.2018, 23:56
Разлохматил второй лист, который с АЛУ. Он действительно забавный. Остался последний, с регистрами и адресными мультиплексорами.
HardWareMan
14.02.2018, 18:31
Все, разлохматил последний лист, с регистрами и 16ти битным счетчиком. Процессор - чистая стэйт-машина, никакого микрокода. Теперь точно ясно, что повторять его влоб смысла вообще нет, нужно делать изложение на тему. Речь конечно о реализации на FPGA/CPLD. Интересного там только сам ALU - он просто изящен, хоть и не настолько продвинут в математическом смысле, как у Z80. Ну еще и стэйт машина циклов, но ее можно и самому накорябать за полминуты. Забавно еще то, что только регистры реально хранят значения во времени и аккумулятор, хотя он часть ALU (его выбор - отдельная цепь). У ALU несколько внутренних регистров: X, R и A, причем X и R практически каждый такт перезаписываются. A, выполняет роль, собственно, аккумулятора. При расчете, данные из A сначала копируются в R. Второй операнд параллельно грузится в X и результат вычисляется комбинаторной логикой напрямую (затраты времени чисто задержка в логике), который может быть записан обратно в А, минуя внутреннюю шину, или сразу выставлен на внутреннюю шину данных. Она, кстати, двунаправленная, точнее там что-то вроде монтажного ИЛИ + накачка перед использованием, т.е. используется ёмкостный эффект - это уже обсуждали. Это позволяет загрузить опкод NOP (накачка внутренней шины отключается при активном сбросе), удерживая сброс в течение нескольких тактов (в доке написано, что их число минимально 3), что уменьшает накладные расходы в схеме. Таким образом, вот эта схема не верна, так как Accumulator Latch имеет доступ к внутренней шине.
http://jpegshare.net/images/2c/87/2c871bebb087cbf96896bfa0f30ca295.png
А, еще регистр флагов. Он отсутствует как регистр - так, набор триггеров. 4 из них вообще тупые: P, Z, AC и S. А вот C - развитой. У него сложная цепь управления, т.к. он реально участвует в куче команд.
- - - Добавлено - - -
Теперь я знаю Кунг-Фу ВМ80!
- - - Добавлено - - -
Позже, я попробую сделать анализ схемы. Хочу нарисовать растактовку, когда в какой момент активируется тот или иной процесс, особенно внутри ALU. Будет нечто подобное растактовке команд из доки, только с указанием внутренних процессов, особенно тех, что без привязки к опкоду. Получившейся информации будет предостаточно для написания тактово точной модели или эмулятора. И сделать это максимально оптимально.
HardWareMan
14.02.2018, 22:45
Ах да, последнее на сегодня. Когда-то давно, на NedoPC возник спор (http://www.nedopc.org/forum/viewtopic.php?p=100974#p100974), что происходит на ногах у ВМ80 во время выполнения 16ти битного сложения командой DAD. По количеству машинных циклов было понятно, что эта команда прогоняется через ALU и занимает 3 машинных цикла, что подтверждает всем известная дока. Большинство арифметических команд накладывается на цикл М1 следующего опкода, если результат ALU надо сохранить в аккумулятор (помечены сноской 9 в известной доке на карте растактовки). Это возможно благодаря внутренней шине ALU, о чем я уже упомянул выше. Однако, команда DAD единственная из тех, что использует машинные циклы М2 и М3, но при этом ей не нужна шина, потому, что все необходимые данные уже внутри, в регистрах. Так вот, я хочу поставить жирную точку в этом споре. Легче всего это отследить по сигналу SYNC. Вот его схема:
http://jpegshare.net/images/45/85/458599a911d180350c6c010635f89ac7.png
Здесь видно, что сигнал SYNC формируется из сигнала T1, который может блокироваться сигналом RESET (все верно, сигнал SYNC в состоянии сброса не генерируется, но при этом машина молотит, загружая каждый раз опкод NOP в регистр инструкции). Этот сигнал запоминается сначала по тактовой фазе F1 и затем по тактовой последовательности F2. Помешать сформированному сигналу может только лог.1 на READY_INT, который, складываясь по NOR будет давить SYNC к лог.0. Напомню, что сигнал SYNC имеет положительную полярность: активный лог.1. Таким образом, SYNC это всего лишь T1 задержанный до T2. Внутри, READY_INT блокирует сигнал WR (перед выдачей на ножку WR) и обнуляет сигнал-статус SY_WO, который по сути является битом D1 в слове состояния и который означает, что процессор хочет запись. Это, в свою очередь, блокирует DBIN выход. Зачем сделано именно так? Это упрощает генерацию сигнала чтения DBIN, который генерируется чаще и должен быть длиннее. Теперь сигнал READY_INT:
http://jpegshare.net/images/fc/64/fc64673a1f1f5432d04839ffc099e67e.png
Сигнал формируется только от ID_DADX, который стреляет на все 4 опкода команды DAD (09H, 19H, 29H и 39H) и два сигнала машинный циклов M4 и M5. Сигналы машинных циклов M4 и M5 сначала складываются по ИЛИ, а затем по ИЛИ-НЕ (что эквивалентно И). Т.е., блокировка происходит для M4 или M5 только при команде DAD. Соответственно, сигналы SYNC, DBIN и WR во время исполнения 2 и 3 циклов команды DAD не активны. READY_INT так же блокирует вход READY, что не даст вам остановить ВМ80 сигналом неготовности во время прогона вычислений команды DAD. Шину адреса он не блокирует - там будет активность. Шина данных так же управляется только внутренним сигналом SY_WO, поэтому на шине данных так же будет что-то выставлено (в том числе и слово состояния в своем временном слоту). Произойдет обычная запись, но при отсутствии стробирующих сигналов DBIN и WR конфликта шины или чего-то деструктивного не будет. На остальные входы и выходы READY_INT не влияет.
Очевидно, что в схеме ошибка. Вместо M4 и M5 должны быть M2 и M3. Я специально в тексте объяснения написал соответственно этой схеме, чтобы не было путаницы. Но в целом и так ясно. Не понятно, почему сигнал назван именно как READY_INT, ведь к прерываниям он отношения не имеет (сокращение INT у меня ассоциируется с ними), быть может как READY INTERNALLY? Но все это сейчас уже и не важно, наверное.
Однако, команда DAD единственная из тех, что использует машинные циклы М2 и М3, но при этом ей не нужна шина
Ну название Mn оно достаточно условно, n - это обычно номер цикла, а не тип, который используется в документации на процессор. Хотя M1 совпадает как по номеру так и по типу. На DAD есть переход M1->M4, а не M1->M2, поэтому и блокировка генерации внешнего цикла шины на M4/M5.
Не понятно, почему сигнал назван именно как READY_INT
...
быть может как READY INTERNALLY?
Угу, это READY internal, потому что когда оно реверсилось было сразу видно что сигнал влияет на готовность и уходит куда-то глубоко внутрь. А куда именно - сразу не раскопаешь, поэтому было принято такое рабочее название, потом так и осталось. А в последней ревизии rtl (когда я все причесал под монофазность) оно называется dad_m45, так нагляднее.
HardWareMan
15.02.2018, 04:03
Ну название Mn оно достаточно условно, n - это обычно номер цикла, а не тип, который используется в документации на процессор. Хотя M1 совпадает как по номеру так и по типу. На DAD есть переход M1->M4, а не M1->M2, поэтому и блокировка генерации внешнего цикла шины на M4/M5.
Я только сейчас понял, почему Lavr недоумевал. Я всегда машинные циклы обозначал как Mn именно как номер машинного цикла во времени: M1 - чтение опкода, M2 дочитка операнда и т.д. Именно поэтому и посчитал ошибкой в схеме, т.к. DAD продолжительностью в 3 машинных цикла и только в 1м есть активность шины. Так описано в оригинальной доке, там M используется только для номера, а в таблице типа нет никаких литер (кроме N как обозначение числа в слове состояния).
А Lavr смотрел в свою странную книжецу, где Mn это обозначение типа машинного цикла: чтение опкода, чтение данных, запись данных и т.д.
Вот как бывает важно читать правильные документы.
HardWareMan
16.02.2018, 08:30
Оказывается, трюк с обнулением (http://zx-pk.ru/threads/23349-potaktovyj-klon-i8080-na-fpga-cpld.html?p=815971&viewfull=1#post815971) внутренней шины данных используется не только для регистра инструкций. Дело в том, что выборка регистровой пары R0 (напомню, что всего в процессоре 6 регистровых пар, от R0 до R5: PC, HL, DE, BC, SP и WZ) не активируется в Т1 и Т2 в M1. А сброс это растянутый T1 в M1. А защелка адреса может записывать только со внутренней 16ти битной шины регистрового файла. Поэтому, пока удерживается сброс формируются сигналы записи в регистры без указания регистра, что приводит к установке внутренней шины регистров в 0. Это попадает в защелку адреса. 16ти битный сумматор, который может работать в 3х режимах: +1, 0 и -1, тут же высчитывает следующий адрес, который и запишется в PC после загрузки регистра инструкций. Таким образом, при сбросе PC фактически хранит свое состояние до загрузки опкода из ячейки памяти с адресом 0000H. Сам 16ти битный сумматор собран на комбинаторике, со схемой ускоренного переноса. Я еще не проверял, но похоже что INX RP и DCX RP работают через него, поэтому не используют ALU и его флаги.
HardWareMan
16.02.2018, 19:49
Выход HLDA означает, что процессор отработал входной сигнал HOLD запроса доступа к шине и освободил ее. Вот его схема:
http://jpegshare.net/images/37/f1/37f18268071f869c01aa09ee355496d9.png
Меня интересует комментарий Vslav: нет ли тут ошибки? Ведь при установке HLDA произойдет блокировка на элементе, эквивалентном 2И-НЕ (транзисторы Т787 и Т788).
Что касается DAD, он действительно прыгает с M1 на M4 сразу. Ну, по крайней мере, моя моделька прыгает на данном этапе отладки.
http://jpegshare.net/images/85/ca/85cac8e49fa5e2bdf3627fd0c1160bec.png
Меня интересует комментарий Vslav: нет ли тут ошибки? Ведь при установке HLDA произойдет блокировка на элементе, эквивалентном 2И-НЕ (транзисторы Т787 и Т788).
ИМХО, это будет только при активном F2. После его спада на выходе защёлки будет Z-состояние, что для 2И-НЕ приравнивается к лог. "1", если не ошибаюсь... А при активации F1 следующего цикла это состояние (HLDA после inst 1303) запишется и дальше, что мы и наблюдаем в симуляции выше.
HardWareMan
16.02.2018, 21:09
andreil, это полевые транзисторы. В них заряд остается, если цепь разорвана. Не на всегда, но в пределах тактовой частоты считай что статично (эффект регенерации). Именно поэтому, LATCH на них всего 2 транзистора, вместо 6х. Ну и отсутствие заряда как раз и рассматривается - блокировка произойдет.
andreil, это полевые транзисторы. В них заряд остается, если цепь разорвана. Не на всегда, но в пределах тактовой частоты считай что статично (эффект регенерации). Именно поэтому, LATCH на них всего 2 транзистора, вместо 6х. Ну и отсутствие заряда как раз и рассматривается - блокировка произойдет.
Возможно и так, в таких схемах быстро запутываюсь, нет опыта. Опирался на схемное представление в углу...
HardWareMan
16.02.2018, 21:25
Возможно и так, в таких схемах быстро запутываюсь, нет опыта. Опирался на схемное представление в углу...
А схемное то как раз еще проще. Конструкция из 2х транзисторов, когда один разрывает цепь затвора у второго ничто иное как инвертирующая прозрачная защелка. Т.е., пока действует лог.1 на управляющем входе (транзистор в цепи затвора открыт) сигнал беспрепятственно проходит и может меняться сколько угодно. Как только управляющее напряжение падает до лог.0 (транзистор закрылся) последнее состояние сигнала запоминается и выход его будет удерживать до следующей активации. А так как обе защелки работают в разные фазы, то по факту они друг друга поддерживают в кольце.
Меня интересует комментарий Vslav: нет ли тут ошибки? Ведь при установке HLDA произойдет блокировка на элементе
Ошибки нет, ключ к пониманию - транзистор T375, первый лист внизу слева. Нарисован по-идиотски, не влез где положено. Перерисовал его поближе к формирователю HLDA.
- - - Добавлено - - -
andreil, это полевые транзисторы. В них заряд остается, если цепь разорвана. Не на всегда, но в пределах тактовой частоты считай что статично (эффект регенерации). Именно поэтому, LATCH на них всего 2 транзистора, вместо 6х. Ну и отсутствие заряда как раз и рассматривается - блокировка произойдет.
Это ты еще LSI-11 древнейшую схемотехнику не видел. Ковыряю потихоньку CP1611, AKA 581ИК1, вот там жесть, понимаешь что это латч, а как оно конкретно работает - непонятно совсем. Потому что там надо знать тип транзистора, кто из двух передавливает, из фото неясно, приходится угадывать по смыслу. Хорошо хоть подробное описание чипсета есть, сильно помогает.
HardWareMan
17.02.2018, 06:51
Ошибки нет, ключ к пониманию - транзистор T375, первый лист внизу слева. Нарисован по-идиотски, не влез где положено. Перерисовал его поближе к формирователю HLDA.
Семён Семёныч! (с)
http://jpegshare.net/images/8e/1c/8e1cbed0beee5bcd5ba0d914691a8516.png
Тогда NAND превращается в AND, а после него нарисовывается NOR и все работает. Спасибо. Вот много раз матерился, что блин, не работает поиск в этом PDFе! И вроде не картинка, а текст не ищет. :( В чем ты его создавал? Может это можно как-то исправить?
Вот много раз матерился, что блин, не работает поиск в этом PDFе! И вроде не картинка, а текст не ищет. :( В чем ты его создавал? Может это можно как-то исправить?
Для PCAD-а есть бесплатный вьюер - http://techdocs.altium.com/display/ALEG/Legacy+Downloads+for+P-CAD
Как для схемы, так и для топологии, там есть поиск, список цепей, содержимое цепей, и навигация.
Файл создавался PDF-creator, исправить нельзя, шрифты пикада векторные, они выводятся наружу как векторная картинка, а не текст - при большом увеличении видны вектора букв. Поэтому поиск в pdf работать не будет, и я выложил полные пикадные базы. Я думал ты давно в пикад смотришь, по pdf тяжело, он же только "на посмотреть" :)
- - - Добавлено - - -
[после него нарисовывается NOR и все работает
Ага, я тоже подвис, но я то помню что машинку HOLD/HLDA я тестировал и все жужжало, поэтому начал искать засаду :)
- - - Добавлено - - -
И вроде не картинка, а текст не ищет
Похоже у тебя экранный замыливатель включен, действительно выглядит как текст, надо же :)
HardWareMan
17.02.2018, 11:51
Похоже у тебя экранный замыливатель включен, действительно выглядит как текст, надо же :)
Акробат Х так делает сам. В общем, все жужжит по части растактовки, я сейчас вылизываю ALU. Гоняю команды в ручном режиме. :)
http://jpegshare.net/images/25/e3/25e38184ebd4a2779e31248d1291494b.png
HardWareMan
17.02.2018, 13:59
Кстати, общий план, чтобы оценить масштабы:
http://hwm.us.to/vm80/VM80_1.jpg (http://hwm.us.to/vm80/VM80.jpg)
Использовал пока синхронные латчи, чтобы облегчить симуляцию и быть максимально аутентичным. Когда схема приведется в рабочее состояние, я ее причешу и переведу полностью на синхронные триггеры.
Что делается... Того и гляди ВМ2 в виде подобной логической схемы кто-то сделает)
HardWareMan
17.02.2018, 15:46
Что делается... Того и гляди ВМ2 в виде подобной логической схемы кто-то сделает)
https://www.youtube.com/watch?v=UtRFvxQb59M
HardWareMan
17.02.2018, 20:01
Перерисовал его поближе к формирователю HLDA.
Ты, ежели чего-то исправлял или дополнял то сделай PDF, я у себя тоже обновлюсь.
Ты, ежели чего-то исправлял или дополнял то сделай PDF, я у себя тоже обновлюсь.
А я сделал, там на гитхабе выложено.
HardWareMan
18.02.2018, 11:36
Vslav, да я уже разобрался. Только в PDFе в новом третий лист с багами. Обнови.
http://jpegshare.net/images/2b/91/2b91026f7a8434c09324809c182b4693.png
Vslav, да я уже разобрался. Только в PDFе в новом третий лист с багами. Обнови.
Почему-то галочка Rotate слетела, поправил.
Пришло время делать КСМ на основе нового ядра :) Почитал документацию, 16КБ для экрана жирно, хватит 4К с сохранением функционала (48 80-символьных строк внутри ), курсор немного по другому будет управляться, ну и PS/2 клавиатура вместо 7004. Фирмваре внутренний конечно патчится.
Основана на реверсе, но сделана оптимизация. Когда я сделал форк на вишбон, то выполнил ряд оптимизаций - убрана фаза F1, убраны HOLD/HLDA/WAIT, ну и еще выбросил по ошибке просыпалку, считая что она тоже не нужна. Теперь выяснилось, что это я погорячился, вернул просыпалку на место. Экзорцист-то все тестирует, кроме HLT. Пришлось еще тестик на HLT добавить.
Вы отключили HOLD/HLDA ? А как же ПДП, например, на РК-86 ? В соседней ветке люди "вериложили" ВТ57. Не будет работать?
Вы отключили HOLD/HLDA ? А как же ПДП, например, на РК-86 ? В соседней ветке люди "вериложили" ВТ57. Не будет работать?
HOLD/HLDA "отключен" только в варианте для Wishbone. Оно там просто не нужно, потому что принцип работы шины немножко другой.
Vslav, огромное спасибо за классный проект ВМ80 на верилоге. Большой объем за относительно короткий срок. Буду продвигать по возможности.
red.err404
25.03.2019, 10:06
Vslav, спасибо за проект кр580вм80а на верилоге. На базе вашего проекта сделал реализацию кр580вм80 для Proteus, Logisim(evolution version) и Atmega2560 (тестовые версии). Для этого была написана программа для сохранения структуры схемы в формат *.circ и набор лог.компонентов для создания структуры на с. Для Atmega2560 такой подход по скорости плох, но для простых тестов на макетке, думаю пойдет. Корпус для Proteus'а взял отсюда:http://www.nedopc.org/forum/viewtopic.php?t=10110.
https://vk.com/video_ext.php?oid=27141210&id=456239205&hash=03ace0bfcfc8538f
https://vk.com/video_ext.php?oid=27141210&id=456239206&hash=7b856064cebf7679
https://vk.com/video_ext.php?oid=27141210&id=456239207&hash=56179faaed5979f5
Файлы проектов в архиве:
https://drive.google.com/open?id=1BYoub1fusAP4eU6NMCtfpQvfTeJ8bYjf
Спасибо, я вечерком из дома архивчик посмотрю. Если там реальный проект 580вм80 под логисим - то это очень круто и полезно. Хотел бы утащить в свою репку на гитхабе, не хотите законтрибутить?
Пытаюсь открыть с logisim 2.7.1 (вроде как последний с сайта) - "Встроенная библиотека ТТЛ недоступна в этой версии". Дальше схему открывает, но висит напрочь...
red.err404
25.03.2019, 21:48
Я не против. Но проект пока тупой перевод в лоб, verilog -> json (структура схемы см. рисунок 1) -> circ (см. рисунок 2).
68586
Результат такого преобразования на рисунке ниже
68587
Проект под Logisim evolution version https://github.com/reds-heig/logisim-evolution (позволяет потом схему заливать в ПЛИС)
Проект под Logisim evolution version https://github.com/reds-heig/logisim-evolution (позволяет потом схему заливать в ПЛИС)
Скачал там уже собранный jar, запустил, при открытии проекта пишет что все равно нет встроенной TTL библиотеки, при попытке открыть страничку main - выпадает окно что симулятор закрашился :(
red.err404
25.03.2019, 22:08
Если такое сообщение,
https://pp.userapi.com/c850620/v850620362/edcf1/yXYRAJKAy4w.jpg
То меню -> моделировать -> сбросить моделирование -> включить моделирование -> такты включены
Нет, сначала диалоговое окно дважды выпадает -
"K580VM80A: Встроенная библиотека TTL не доступна в этой версии."
Потом открывается пустое поле, но слева есть список в котором есть K580VM80A, выбираешь main - открывается новое окно с какими-то элементами, но такой картинки с системой на ВМ80 нет, потом все тупо висит или выпадает сообщение о краше симулятора. Версия 2.14.6, кстати, у них там предсобранная лежит. Качать исходники и собирать 2.15 не буду - с Явой никогда не работал, времени жалко.
Update: таки склонировал репку логисима, обновил JRE, попытался запустить или собрать - gradle падает с исключением - не находит tools.jar. Надо еще JDK ставить. Ну не судьба значит.
Update2: нашел в закладке releases 2.15, на библиотеку уже не ругается, но все равно крашится - "Logisim has crashed. Save your work and restart simulator". Нет, это точно не судьба.
Roman_msk
15.04.2019, 11:41
Добрый день,
есть возможность помочь в реализации КР580ВМ80А на ПЛИС или CPLD? может кто провел полную интеграцию на Альтере ... был бы очень благодарен за символьный компонент, ибо проще понимается когда работаешь в символьном редакторе, может кто может подсобить с библиотекой готовой для Квартуса?
Здравствуйте. Решили попробовать реализовать данный процессор на технологии 180 нм. Есть несколько вопросов понимающим людям:
1) есть ли схема на вентилях или более подробное разбитие на блоки самого процессора.
2) зачем в некоторых инверторах на затвор и сток в одном случае +12В, в другом на затвор +12, а на сток +5?
Здравствуйте. Решили попробовать реализовать данный процессор на технологии 180 нм. Есть несколько вопросов понимающим людям:
1) есть ли схема на вентилях или более подробное разбитие на блоки самого процессора.
2) зачем в некоторых инверторах на затвор и сток в одном случае +12В, в другом на затвор +12, а на сток +5?
ИМХО, это не подходящие вопросы для реализации на 180нм. Надо начинать с выбора/доступности фаба , получения от него PDK и решения вопроса с софтом для проектирования. Сам процессор простой, пересинтезировать его на предложенном инструментарии на полученный PDK не особо большая проблема.
PDK есть, софт - Cadence
Отлично, тогда берете HDL-код, изменяете желаемым образом и синтезируете по стандартному маршруту. +12В на 180нм крайне маловероятно что понадобятся :)
Отлично, тогда берете HDL-код, изменяете желаемым образом и синтезируете по стандартному маршруту. +12В на 180нм крайне маловероятно что понадобятся :)
Интересует именно вручную скомпоновать схемотехнику и спроектировать топологию (кодом владеем оочень плохо). Поэтому интересует подробное описание блоков https://hsto.org/getpro/habr/post_images/ac0/e00/b08/ac0e00b0863c190940c844892378996d.jpg
https://m.habr.com/ru/news/t/509748/
Гугл даёт возможность выпустить чип в "железе"!
Гугл даёт возможность выпустить чип в "железе"!
Интереснее выпустить КР580ВМ1 - вот это редкость, но его вроде в распотрошенном виде нет.
LeoN65816
06.07.2020, 14:03
Гораздо интереснее было бы получить вот такой вкусный чип - W65C832 (http://dtsheet.com/doc/644045/etc-w65c832pl-10), 8/16/32-битный 6502 (разработан, но не выпущен в серию) - вот это конфетка!
https://m.habr.com/ru/news/t/509748/
Гугл даёт возможность выпустить чип в "железе"!
Возникает два вопроса:
1. Зачем это надо гуглу?
2. Есть ли смысл выпускать какой-то ретрочип по нормам 130нм (а другими чипами на этом форуме не занимаются), или же проще сделать его на FPGA, как и делали раньше.
Три проблемы:
- ретрочипы мало кому интересны в кремнии, очень маловероятно что одобрят, и есть вопросы лицензионные вопросы по архитектурам
- PDK как таковой еще не открыт, опубликована только одна ячейка
- непонятно что с инструментарием, софт для разработки должен быть лицензионным с подтверждением, это денег обычно стоит больше чем испечь сам проект в MPW. Ну есть старенький VLSI Magic, можно попробовать, но...
Да, я на самом деле тоже так думаю. Гугл ищет наверняка новый, полностью Open Source проект. Благие намерения в этом, конечно есть, сделать выпуск кастомных чипов более доступным. Ну только действительно, зачем, смысл есть только при достаточно массовом выпуске, а для единичных экземпляров дешевле FPGA. Ну и показать, что гугл корпорация добра, которая продвигает выпуск OpenSource чипов для IoT завязанных на сервисы гугла:)
hitomi2500
06.07.2020, 19:39
Возможно гугл просто пробует понизить порог входа на свой фаб. Чтобы запустить замкнутый круг "большие объёмы - низкие цены", надо сначала поработать в убыток. А опенсорс возможно чтобы не было наплыва любителей халявы, а ещё чтобы подтолкнуть комьюнити к развитию, иначе опять же больших объёмов не будет. Если взлетит - это конечно будет здорово.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot