?

Log in

No account? Create an account
 

worklog: потихоньку собираю barrel shifter - No Xians Here

About worklog: потихоньку собираю barrel shifter

Previous Entry worklog: потихоньку собираю barrel shifter 3 ноя, 2018 @ 04:16 Next Entry
DSCN2869

Каждый большой чип - 20 пинов, запаял уже 36 штук.
720 контактов.
Ещё остаётся установить 24 чипа, в итоге будет 1200 контактов. Ощущаю себя персонажем анекдота про "как дойдёте до ну-его-нахуй, так это вот только половина", но на самом деле это даже ещё не треть, это всего-то один из блоков одной из ступеней конвейера.
DSCN2871

Ещё адское адище будет на сборке АЛУ. Но есть и хорошая новость: я проверил одну секцию (собсно ту, которую собрал) и она работает. Впервые в моей личной истории я сложил два 8-битных числа на кучке мелкой логики! ;) На этот моменте я почувствовал себя немного Сеймуром Крэем.

Самая жесть начнётся, когда я дойду до блока CSR - Control and Status Registers. Вот там тяжко: куча регистров с разным назначением и разной механикой работы. Часть из них более-менее похожа друг на друга, но основное количество потребует проработки схемотехники для каждого регистра индивидуально. С учётом того, что наборов регистров должно быть три (под разные режимы работы - user, supervisor, machine) и различий там больше, чем схожести,... зачем я только взялся за этот проект?! (затем, что это интересно!)

Впрочем, тут на каждом этапе есть над чем подумать. Прикинул схему декодера инструкций - получается охренительное развесистое такое дерево из дешифраторов. Заодно ещё набросал прикольную схемку формирования констант (immediate) из опкода - на входе у неё собственно опкод и сигналы от дешифратора, а на выходе 32-битное число. Сложность в том, что формат кодирования этого числа для разных команд разный (S-type, B, U-, J- и CSR/I-type). Изначально схема этого блока была из шести 32-битных буферов (по сути, шестивходовый мультиплексор), на каждые 32 бита нужно 4 микросхемы. После небольшого редизайна схема упростилась и количество микросхем с 24 уменьшилось до 16 - для некоторых констант разных типов из опкода извлекаются одни и те же биты и в таких случаях это делается общей для разных типов схемой. Правда, добавилось ещё два корпуса мелкой логики для комбинирования сигналов выборки... и потребуется ажно четырёхвходовый AND. Вообще в сериях логики 7400 такой есть, и даже в 74HC есть, но вот в 74AC и более новых уже нету - единственным производителем подходящих микросхем является минский "Интеграл" (!), а с их продукцией надо быть очень осторожным, ибо на десяток микросхем почти наверняка одна-две будут сразу неисправны.

Пока рисовал декодер, решил попробовать добавить в него поддержку сжатых инструкций (16-битный опкод вместо 32-битного), что обещает теоретическую экономию плотности кода около 15% в среднем. А потом полез рисовать кэш инструкций и стало грустно от того, что с 16-битными опкодами неизбежно возникнет misaligned access, что сильно усложнит схемотехнику: возможна ситуация, когда за одной 16-битной инструкцией следует 32-битная, а это значит, что обязательно будут случаи, когда эта самая 32-битная инструкция попадает на границу МЕЖДУ соседними ячейками памяти и опкод надо будет считывать "половинками" (а если он попадает на конец строки кэша, то вообще непонятно, как это выруливать).

Задача не то чтоб совсем нерешаемая - люди же как-то делают - но стоит ли овчинка такой выделки? Схема и так получается монструозной (ещё конца-края не видать, а я ведь с августа над этим всем сижу!).. вроде бы некоторое усложнение не так уж сильно отяготит проект в целом, но, с другой стороны, усираться ради экономии на 15%, наверное, не нужно. Была бы это экономия в два раза, тогда да. Но compressed у RISC-V это не аналог Thumb у ARM, сжатию подвергаются не все команды (если бы они ВСЕ стали 16-битными, никаких вопросов бы это не вызвало, но увы)...

