Titus(09.10.2024)
Шанс накосячить в трансах гораздо выше чем в ячейках, но да, ошибки случаются, исправляются. Цифровая логика она, знаешь ли, очень логичнаяЕсли где-то косяк, то его сразу видно на прогоне в тест бенче или логисиме.
- - - Добавлено - - -
P.S. Если интересно какой у нас workflow, то его можно наблюдать из раздела по IDU CLA: https://github.com/emu-russia/SEGACh...arry-lookahead
1. Получается топология (необязательно, если вместо кастомного дизайна используются стандартные ячейки)
2. Из топологии выделяются логические элементы (в IDU CLA это куча nand, not, nor)
3. Определяются порты (input, output) исследуемого куска схемы
4. В утилите Deroute получается netlist. Этот шаг можно представить по аналогии с дизассемблированием программ - получается как бы "исходник" (дизасм)
5. Утилита Deroute умеет экспортировать готовый к употреблению Verilog исходник ( https://github.com/emu-russia/SEGACh...list/idu_cla.v )
6. Полученный верилог можно запихать куда угодно (для симуляции например). В частности верилог был запихнут в Xilinx PlanAhead и она сама "нарисовала" логическую схему которую можно вдумчиво вкурить, разобрать на части, проверить в логисиме. Или сразу использовать верилог в прикладных целях.
Такой подход мы используем где-то последние два года и он МЕГА эффективный для изучения микросхем.
Titus(09.10.2024)
Т.е. базовым элементом отреверсенной схемы является логический n-входовый элемент?
Ну это тоже неплохо.
- - - Добавлено - - -
В основном да. Но могут быть нюансы, если, например, перепутал полярность тактового сигнала, и что-то сдвинулось на пол-такта. Вроде и работает по скорости так же, а тайминг чуть нарушен.
Не обязательно один логический, это может быть композитная ячейка составленная из кучки nand,nor,mux и часто повторяющаяся (например DFF). Тут применяется подход, схожий с "макро-программированием" (макросы).
Про полярность сигнала это старая боль, нужно просто глаз набить на это. Есть простое правило как не запутаться в полярности - если сигнал проходит not, nor или nand, то не важно с какими другими сигналами он замешивается - на выходе полярность поменяется.
То есть если условно на вход какой-то схемы пришёл сигнал "a" с точно известной полярностью и нужно узнать полярность выходных сигналов, нужно всего-лишь пробежаться по цепочке элементов и каждый раз менять полярность после прохода через not,nand,nor.
(причём это можно делать и задом-наперёд)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Предварительное описание особенностей работы M-циклов:
- Каждый M-цикл отвечает за новый доступ к памяти. Поэтому, собственно, он и называется M-циклом.
- M1 отвечает за выборку кода операции. В общем случае длится 4 такта, но может увеличиваться до 6 тактов. Во время этого цикла выполняется текущая и завершается предыдущая стандартная АЛУ-операция.
- M2 отвечает за выборку байта смещения для индексной адресации. В общем случае длится 3 такта. Он используется как в методах адресации с индексными регистрами, так и в командах относительного перехода (JR, DJNZ). Если цикл используется в команде условного перехода, и условие не соблюдено, то является последним циклом команды.
В этом цикле после чтения байта смещения из памяти происходит его загрузка в ALUB, а младший байт адреса (PC.L или IDX.L) загружается в ALUA. После чего складывается младшая часть адреса и байт индекса. Далее устанавливается знак для следующей АЛУ-операции (плюс или минус) в зависимости от старшего бита байта смещения, если это команда относительного перехода.
- M3 отвечает за продолжение вычисления исполнительного адреса для индексной адресации. Обычно длится 5 тактов.
Так как этот цикл используется для вычисления исполнительного адреса, в нем блокируется доступ к внешней памяти по адресу, автоматически загруженному в PCR в предыущей команде.
В этом цикле полученный в АЛУ младший байта адреса сохраняется PC.L или WZ.L, затем в АЛУ загружается старшая часть адреса, и константа 0, для сложения со старшей частью адреса, и снова складывается и записывается в PC.H или WZ.H.
В результате, если это команда перехода, в регистре PC получаем новый адрес. Если же это команда индексной адресации, то в регистре WZ получаем исполнительный адрес.
- Циклы M2 и M3 могут быть пропущены, если команда не использует индексную адресацию.
- M4 отвечает за байтовый доступ к памяти в стандартных командах типа ADD A,(HL) или ADD A,(IX+nn). Обычно длится 3 такта.
- M5 пока не изучался, но, похоже используется в 16-битных командах, таких как ADD HL,dd, PUSH/POP HL, LD (nn),dd и т.д.
- - - Добавлено - - -
p.s.: Небольшая ремарка. Некоторые действия могут инициироваться в одном M-цикле, а завершаться в следующем, т.к. чуть ли не большая часть активности процессора всегда задержана на пол-такта или такт относительно такта, инициировавшего ее.
M-цикл это "машинный цикл", из официального программинг мануала от создателей: https://www.zilog.com/docs/z80/um0080.pdf
И так так тоже подходит по смыслу)
- - - Добавлено - - -
Как не набивай глаз, невнимательность никто не отменял. Особенно при работе с большими схемами. У меня это почти единственный тип ошибок при переводе транзисторной схемы в логическую. И да, 99% таких ошибок, если не 99.99% приведут к неработоспособности того или иного участка схемы и будут замечены.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)