Перейти к содержанию
    

Койяанискаци - ТТЛ-процессор с душой акына

В противоположность известных всем процессоров «Intel», марку которых довольно легко запоминать и выговаривать, «Койяанискаци» задумывался как процессор, имя которого сложнее произнести, чем разобраться в его архитектуре и научиться его программировать на самом элементарном уровне машинного кода редакторами дампа, чтобы проверить, действительно ли стоит прогибаться под радиолюбительские ТУ и невозможно сформировать красивую систему команд, понятную на уровне интуиции?
Не имеется ввиду код стиля «O'Kей, процик, вычисли мне среднее факториальное», а планировался машинный код с минимальным уровнем вхождения в основы искусства его программирования, не требующего жёсткой зубрёжки и заучивания всех команд.

Введение
Начальный дизайн процессора задумывался как шуточный автомат со сквозным байт-кодом и возможностью кодировать дамп сценария даже без необходимости обращения к таблице команд до полного их заучивания. Ставилась простая задача разработки простого процессорного устройства, в котором любые из 30 РОН можно заменить на всякую периферию из датчиков, двигателей и соленоидов. В таком дизайне имеется уникальная возможность организации почти непосредственного взаимодействия всех требуемых устройств без надобности в высоких частоте и производительности.

Архитектура процессора
Весь процессор основан на регистровом файле из четырёх функциональных групп по десять ячеек в каждой. Хотя операции АЛУ возможны над любыми ячейками, правила корректного оперирования с ними соблюдать необходимо более-менее строго. Здесь стоит просто запомнить логику и назначение этих функциональных групп:

  • A₀…₉ - Аккумуляторы (A₀ хранит флажки статуса АЛУ)
  • B₀…₉ - Base/База доступа к памяти (B₀ хранит Базу возврата из подпрограммы)
  • C₀…₉ - Counter/Счётчик/Смещение байта в памяти (C₀ хранит Смещение возврата из подпрограммы)
  • D₀…₉ - Devices/Доступные устройства с мгновенным откликом (можно организовать кеш)

Так как процессор достаточно прост и не имеет встроенных аппаратных механизмов организации стековых операций, регистры B₀:C₀ сохраняют адрес, на котором была размещена операция обращения к подпрограмме. Программист при необходимости сам обязан позаботиться о всех операциях работы со стеком и описать их алгоритмом. Все эти сложности легко обходятся использованием стандартной библиотеки.

Система команд
Практически все команды кодируются WYSIWYG-стилем акына:«Что вижу, то значит». Шестнадцатеричная кодировка отчасти является аббревиатурой самой команды и всё задумывалось так, чтобы большинство команд просто совершали понятные действия.

  • 00: HLT (останов программы) - крайне логичный и гармоничный код!
  • 01: Приращение единицы к активному регистру-приёмнику
  • 02…09: Префикс повтора операции от 2 до 9 раз или пропуск группы операций по условию
  • 10…99: Используется BCD-код приращения к активному регистру-приёмнику - код 56 означает именно 56₁₀, а не 0x56₁₆
  • A0…A9, B0…B9, C0…C9: Безвременные префиксы выбора активного регистра указанной группы - A₀…A₉, B₀…B₉, C₀…C₉ соответственно
  • D0…D9: Выбор активного устройства группы Devices - D₀…D₉
  • AA…AD, BA…BD, CA…CD, DA…DD: Безвременные префиксы выбора сочетания операндов для АЛУ-операций - A,A…D,D соответственно
  • E0…E7: Обращение к расширению (Extension) через подпрограмму - CALL 0xE000…0xE700
  • F1…F9: Обращение к функции (Function) с указанным индексом - CALL 0xF100…0xF900
  • E8…EF: Условный префикс к исполнению кода следующей операции - Enable if SF/PF/CF/ZF
  • F0: Завершение текущей функции (Function Over - как Game Over)
  • AE/BE/CE/DE: Извлечение (Extract) данных из памяти в указанный регистр
  • AF/BF/CF/DF: Запись/фиксация (Fix) данных указанного регистра в память
  • FA…FF: Вызов прочих функций - CALL 0xFA00…0xFF00
  • 0A/1A/2A…9A: АЛУ-операция "Сумма" (Add) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0B/1B/2B…9B: АЛУ-операция "Вычитание" (suB) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0C/1C/2C…9C: АЛУ-операция "Конъюнкция" (Conjunct/and) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0D/1D/2D…9D: АЛУ-операция "Дизъюнкция" (Disjunct/or) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0E/1E/2E…9E: АЛУ-операция "Исключающее ИЛИ" (Exclusive or/Eor/xor) над группой операндов - индекс правого операнда указывается явно 0…9