Но для D-cache задачу работы с misaligned access всё равно надо будет решить, ибо данные в памяти могут валяться вообще как угодно, а процессор обязан уметь с ними со всеми работать.
Оставить комментарий
[User Picture Icon]
From:Евгений Берсенев
Date:Ноябрь, 3, 2018 05:53 (UTC)
(Link)
декожер инструкций можно сузественно упростить если использовать память - на шину адресов микросхем памяти напрямую подавать опкод, а с шины данных снимать сигналы для входных управляющих выводов всяких вычислительных устройств и промежуточных регистров и прочего. Останется только прошить эти памяти данными.
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 16:03 (UTC)
(Link)
на ПЗУ, во-первых, мееедленно: каскад из даже трёх дешифраторов 74AC138 будет иметь задержку порядка 18..20нс (и точно не хуже 36нс при максимальном перегреве). Во-вторых, не спортивно. В-третьих, большая часть объёма даже самых маленьких ПЗУ не будет задействована - мне это кажется расточительством. Поэтому, например, блок регистров общего назначения собран именно на регистрах, а не на двухпортовом ОЗУ - хотя так было бы проще, мне неуютно от мысли, что от чипа объёмом 1024 слова используется только 31 слово, а всё остальное вообще никогда даже не включится
From:ex0_planet
Date:Ноябрь, 3, 2018 12:44 (UTC)
(Link)
Тогда уж надо было сразу взять CPLD. Но автор хочет на микросхемах малой степени интеграции, как я понял.
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 15:58 (UTC)
(Link)
да, внутри ЦПУ не будет никакой программируемых схем вообще - только мелкие чипы.
[User Picture Icon]
From:rbs_vader
Date:Ноябрь, 3, 2018 18:22 (UTC)
(Link)
На случай Большого Песца - самое оно, восстанавливать инфраструктуру если.
From:ex0_planet
Date:Ноябрь, 3, 2018 18:55 (UTC)
(Link)
Смотря какой толщины песец.

Если нет возможности делать микросхемы, то вот такой вот дизайн в общем-то бессмысленен, надо откатываться до ламп или транзисторов. А если есть, то даже PAL/GAL логика будет эффективнее. Или чуть более специализированная логика: сразу регистры, декодеры или целое АЛУ.

Edited at 2018-11-03 18:57 (UTC)
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 18:58 (UTC)
(Link)
PAL/GAL уж очень прожорливы..

А так да, есть и транзисторно-диодные проекты, есть релейные. Ламповые любительские конструкции именно компьютеров не попадались (если не считать проекты по реставрации исторических машин).
From:ex0_planet
Date:Ноябрь, 3, 2018 19:12 (UTC)
(Link)
Вообще, если всерьез рассматривать сценарий БП, то вполне может оказаться, что нам доступен чудом сохранившийся заводик по технологии 1-10μm и есть офигенный недостаток людей с нужной квалификацией. И коммуникации надо восстанавливать прям срочно.

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

Во-первых, мы переносим всю прикладную работу на пользователей наших матриц (не забываем, технологов могущих делать микросхемы у нас полтора дедка). Во-вторых, немного упрощаются требования к квалификации самих технологов. В третьих регулярные струтуры проще масштабировать, проще делать и они менее чувствительны к дефектам (в том смысле что можно выключить часть, а при дизайне обойти это место).
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 19:15 (UTC)
(Link)
..поэтому есть процессор, собранный только из NAND (и немного памяти)

компьютер можно собрать из одних только 155ЛА3 !

Edited at 2018-11-03 19:16 (UTC)
From:ex0_planet
Date:Ноябрь, 3, 2018 19:25 (UTC)
(Link)
Это понятно, просто не обязательно это должны быть 4xNAND именно в таком корпусе и такой цоколевке.

В конце концов, весьма маловероятно, что БП будет именно такой формы и размеров, что уцелеет большой склад 7400 (или заводик и именно этот комплект масок) и чертежи именно этого компьютера.
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 19:34 (UTC)
(Link)
ещё меньше вероятность, что при БП уцелею собственно я
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 19:01 (UTC)
(Link)
первый мой дизайн АЛУ был именно на АЛУ :) но это показалось не так интересно, как собрать самому. К тому же, готовое АЛУ уж очень избыточно - моя схема гораздо проще.. в плане функциональности проще, схемотехнически-то это ужос: там, где хватило бы пяти чипов - четыре АЛУ и быстрый перенос для секции 16 бит - у меня будет, наверное, больше сотни. Зато всё на виду.

Edited at 2018-11-03 19:03 (UTC)
[User Picture Icon]
From:rbs_vader
Date:Ноябрь, 3, 2018 19:54 (UTC)
(Link)
На этот случай тоже энтузиасты есть, создали ж процессор полностью на дискретке. ИМО до ламп откатываться нет смысла, при тысячах элементов машина Цузе надёжнее будет, а ламповая - каждые 5 минут что-то будет сгорать.
[User Picture Icon]
From:kincajou
Date:Ноябрь, 5, 2018 00:29 (UTC)
(Link)
а ещё в качестве элемента схемотехники можно взять 8-битный микроконтроллер. И собрать на таких чипах все стадии конвейера (программная эмуляция совсем нещитово, хотч и возмиожно - кто-то делал эмуляцию ARM на AVR)

Edited at 2018-11-05 00:36 (UTC)
From:ex0_planet
Date:Ноябрь, 5, 2018 12:44 (UTC)
(Link)
Типа чтобы они внутри себя симулировали железную логику? Ну да, если извращаться, то....

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

