|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Самодельный процессор nedoRISC-0 (NEDONAND)
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Обновил архивчик: http://nedopc.org/nedopc/files/logisim-nedonand.zipПотихоньку прикручиваю АЛУ (это маленький прямоугольничек у правого края схемы)
|
18 Mar 2016 01:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Ещё могут быть ситуации, когда следующая за операцией с АЛУ команда будет копирование в регистр A, которая по идее должна затереть то, что посчитало АЛУ - это тоже должно быть поддержано... P.S. Хотя этим случаем можно пренебречь и скажем если программист сразу после A=A+1 пишет A=0, то он как говорится "сам дурак" (в этом случае A=0 будет проигнорировано т.к. в тоже самое время АЛУ запишет значение в A из второй ступени конвейера) P.P.S. Однако последовательности NAN B и затем A=~A таки будут (эта пара команд реализует AND B) - можно скажем только такой особый случай поддержать (при этом инверсию можно делать прямо на выходе АЛУ, т.е. команда A=~A по обычному пути через временный регистр T в этом случае выполняться небудет, а будет являтся как бы суффиксом, говорящим второй ступени конвейера, что вывод АЛУ перед записью в регистр A надо инвертировать)
|
18 Mar 2016 06:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Потихоьнку горожу в Logisim обёртку вокруг 4-битного АЛУ, подсоединяющую его к 8-битной системе, и что-то кол-во микросхем в этой обёртке уже перевалило за половину количества, составляющего само АЛУ - так что наверное будет проще второй такой-же 4-битный АЛУ подцепить параллельно и не мучиться...
P.S. Хотя микросхем всё равно меньше с одним АЛУ - в АЛУ их 30, а в схеме обёртки порядка 20, т.е. это 30+20=50 (одно АЛУ плюс обёртка) против 30+30=60 (два АЛУ в параллель)...
|
19 Mar 2016 10:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Вроде прикрутил 4-битное АЛУ: http://nedopc.org/nedopc/files/logisim-nedonand.zipПока не все случаи проверял - может чего и не работает... P.S. Для флагов изобрёл схему "Select-Delay" - это чтобы каждый флаг мог записываться из двух разных источников двумя различными стробами (т.е. если пришёл строб C1, то на далее стоящем "прозрачном" D-триггере должен записаться D1, а если пришёл C2 - то D2): Снизу нанды подключены как ИЛИ, а сверху - как мультиплексор 2:1 плюс небольшая задержка, чтобы спад строба поймал данные, которые по этому же спаду исчезнут...
|
19 Mar 2016 15:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Logisim позволяет подгружать в ПЗУ прошивку в виде вот таких вот файлов: Это программка "HELLO" - кто хочет, может "дизассемблировать" P.S. Вычитал в помощи к логисиму, что в таких файлах можно писать комменты после # Это значит я уже могу писать программки для НЕДОНАНДА за пределами логисима
|
19 Mar 2016 16:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Перезалил симуляцию т.к. в предыдущей версии регистр A у меня не записывался по результатам работы АЛУ... P.S. Наткнулся на интересную фичу - если сразу после команды АЛУ поставить команду копирования регистра флагов F, то оно скопирует неготовые флаги т.к. вторая ступень ещё не успела отработать до конца, например сразу после XOR 0 оно скопирует из F значение 0x08 (полуперенос H=1), а не 0x18 (H=1 и C=1), а вот в следующем такте уже будет скопировано 0x18 P.P.S. Получается, что команда XOR 0 (алиас SEC) не только флаг C устанавливает, но и флаг H, что логично... P.P.P.S. Команда NAN 0 может иметь алиас A=-1 т.к. это именно то, что она делает Плюс она устанавливает флаги S, C, H и сбрасывает флаги Z и V...
|
19 Mar 2016 19:01 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Вроде обработал все пограничные случаи как копирование из аккумулятора следом за командой АЛУ (в этом случае копирование из АЛУ идёт одновременно и в аккумулятор, и в регистр назначения) и следом друг за другом идущие команды АЛУ, которые в качестве аргумента должны брать не предыдущее значение аккумулятора, а выход предыдущей команды АЛУ. Инверсию в случае NAN R и A=~A тоже поддержал...
P.S. Пришлось для АЛУ не просто сохранять значения аккумулятора и второго аргумента в специальных регистрах, а сохранять их в двойных master-slave регистрах A' с A'' и R' с R'', чтобы небыло зацикливания и самовозбуждения в некоторых хитрых случаях...
|
19 Mar 2016 19:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Прикрутил поддержку NOP с кодом 0x88 (бывшая A=0 где 0 это регистр): http://nedopc.org/nedopc/files/logisim-nedonand.zipТеперь работают все команды кроме RST n, RET, SAEFF и SANFF P.S. Точнее вместо SAEFF и SANFF выполняются изначально запланированные G=F и G=~G (по сути бесполезные) P.P.S. На самом деле этого более чем достаточно, чтобы начать кодить - пусть это будет NEDONAND lite P.P.P.S. Насчитал в этом дизайне 333 микросхемы 74F00 на платках NEDONAND и ещё 51 микросхема 74F00 надо поставить на макетку, для того чтобы все эти платки соединить, т.е. всего 384 микросхемы (или 1536 NAND-гейтов), которые должны жрать порядка 5 ампер...
|
19 Mar 2016 23:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Вот думаю а не отдать ли пока незадействованный строб на RET/RST (сверху провод TODO) под реализацию режима HALT? Будет удобно для тестового прогона спецпрошивки - когда оно пишет очередные результаты на 7-сегментных индикаторах и вводит себя в ступор, а оператор, после сверки результатов, жмёт кнопочку и программа бежит дальше...
|
20 Mar 2016 11:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
|
26 Mar 2016 17:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
| | | | Shaos wrote: Видимо "slow ALU" небудет (во всяком случае пока), т.е. "fast ALU" уже достаточно медленный, чтобы вместить в себя операции сложения и вычитания: Стробы второй ступени: HALF1 - это подача на вход АЛУ младшего ниббла аргументов (в случае RRC - старшего); ASTO1 - сохранение младшего ниббла аккумулятора (в случае RRC - старшего) и флага H; HALS2 - это подача на вход АЛУ старшего ниббла аргументов (в случае RRC - младшего); ASTO2 - сохранение старшего ниббла аккумулятора (в случае RRC - младшего) и флагов C,V,Z и S.... | | | | |
Не нашёл осцилляторов на 6.666 МГц - купил для экспериментов 5, 6, и 6.144 МГц. А среди кристаллов ещё попались 6.5 МГц и даже 6.5536 МГц - тоже купил по несколько штучек...
|
27 Mar 2016 03:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Взял табличку с википедии т.к. там использовано такое же как и у меня распределение сегментов на биты ( https://en.wikipedia.org/wiki/Seven-segment_display) и пририсовал к табличке шестнадцатиричные коды, чтобы быстро можно было код "символа" вычислить, а также подсветил цифры и символы, похожие на буквы:
|
27 Mar 2016 05:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Мысль - а что если предполагаемый доступ к памяти (когда F=~F подменяется на A=[DE] и F=G на [DE]=A) сделать через префиксы - скажем MEMRD (вместо F=~F) и MEMWR (вместо F=G), которые меняют источник или приёмник в следующей следом команде (подобным образом вроде бы работает HPC46003)? т.е. например если перед A=B стоит MEMRD, то A=B будет исполнена как A=[DE], а скажем A=~A как A=~[DE], и тоже самое для MEMWR - если оно стоит перед A=B, то оно превращается в [DE]=B. Плюс в том, что когда прочиталась инструкция префикса, система уже знает, что в течение 2 циклов будет обращение к памяти и уже можно выдавать /CS и 16-битный адрес из DE на внешнюю память в первом же из этих циклов. Инструкции по работе с АЛУ также могут быть изменяемыми подобным образом (как минимум те, где используется второй регистр в качестве аргумента, а не только A). Потерянную информацию о регистре (регистре-источнике в случае MEMRD и регистре-приёмнике в случе MEMWR) из преобразованной следом идущей команды можно заюзать как дополнительные 3 бита адресации, что расширит непосредственно адресуемое адресное пространство с 64Кб до 512Кб... P.S. MEMWR пожалуй к АЛУ по прямому назначению неприменим т.е. результат работы АЛУ непосредственно во внешнюю память в следующем цикле записать будет невозможно т.к. оно будет готово только через один цикл - скорее всего оно будет работать как сохранение второго аргумента по адресу DE - это также может иногда пригодиться...
|
27 Mar 2016 13:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
| | | | Shaos wrote: Ну опять же - надо подкручивать разрешение по времени, чтобы была видна задержка - а она менее 200 нс судя по всему (тестю пиком щас и пока на следующем шаге пика АЛУ уже всё посчитал, а это 200 нс в верхнем пределе), что значит надо гнать сигнал раза в два более быстрый чем 5 МГц, т.е. 10, а в 10 луч будет слабенький... P.S. Ха, поподавал входные воздействия не подряд, а в разнобой (то 0x00, то 0xFF) и обнаружил, что в некоторых случаях 200 нс недостаточно чтобы АЛУ отработал и зафиксировал значения на выходах, но вот 400 нс похоже достаточно всегда! Выходит, что моя первоначальная оценка "на всём АЛУ - 4*31.5+4*3.5=140 нс (в худшем случае 180+20=200)" оказалась излишне оптимистичной и реальность несколько хуже худшего случая, но мне сейчас важно, чтобы оно не было хуже 300 нс, но проверить я это смогу только с помощью цифрового осциллоскопа... | | | | |
Померял осциллоскопом сложение 1111 и 0000 с наличием и отсутствием флага C - вроде не так страшно выходит:
|
31 Mar 2016 19:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
Может быть виновато странное недотягивание до уровня 5В?...
|
31 Mar 2016 19:27 |
|
|
Who is online |
Users browsing this forum: No registered users and 93 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|