Основы программирования
Однако, тут не стоит думать, что «процессор акына» совсем ничего не требует от продвинутого пользователя-программиста: Минимальный порог вхождения преодолеть всё-таки придётся… А значит, придётся чуточку поднапрячься и преодолеть порог!
(Здесь подразумевается, что читатель уже имеет все базовые понятия и принципы, позволяющие ориентироваться в синтаксической конструкции и строить выражения…)

Сложение величин из регистров A₁ и B₂ традиционно можно представить выражением «A1 += B2» или мнемонической записью «ADD A1,B2», которую и следует оформить в машинный код. Так как архитектура процессора предельно проста и организовалась на польской записи, буквально необходимо сначала предопределить используемые в операции операнды, чтобы потом произвести саму конкретную операцию вычисления.
Так как используется сочетание регистров «A1» и «B2» в порядке «An,Bn», то под их определение следует указать машинный код AB₁₆. Выбор индексов на конкретных операндах выполняется кодами A1₁₆ и B2₁₆, что указывает на буквальность кодов. Так как индекс правого операнда равен двум, то в коде АЛУ-операции «Сумма» его следует указать явно в левой тетраде как 2A₁₆. Тем самым, становится очевидным размещения кода всего выражения как «A1 AB B2 2A». Но так как индекс B₂ указан явно в АЛУ-операции, байт команды «B2» можно исключить из цепочки, так как сам регистр B₂ не является приёмником результата и код сократится до одной из двух комбинаций записи «A1 AB 2A» или «AB A1 2A», так как от расположения префиксов перед операциями результат не изменяется и всё зависит от стиля программиста.

0000 A1      |----vv   ;A1 выбирает регистр A₁
0001    AB   |------v  ;AB задаёт порядок операндов A,B
0002       2A|ADD A1,B2;2A - ADD, где двойка выбирает индекс B₂
           ^----------^

Выражение «A1 = A1 + B2 - B3 & B4 | B5 ^ B6» можно описать последовательностью «A1 AB 2A 3B 4C 5D 6E», так как в каждом следующем коде операции явно указан и индекс правого операнда, что позволяет писать код компактно и производительно.

Максимально доступно каждому любителю
Так как Logisim куда доступнее и проще того же Proteus и компактнее KiCAD, вся схема процессора разрабатывалась в рамках проекта именно Logisim, чтобы проект был по-детски прост и лёгок для использовании заинтересованными любителями. По предварительным подсчётам, если схему проекта попытаться собирать микросхемами серии 74xx или отечественной номенклатуры, понадобится порядка 250 корпусов...
При грамотном подходе проектирования процессоров с применением мультиплексоров и специализированных микросхем РОН, число всех микросхем может снизиться всего до сотни корпусов с повышением производительности без переходов в Z-состояние.
Скачать архив исходной схемы с прошивками можно по ссылке на странице проекта
Если смущает использование ПЗУ для дешифрации команд, имеется набросок схемы с использованием уровня комбинаторики, по которой можно осознать, что и красивую систему команд можно декодировать простейшим способом логических вентилей, без ущерба концептуальной задумки…

Эмуляция?
Никакого программного эмулятора не задумывалось специально, чтобы архитектурно процессор изначально готовился к реализации на физических макетных платах и не содержал в себе решений, которые аппаратно крайне сложно будет реализовывать в силу излишней вольности в эмуляторе. Вся схема разрабатывалась несколько лет в часы досуга эпизодически и несколько раз перерисовывалась вся с чистого листа.