ARM на AVR не слышал, а Z80 вполне делали, довольно известный проект.
[User Picture Icon]
From:fon_rotbar
Date:Ноябрь, 3, 2018 13:34 (UTC)
(Link)
А для чего такое адище?
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 15:57 (UTC)
(Link)
дискретный процессор хочу сделать
[User Picture Icon]
From:Евгений Берсенев
Date:Ноябрь, 3, 2018 17:18 (UTC)
(Link)
насколько понимаю он в том числе архитектурно оптимизирован под поиск подстрок в строках?
[User Picture Icon]
From:kincajou
Date:Ноябрь, 3, 2018 17:22 (UTC)
(Link)
barrel shifter это блок процессора, позволяющий за 1 такт сдвигать операнд на нужное количество позиций вправо или влево, с расширением знака (арифметический сдвиг) или без него (логический сдвиг). Физическое воплощение сишных операторов типа << или >>
К поиску подстроки это вряд ли относится, если только строка не битовая и не умещается полностью в один регистр.
[User Picture Icon]
From:simsun
Date:Ноябрь, 5, 2018 16:48 (UTC)
(Link)
О, озадачился тут одну простую схемку на логике, скорее даже из психологических, а не практических целях, т.к. заказчик боится МК :)
Нарисовал в тетрадке что бы не стырили хакеры блок схему и такое стойкое ощущение, что можно в чём то таком простом сэмулировать (в Verilog - у меня ручки/головка :((( )
Знаю только Proteus, беглый поиск предлагает Logisim, пытаюсь... но там немного не интересно (что смог за 5мин пока понять), что нет уже готовых микрух
update: и кажется - он немного древний....

Edited at 2018-11-05 16:50 (UTC)
[User Picture Icon]
From:kincajou
Date:Ноябрь, 5, 2018 16:57 (UTC)
(Link)
про верилог не скажу, у меня какое-то эстетическое неприятие

а VHDL оказался очень простым. Занудным, грузным как немейкий язык, но простым. Не скажу, что я прям всё изучил (всегда есть что-то, чего я не знаю), но имеющегося объёма навыков хватило, чтобы набросать простенький DSP и он даже работал
[User Picture Icon]
From:simsun
Date:Ноябрь, 5, 2018 17:04 (UTC)
(Link)
> VHDL
для меня - один чёрт:)
verilog - название звучнее :)

> простенький DSP и он даже работал
понял, понял... уже ухожу:)))
[User Picture Icon]
From:kincajou
Date:Ноябрь, 5, 2018 17:07 (UTC)
(Link)
VHDL разработан на основе, как минимум, стилистики языка Ада. Поэтому он труЪ
А verilog выглядит похоже на Си, но примерно как техасский вариант английского похож на оксфордское произношение

в принципе, они эквивалентны - всё, что можно сделать на одном, можно и на другом (наверное, это и есть "полнота по Тьюрингу", что бы это ни означало)
[User Picture Icon]
From:kincajou
Date:Ноябрь, 5, 2018 17:09 (UTC)
(Link)
"простенький DSP и он даже работал "

да там всего-то конвейер, принимающий квадратурные выборки с АЦП, дербанящий их через дециматор, затем ещё какой-то фильтр, затем вычисление модуля или просто суммы/разности и выдача в формате AC97 на аудиокодек. Написание форматера AC97 было, наверное, сложнее всего. И снаружи торчит SPI интерфейс, раскладывапющий команды и данные от управляющего микроконтроллера по регистрам
[User Picture Icon]
From:simsun
Date:Ноябрь, 5, 2018 17:13 (UTC)
(Link)
> да там всего-то
добил....... )))))))))

На самом деле прям то что оочень надо прямо сейчас, дербанить туда/сюда I2S звук

> похож на Ада
посмотрел сейчас, неужели выкинул бумажную книжку : "Программирование на языке Ада" - оставлял вроде гостей пугать заголовком.

[User Picture Icon]
From:kincajou
Date:Ноябрь, 5, 2018 17:19 (UTC)
(Link)
I2S гораздо проще. В AC97 целая куча тайм-слотов с разным смыслом (даже не обязательно звук - может быть какие-то управляющие команды типа "установить громкость" или "переключить выходы с наушников на динамики" и т.п.), внутри которых передаются данные к разным каналам, а I2S это просто синхронный интерфейс, в принципе почти как SPI, только с дополнительным стробом - "правый/левый"

Edited at 2018-11-05 17:19 (UTC)
[User Picture Icon]
From:simsun
Date:Ноябрь, 5, 2018 17:29 (UTC)
(Link)
пошел даже погуглить, думал до этого, что I2S многоканальный
[User Picture Icon]
From:kincajou
Date:Ноябрь, 5, 2018 17:34 (UTC)
(Link)
насколько я знаю, нет. Зато очень просто и роялти-фри во всех смыслах (и - да, можно относительно легко сделать на рассыпухе)

Edited at 2018-11-05 17:35 (UTC)
[User Picture Icon]
From:simsun
Date:Ноябрь, 5, 2018 17:51 (UTC)
(Link)
О, это я люблю)
(Оставить комментарий)
Top of Page Разработано LiveJournal.com