Ссылки
Скачать исходные файлы симуляции можно здесь.
Основная статья размещена здесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 минут назад, MegaVolt сказал:

Он в схематике сделан? 

 

16 часов назад, Alikberov сказал:

вся схема процессора разрабатывалась в рамках проекта именно Logisim

Koyaanisqatsi.png?raw=true

Схема выполнена в наглядном демонстрационном инструментальном виде…

На данный момент прорабатывается практический вариант на мультиплексорах с облегчённым переводом в Proteus с последующей разводкой печатных плат…
Koyaanisqatsi-mux.thumb.png.02fc9a4b1d373c95437c5dd766fc57c9.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в RTL-виде, на VHDL/Verilog/SystemVerolog не планируете представить? Можно было бы синтезировать/собрать на FPGA, с периферией сразу. Да и круг пользователей/испытателей был бы в разы больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, Raven сказал:

А в RTL-виде, на VHDL/Verilog/SystemVerolog не планируете представить? Можно было бы синтезировать/собрать на FPGA, с периферией сразу. Да и круг пользователей/испытателей был бы в разы больше.

Спасибо за идею! Но здесь проблема в моей компетентности…

Спустя 10 лет знакомства с Icarus Verilog и неудачным опытом пробной реализации своего целевого процессора, начал искать альтернативные решения…
Недавно я только понял, что визуальное проектирование схемы мне даётся легче, чем Verilog-модель.
Изначально начал проектирование своего CISC в Atanua, но в нём имелись определённые ограничения. А так как OrCAD имеет много мелких глюков, пришлось искать инструменты попроще.

А «Койяанискаци» в Logisim лепился чуть ли ни как попало: Схему регистрового файла и дешифратора команд я сделал по некоторым концептуальным соображениям. А вот добавление различных мультиплексоров местами и логики производил лишь с детальным изучением состояния схемы при определённой инструкции почти по методу тыка.
И сам процессор задумывался как RISC-ядро к моему CISC, чтобы иметь некоторую индустриальную независимость и концептуальную последовательность, так как CISC-команды продумывались с интуитивно понятным кодированием…

Потому в Proteus схему начал пробно переносить лишь частично, после отладки в Logisim: Именно Logisim позволяет при активной тактовой частоте врезать логику в нужные места, тогда как Proteus требует остановки симуляции с потерей текущего архитектурного состояния…

Лишь недавно я понял, что этот RISC сам по-себе тоже симпатичен и самодостаточен. Потому и выделил его из состава ядра своего CISC и доработал…

P.S.: Самому было бы любопытно увидеть рабочую модель Койяанискация в FPGA на приличной частоте, учитывая лёгкое переключение процессора на Гардвардскую шину…

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У всех FPGA инструментов присутствует схемный редактор. Выглядят как правило анахронизмом, но можно попробовать нарисовать и опробовать на любом ките.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверняка logisim умеет экспортировать в Verilog/VHDL (по крайней мере гугль каких-то видосиков понаходил)

там же есть примеры по засовыванию этого верилога в FPGA (возьмите бесплатную версию например от Интела(Альтеры) - там и синтез и симулятор есть - я так понимаю, что это хобби - заодно и развлечетесь в процессе освоения)

--------------------

подозреваю что такая архитектура (ISA upd: с учетом метода реализации, конечно) полна глюками более чем полностью. исполнение случайной строки (без 00) не повесит машинку намертво?

собственно верилог даст возможность погонять разные тесты и поискать "узкие места"

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, andrewkrot сказал:

У всех FPGA инструментов присутствует схемный редактор. Выглядят как правило анахронизмом, но можно попробовать нарисовать и опробовать на любом ките.

Именнo об этом я и говорю. Например, в OrCAD 10 с диска, которым я начал пользоваться 15 лет назад, были неприятные глюки редактора схем при неаккуратной работе с проводами, приводящие к краху. Позднее скачал OrCAD 16 и понял, что редактор схем вообще не исправлялся, так как детские болячки остались…
Сейчас все эти редакторы имеются лишь как бы для галочки, чтобы разместить пару логик между FPGA-модулями и всё. Всё остальное - в VHDL и Verilog.

К сожалению, заставить Proteus отрабатывать Verilog у меня не получилось.
А Logisim Evolution, хоть как-то и поддерживает Verilog/VHDL, но требует что-то стороннего и с Icarus Verilog сдружить не получилось.

Ещё по журналам Радио за 1987 год я с детства начал разбираться в цифровой схемотехнике, а с 1993 года освоил машинный код в РАДИО-86РК. Прочитал много справочников отца по процессорным технологиям и языкам программирования прежде, чем технически получил к ним доступ: C, Forth, Pascal.
Тем самым, схемы я воспринимаю именно графически и визуально. И никак не могу переформировать мозги под Verilog, которым увлекаюсь всего лишь лет десять…

Прочитал недавно Второе издание архитектуры процессоров и Казанское учебное пособие по Verilog.
Но проблема в том, что никак не могу полностью войти во все тонкости горизонтального программирования, где во всём листинге всё происходит одновременно по тактовым импульсам. И нету средств отладки Verilog, где можно в любом месте листинга узнать любое значение в любой момент, как при отладке JavaScript.
Только даётся выходной график или консоль отладки…

Проблема ещё в том, что физиологически я не могу преодолеть некую преграду…
Говоря грубым языком физиологии: Программы пишу левым полушарием, а схемы разрабатываю - правым.
И никак не могу совместить это… Не могу установить физически связь обоих полушарий в разработке схемы…

Proteus удаляет все провода при удалении какого-то элемента, а автозамена одного элемента на другой ведёт себя странно. При перемещении элементов все проводники автоматически перераспределяются и иногда генерируют настоящий лабиринт.
KiCAD, к сожалению, тоже имеет свои тонкости при прорисовке схемы…
Logisim, как это часто бывает с любительскими программами, работает очень просто и приветливо. Провода удалять можно повторной их прорисовкой. Элементы легко перемещать и заменять прямо в процессе активной симуляции.

Конечно, можно было бы пойти путём PICO-8 и сделать простой онлайн-эмулятор, чтобы нарабатывать хоть какой-то софт. Но с эмуляторами (ZX-Spectrum, Sega и т.д…) я знаком давно и писал свои (i8080 и i8086) - знаю критерии ограничений программной реализации.

P.S.: Так-как сам этот процессор - побочный продукт, продумываемый второй год. А перерисовать с нуля его можно за сутки по памяти.
То, по-идее, его можно собрать на коленке из типовых ТТЛ-микросхем в условиях дремучего леса.
Потому, я пока не занимался вопросами его эмуляции в том же HTML5, так как гораздо приятнее видеть именно работающую схему, пусть пока лишь нарисованную…

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, yes сказал:

подозреваю что такая архитектура (ISA upd: с учетом метода реализации, конечно) полна глюками более чем полностью. исполнение случайной строки (без 00) не повесит машинку намертво?

Та же x86 с появлением i8086 имело вопиющий глюк: Выполнение кода в чистой памяти с «00» всюду означало «ADD [BX+SI],AL» с памятью.
Это для меня всегда было странным, так как в i8080/z80 код «00» - «NOP».
Однако, для большей стабильности и безопасности код «00» должен означать Останов. В своём CISC именно так и сделал.
В данном процессоре изначально так и было, но этой весной я решил, что как и в i8080/z80 с их «RST 0», здесь «00» будет просто вызов подпрограммы по адресу «0000», которая проверит точку возврата по B₀:C₀ и зациклится, так как только при сигнале Сброса в B₀:C₀ бывают нули, что не помешает старту БСВВ.

Ещё можно учитывать странные комбинации, типа «REPEAT 9 MOV A1,B1» с пересылкой данных девять раз. Или «REPEAT 8 ARG A,B» с выбором аргументов восемь раз.
Всего таких комбинаций - более 500. Тем самым, их легко аппаратно перехватывать внешней логикой и ввести инструкции умножения, деления или обработки строк, что даёт возможность прокачивания процессора опытными пользователями…

Изменено пользователем Alikberov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однако, для большей стабильности и безопасности код «00» должен означать Останов.


Тогда уж и "FF" тоже должен быть "остановом" (чистая флеш-память практически всегда).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, Obam сказал:

Тогда уж и "FF" тоже должен быть "остановом" (чистая флеш-память практически всегда).

Тaк, в i8080 код «FF» - «RST 0x0038», а в z80 сигнал «INT» в режиме «IM 2» использует значение регистра «I» как ссылку на таблицу.

Койяанискаци одновременно и прост, и гибок в этом плане, совмещая в себе плюшки соседних архитектур.
Особенностью процессора является то, что у него нет команд «JMP» и «CALL», а все неизвестные команды срабатывают как ловушки на определённый адрес.

  • 00 - аналогично CALL 0x0000 (додумался этой весной)
  • F1 - аналогично CALL 0xF100
  • F2 - аналогично CALL 0xF200
  • F3 - аналогично CALL 0xF300
  • F4 - аналогично CALL 0xF400
  • F5 - аналогично CALL 0xF500
  • F6 - аналогично CALL 0xF600
  • F7 - аналогично CALL 0xF700
  • F8 - аналогично CALL 0xF800
  • F9 - аналогично CALL 0xF900
  • FA - аналогично CALL 0xFA00
  • FB - аналогично CALL 0xFB00
  • FC - аналогично CALL 0xFC00
  • FD - аналогично CALL 0xFD00
  • FE - аналогично CALL 0xFE00
  • FF - аналогично CALL 0xFF00

Тем самым, «HLT» как бы есть, но работает как «CALL 0».
Если по адресу FF00 записать код FF, то его исполнение будет бесконечным - формальный останов…

В процессоре есть ещё плюшка с префиксом REP:

  • 10 00 - аналогично CALL 0x0010 (HLT 1)
  • 20 00 - аналогично CALL 0x0020 (HLT 2)
  • 30 00 - аналогично CALL 0x0030 (HLT 3)
  • 40 00 - аналогично CALL 0x0040 (HLT 4)
  • 50 00 - аналогично CALL 0x0050 (HLT 5)
  • 60 00 - аналогично CALL 0x0060 (HLT 6)
  • 70 00 - аналогично CALL 0x0070 (HLT 7)
  • 80 00 - аналогично CALL 0x0080 (HLT 8)
  • 90 00 - аналогично CALL 0x0090 (HLT 9)
  • … … …
  • 10 FF - аналогично CALL 0xFF10
  • 20 FF - аналогично CALL 0xFF20
  • 30 FF - аналогично CALL 0xFF30
  • 40 FF - аналогично CALL 0xFF40
  • 50 FF - аналогично CALL 0xFF50
  • 60 FF - аналогично CALL 0xFF60
  • 70 FF - аналогично CALL 0xFF70
  • 80 FF - аналогично CALL 0xFF80
  • 90 FF - аналогично CALL 0xFF90

(В представленной схеме префиксы REP имеют коды 02, 03, 04, 05, 06, 07, 08, 09. А так как официально процессор никем не используется, то я имею полное право вносить некоторые радикальные корректировки. В разрабатываемой сейчас упрощённой версии префиксы REP имеют коды 10, 20, 30, 40, 50, 60, 70, 80, 90. Так как это более логично…)

Тем самым, любая неизвестная операция - уже HLT с переходом на смежный адрес. Это даёт возможность ввести аппаратные прерывания и использовать с префиксами до 153 подпрограмм.
Например, в РАДИО-86РК обращение к функции программы МОНИТОР с запросом памяти «CALL 0xF830» кодом «CD 30 F8», аналогично в моём процессоре записывается как «30 F8» как исключение несуществующей операции с кодом «F8» под префиксом «30».

Потому по адресам F000…FFFF должна быть загружена библиотека, которая реализует нормальные «JMP», «CALL», «RET», «PUSH», «POP» и т.п…
В архиве есть файл такой библиотеки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Alikberov said:

Именнo об этом я и говорю. Например, в OrCAD 10 с диска, которым я начал пользоваться 15 лет назад, были неприятные глюки редактора схем при неаккуратной работе с проводами

 

А я не об оркаде, а о инструментах проектирования и верификации FPGA. Если у Вас хватило мужества нарисовать это все в Proteus или в чем там еще, то сможете то же самое проделать и в Quartus(Intel) ISE(Xilinx) или Diamond(Lattice). У всех есть бесплатная лицензия для небольших чипов. Всяких китов на просторах интернета навалом - на любой вкус и цвет. За 2000 целковых можно приобрести довольно неплохой вариант, в котором можно разместить с десяток ваших процессоров. И это будет намного интереснее чем моделировать в протеусе (или в чем там Вы рисуете).. И железо будет реальное, и цель будет достигнута. А заодно и прозрение может придет по поводу Verilog/VHDL. Я имею в виду тот факт, что схематик это жэээсть. Если заработает все в схематике, тогда сможете отдельные блоки попробовать описать на языках. Правда смоделировать поведение не сможете без хотя бы начального знания оных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, Alikberov said:

Тем самым, схемы я воспринимаю именно графически и визуально. И никак не могу переформировать мозги под Verilog, которым увлекаюсь всего лишь лет десять…

Прочитал недавно Второе издание архитектуры процессоров и Казанское учебное пособие по Verilog.
Но проблема в том, что никак не могу полностью войти во все тонкости горизонтального программирования, где во всём листинге всё происходит одновременно по тактовым импульсам. И нету средств отладки Verilog, где можно в любом месте листинга узнать любое значение в любой момент, как при отладке JavaScript.
Только даётся выходной график или консоль отладки…

Проблема ещё в том, что физиологически я не могу преодолеть некую преграду…
Говоря грубым языком физиологии: Программы пишу левым полушарием, а схемы разрабатываю - правым.
И никак не могу совместить это… Не могу установить физически связь обоих полушарий в разработке схемы…

Странно слышать это от человека, мыслящего категориями аппаратными, схемотехническими. Обычно такая проблема наблюдается у людей программных, привыкших к последовательному исполнению описанного алгоритма функционирования. Но - не вы первый, не вы последний. Все это вполне осваиваемо в том числе и программными людьми, чтобы там они про свои мозги не говорили. Вопрос - в мотивации, правильной организации процесса, затраченном времени. А средств, которые помогут - вагон и малая тележка. В том числе - и этот форум. Здесь всегда помогают тем, кто по-настоящему хочет узнать, освоить что-то новое для себя.

Вам обязательно понадобится симулятор. ModelSim/QuestaSim (есть его бесплатный урезанный вариант для Altera/Intel Quartus - вам ведь все равно лучше все это сразу в приложении к FPGA осваивать), Icarus, Verilator (free/opensource), для сильных духом - VCS от Synopsis. Для всего платного есть известные средства излечения от жадности, наконец.

Плюс - хорошее учебное чтиво. К уже названному могу добавить такие материалы для начинающего:

  • Учебный курс Каршенбойма -  автор активно участвует в работе форума под ником iosifk, по ссылке есть много еще другого полезного, в вашем случае - еще и статьи о RTL-коде микроконтроллера собственного изготовлениия
  • Verilog HDL - by Palnitkar - хорошо описаны все азы языка Verilog
  • Все книги Pong Chu, и в первую очередь для вас - FPGA Prototyping by Verilog Examples (хотя RTL Hardware Design Using VHDL - более фундаментальная; но раз вы стартуете с Verilog - я ее советую читать позднее, главное - не забудьте и про нее тоже) - вот список его книг.
  • Проектирование цифровых устройств - Уэйкерли. Отличный 2-томник: автор идет от микросхем малой степени интеграции к языкам HDL (VHDL/Verilog), и все очень обстоятельно разъясняет, охватывая весь спектр проблем - от аппаратно-сигнальных до языковых. Для вас подойдет как нельзя лучше, имея в виду ваши стартовые условия - представление устройств в виде TTL-логики.
  • Проектирование систем на микросхемах с программируемой структурой - Грушвицкий, Мурсаев, Угрюмов, 2-е изд: жаль, что не обновлялась с тех пор, но она все еще более чем актуальна; это отличное введение в мир PLD, FPGA, современных подходов к проектированию (кодезайн, верификация и т.п.). Также есть академически выверенное (например. в части русскоязычной терминологии, насколько это возможно) хорошее введение в VHDL и Verilog, и, что вообще редкость в литературе, - подходов в симуляции цифровых устройств.

Конкретные ссылки не привожу - найти их не составляет труда в интернетах (и на FTP этого форума). Будут сложности - обращайтесь.

В заключение - еще пара замечаний:

  • В самом начале раздобудьте ВСЕ вышеуказанное, и хотя бы по диагонали ознакомьтесь с содержимым, чтобы знать, где что описывается.
  • Затем сконцентрируйтесь, для начала, на комбинации статей и ОДНОЙ книги; далее по мере необходимости будете обращаться к отдельным темам в остальных.
  • После освоения фундамента вас неминуемо потянет более подробно изучить остальное из приведенного списка (и многое другое, скорее всего)
  • Изучение Verilog'а нужно рассматривать исключительно как начальную школу изучения SystemVerilog

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Raven сказал:

Плюс - хорошее учебное чтиво. К уже названному могу добавить такие материалы для начинающего:

  • Учебный курс Каршенбойма -  автор активно участвует в работе форума под ником iosifk, по ссылке есть много еще другого полезного, в вашем случае - еще и статьи о RTL-коде микроконтроллера собственного изготовлениия

Спасибо за ссылку, но только проблема в том, что я написал ТС в личку и предложил помощь с верилогом и кодом процессора, а ТС от нее отказался. И интернет у него плохой и голосом он не хочет.. И мое "особое" предложение ему не интересно, хотя он его так и не услышал...  

Мне это странно, но это его выбор. Ну не хочет голосом, напишу немного буквами здесь...

А если "по жизни", то у ТС довольно странное описание процессора. Не понятно, какова глубина конвейера, как реализуются переходы, ведь при переходах конвейер простаивает. Какие есть группы команд - логические, арифметические и тд... Как реализуются прерывания? Ложится ли на ПЛИС "регистровый файл" - который " процессор основан на регистровом файле из четырёх функциональных групп по десять ячеек в каждой"? Как помещается кодирование команд в 16 бит? Как например в 16-ти битный регистр записать 16-ти битный литерал из 16-ти битной команды? Надо понимать, что имеют место команды из 1 слова и из 2-х слов? И какое адресное пространство можно при этом адресовать?

Ну и далее. Для процессора из "рассыпухи" для 16 бит например требуются 2 микросхемы памяти, а для 32-х бит - 4 шт. И понятно, что для коротких программ есть "экономия"... Но в ПЛИС все немного не так. Есть блоки памяти, и их можно использовать или как 16 бит или как 24 (16 + 8) или как 32 бита. Но при 32-х битах можно сделать поле для кода операций больше и следовательно одной командой выполнять одновременно несколько действий. И при этом не нужны команды из 2-х слов, а "паровоз" поедет быстрее, особенно на тех задачах, которые занимают большую часть времени...

В общем, кроме не очень внятного описания кодировки отдельных команд ничего и нет толком. Я уж не говорю о сравнительных таблицах с количеством тактов на задачу для сравнения с каким нибудь известным процессором...

А неплохо было бы ТС сгонять на opencores.org в раздел процессоры и убедиться, что "память+АЛУ+регистры+дешифратор" - уже много лет не являются чем-то "запредельно крутым"... И там такого много-много... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...