Комментарии 70
Это почти гениально! %)
Нового ничего я не открыл — про необходимость рассматривать нули наравне с единицами указано практически в любой литературе, так или иначе затрагивающей тему минимизации логических функций при проектировании дискретных устройств (специально взял таймаут до вечера, чтобы перелистать некоторые книги в домашней библиотеке).
Статья создавалась в таком формате не для того, чтобы продемонстрировать очевидность логических тождеств, скорее чтобы показать интересующимся один из примеров того, как современный цифровой мир устроен изнутри — в этом смысле я рассматриваю свою статью как практическую иллюстрацию к ретроспективному обзору, упомянутому в конце статьи.
Ведь мало кто, к примеру, реально понимает как работает даже самый простой процессор — ну считал он из памяти код какой-нить команды, а дальше-то что за таинство с этим кодом происходит внутри процессора? Как получаются какие-то результаты?
Многие ли люди, которые имеют дело с высокоуровневым проектированием (неважно на каком языке — VHDL/Verilog/etc), смогут залить в современную FPGA реализацию 8-битного процессора z80?
Многие.
А многие ли могут сами придумать и написать реализацию 8-битного микропроцессора, который уместится не то что в FPGA, а в 32 макроячейки древней CPLD типа Xilinx 9536? Сомневаюсь.
Вот и мне захотелось показать интересующимся как оно там изнутри устроено, малюсенький кусочек того, для понимания чего и нужны некоторые предметы, преподаваемые на первом-втором курсах технических ВУЗов.
4 цифры — шина адреса z80, 2 цифры — шина данных. Это 6 (шесть) DIP-16 корпусов SN74188 (К155РЕ3).
А так — только 3 DIP-20 корпуса GAL16V8 (ATF16V8).
Почему бы не обрабатывать каждый разряд отдельной микросхемой?
Ведь в качестве мотивации использовать одну GAL16V8 было указано «расточительность». А РЕ3 — штуки копеечные, так что никакой расточительностью их удваивание не пахнет. Собственно, посмотрев цены, я и для GAL16V8 не очень понимаю, в чём расточительность, если они на алиэкспрессе стоят 25-36 р за штуку при покупке 10 или 5 шт.
4 цифры — шина адреса z80, 2 цифры — шина данных.А это вообще какие-то дополнительные вводные. Для примера, приведенного в статье (показ двух цифр hex-значения по входному 8-битному двоичному) хватит двух РЕ3. По цене получается приблизительно те же деньги, что одна GAL, но РЕ3 доступнее.
Ну ок, примем эти дополнительные условия. 3 GAL обойдутся в 3*36 р (при покупке лота 5 шт) = 108 р; 6 РЕ3 *18 р = те же 108 р. Опять же, при большей доступности. Единственный минус — места чуток побольше займут, да. Но при недостатке места логично использовать SMD-корпуса, и аналоги РЕ3 в таком варианте точно есть, а вот про GAL не уверен.
Не примите это за обесценивание вашей статьи. Решение поставленной проблемы вполне интересно. Другое дело, что сама проблема выглядит несколько надуманной.
И да, для меня в своё время это было именно интересной задачей — можно или нельзя?
Другой вопрос в «практическом» применении в ретрокомпьютинге.
С точки зрения «аутентичности» применение GAL/ATF (в силу их полной совместимости с почившими PAL-ами) можно считать допустимым.
И тут уже экономия на количестве корпусов играет роль. Зачем мне N корпусов, если можно обойтись N/2?
P.S. Про «расточительность» в смысле денег изначально мысли не было, внёс коррекцию в статью в соответствии с тем, что имел в виду. Спасибо за замечание!
А это вообще какие-то дополнительные вводные.
Так самый 1-й абзац статьи же, нет?
Добавленное пояснение действительно добавляет ясности :).
Согласен, возможность переиспользования под другие задачи вполне весома для индивидуальных проектов.
И повторюсь, если статья строилась как «подобрать наглядную задачу чтоб показать интересный подход в решении» — вам это удалось.
Только её (и деньги на неё) сильно искать надо (если найдётся веская причина её покупать), а буржуйских аналогов у неё (насколько я помню) не было.
если уж про последовательный интерфейс упоминать, то тогда уж типа как у drWhy ниже
habr.com/ru/post/548288/#comment_22835430
я-то думал, что вопрос был, мол, есть ли что-нить что не требует действий по передаче данных, но при этом многозначное…
Возник вопрос. В современном мире. Что народ использует вместо GAL? Это я к тому, что GAL больше не производится.
Если б была у меня в наличии ATF16V8C (https://www.microchip.com/wwwproducts/en/ATF16V8C), то та же самая конфигурация так же работала бы и в ней.
DIP-овые ATF22V10C и ATF16V8C стоят уже ± 300 рублей.
И за те же 300 рублей можно взять Altera MAX II EPM240T100C5N в TQFP-100 корпусе.
Так, думаю я, интересно.
Потом смотрю стоимость программатора MiniPro TL866A… и тут я решил, что oldschool и ламповые технологии не для меня.
Не, ну в конкурсе на тему «Кто и где сможет купить это дороже всего?» я участвовать не буду.
GAL16V8D ~ 35 руб/шт.
Altera EPM7032SLC44 ~ 50 руб/шт.
EPM7064SLC44 ~ 100 руб/шт.
Обе две во вполне «ламповых» PLCC-44 корпусах.
Altera EPM240T100C5N ~ 75 руб/шт.
ну, т.е. если не ходить в ЧипДип, то всё более чем доступно.
TL866ii Plus (там же) ~ 4000 руб., список поддерживаемых им микросхем здесь:
www.xgecu.com/MiniPro/TL866II_List.txt
Если существует ещё более лучший универсальный программатор с такими возможностями за меньшие деньги — дайте знать.
Сам-то я пользуюсь старым TL866A.
Похоже aliexpress единственный, кто продает устаревшие чипы адекватно их стоимости.
Смотрел еще на digikey и mouser. Там цены «non stock» и «obsolete».
TL866 — вещь! На него пока только облизываюсь, сейчас хватает прошивать ATtiny и через ардуино. А экономические обстоятельсва заставляют экономить на хобби.
Он хорош тем, что кроме стандартного набора 16V8/20V8/22V10 позволяет прошивать и GAL18V10, GAL26CV12 и GAL6001/6002, которые не поддерживает TL866.
Есть ещё вариант Владимира Мисячного, сделанный на базе GalBlast 1.2.
+ Процессор — любой подходящий ~0-50 руб.
+ Память — 1-2 GB (~50-350 руб).
+ Старый винт — у каждого где-нить валяется.
+ Windows XP (и даже 3.11 или 95) — есть в сети.
Делов-то! :)
у меня тоже в своё время была мысль портировать софт GalBlast-а на STM32, но пропала — использование GalBlast-а преполагается сильно эпизодическое, поэтому остановился на варианте «программатор+материнка».
Нужно — достал из шкафа, не нужно — убрал обратно. А сама материнка в microATX формфакторе в вертикальном положении в шкафу много места не занимает.
поэтому остановился на варианте «программатор+материнка».
Нужно — достал из шкафа, не нужно — убрал обратно.
У меня почти также, что и вызывает боль. На самом деле правда немного в другом конечно… Чуть оффтопик, но раз уж коммент под руку пришёл)
Очередной аппаратный патч для готового устройства, их там уже несколько в таком форм-факторе микроплаток-заплаток. Очень и очень хотелось обойтись жесткой логикой. Справа вариант на логике, слева (не распаян), на stm32 — не смотря что там еще и большой корпус LDO и преобразование 5/3V (cамо устройство 5V-овое), размер получился всё равно меньше, не говоря уже о гибкости если что-то пойдёт не так, туда сразу можно докинуть еще 100500 функций. Но… золотую ТМ2 не поставить :)
ps крышечка от ЛР на месте stm32 tssop-20 для антуража:)
А если дело в мобильности (т.е. штоб таскать программатор с собой и перепрошивать GAL-ы на местах), тогда — да… ((
Ну так и взялись бы за портирование на STM32 — ничто так не стимулирует, как реальная необходимость.
А благодарный народ веками бы про вас былины складывал и баллады пел ;)))
Судя по наличию микросхем с 5-й приёмкой, можно предположить… я его слепила, из того что было:)
74HC74 закончились, а эти остатки 564 сдавать
Ну так и взялись бы за портирование на STM32 — ничто так не стимулирует, как реальная необходимость.был бы их пакет хотя бы, да я и только ныть в комментах:)
Так через ардуино-isp можно прошивать уже очень многое. У меня программатор на ней линейки attiny13, линейки attiny84, линейки atmega8, линейки atmega16 - хватает на все случаи жизни.
Тут вот надоело мне проводочками монтаж делать паять и захотелось самому платы печатные травить. Ну и решил наконец-то УФ-светильник для засветки фоторезиста сделать.
Смотрю на али варианты что дешевле — 3-4м УФ-светодиодной ленты или пара сотен 5мм УФ-светодиодов со стабилизаторами тока…
www.instructables.com/Dual-BCD-to-Hex-7-Segment-Driver
sourceforge.net/projects/dual-bcd-to-hex-7-seg-driver
Только на GAL22V10
Это ни в коем случае не критика, просто забавно, что техническая мысль ходит одинаковыми маршрутами.
The biggest problem I encountered was that the internal Macro Cells just didn't have enough room for the combinational logic equations that I wrote using OpalJr. Figuring that it was quite outdated, I decided to learn another descriptive language and tried my hand at WinCUPL
Любопытно, что он так и не смог понять «фокуса» с минимизацией по нулям и получил желаемый результат только путем использования табличного способа описания желаемого преобразования входных данных в выходные. WINCupl сделал всю работу по преобразованию таблиц в ДНФ и минимизацию за него ;)
Да, в наше время получают результат, не понимая как он был получен. Магия! )))
Я потому в статье и расписывал подробно теоретическую часть — попытался развенчать маленький кусочек «магии».
I had been thinking about this project for several months, but I had a hard time figuring out how to go about the software design process. I understood combinational logic equations. But all my efforts were simply kicked back by the compiler with an error saying I had exceeded the available space in the OLMC.
Оставил ему в каментах линк на сюда — мож разберется… :)
Древняя забытая теория гласит, что кроме ДНФ существует еще КНФ (конъюктивная нормальная форма), по функции эквивалентная ДНФ (как минимум, через теорему де Моргана). Та же теория утверждает, что если функция имеет «редкие» единицы, то ее более короткий вид получается в ДНФ, а иначе — в КНФ. В статье про «ретро» есть упоминание старых книжек. Вероятно, производители компиляторов это всё знают, а рядовые инженеры — давно забыли (или никогда и не знали :) ).
Та же теория утверждает, что если
Рискну усомниться в том, что теория это именно «утверждает» и утверждает именно «это».
Про рекомендации проводить минимизацию либо по единицам, либо по нулям в зависимости от того, чего меньше — это да, это в книжках есть ;)
В случае данного кейса (прошу прощения за каламбур) весь «фокус» и заключается в том, что по нулям ДНФ получаются минимальнее, чем по единицам.
А вот особого смысла в упоминании КНФ применительно к рассматриваемой аппаратной архитектуре не вижу — только перегрузило бы материал.
В PAL точно так же приходится экономить аппаратуру, поэтому теория снова актуальна.
А так, конечно, лучше уж взять какую-нибудь старенькую Altera EPM7064S/7032S. Программировать не сильно сложно, среда удобная, компилятор умный, ресурсов намного больше. Если вставить в панельку PLCC «ноги вниз» то и паять не сильно сложнее DIP. У меня была статья про MAX 7000
habr.com/ru/post/277947
У меня хорошее советское техническое образование — я прекрасно понимаю о чём вы говорите ;)
Сравнивать в рамках данной статьи степени синтаксической «короткости» выражений ДНФ и КНФ применительно к аппаратной ДНФ-реализации GAL16V8 продолжаю считать излишним.
В статье просто проиллюстрирован пример, когда к минимизации ДНФ нужно подходить с обеих сторон.
Полагаю, что дублировать горы теоретических сведений в рамках одной статьи, уводя читателя от её сути — бессмысленно, если не вредно.
И да — Altera EPM7032/EPM7064 в PLCC-корпусах у меня есть. Так же, как и Xilinx XC9636/XC9572/XC95108.
А в DIP-ах есть и ATF750C и GAL18V10/GAL26CV12/GAL6001/GAL6002 ;)
Вот тут образовалась дискуссия по теме:
www.phantom.sannata.org/viewtopic.php?f=20&t=38574
Показывает точку зрения «простого читателя».
CodeMaster: ИМХО, кто изучал всё это, знают и так, а кто нет, нужен бы какой-то более наглядный пример. Возможно, более простой, применительно конкретно к PAL/GAL, а не вообще про матлогику. Суть карты Карно я понял только на примере уже про семигментник. Суть ДНФ я так и не понял, подсознательно конечно понимаю, но мне интересен был бы какой-то пример «на пальцах».
Ну вот приблизительно с такой целью я свой «пример на пальцах» и делал. И когда обнаружил вашу статью, то обрадовался — получался хороший конкретный пример к хорошей ретроспективной статье. ;)
Как алаверды к этой ветке комментариев — цитата из поста KbRadar:
"Если необходимо получить минимальную ДНФ, то в Карте [Карно] рассматриваем только те клетки которые содержат единицы, если нужна КНФ, то рассматриваем те клетки которые содержат нули."
https://m.habr.com/ru/post/93296/, правда — без ссылок на литературу.
В полной карте 7SEG примерно на 70% больше единичек (на глаз), так что инверсия даст некоторую экономию. Что собственно автор статьи и сделал.
цитата из поста KbRadar: Если необходимо получить минимальную ДНФ, то в Карте [Карно] рассматриваем только те клетки которые содержат единицы
Вы, видимо, привыкли всем верить на слово)
Я статью эту делал в т.ч. и в качестве примера того, что слово «только» в приведенной вами цитате излишне категорично))
По функциям как уже прошитая К155РЕ3, только хуже:
— практически недоступна для приобретения любителями;
— неудобный для макетирования корпус;
— собственный ток потребления 60мА;
— рекомендовалось использовать с радиатором.
В её пользу можно отметить наличие входных триггеров-защёлок. Были бы эти микросхемы общедоступны и недороги — смогли бы сделать конкуренцию TIL311. Возможность подбора к ней индикатора на свой вкус было бы даже плюсом.
Чудной язык) Как отличаются входы от выходов при декларировании? Непонятно. habrastorage.org/getpro/habr/upload_files/be1/846/862/be18468625870f015d0c932338554fa0.jpg
С экономической точки зрения — то же самое можно было реализовать и на какой-нибудь ATTiny2313 (и тактовый генератор не потребовался бы). И я бы лучше держал горсть тинек…
Печально, что больше не выпускаются. Не смог найти их в магазинах, где обычно закупаюсь
В магазине под названием Aliexpress, в котором обычно закупаются множество людей, эти забавные микрухи есть в большом количестве (на слово «количество» надо тыкнуть мышой).
Что касается «больше не выпускаются», то это не так.
Чудной язык) Как отличаются входы от выходов при декларировании? Непонятно.
Синтаксически никак не отличаются. Компилятор сам понимает что является входом, что выходом, а что выходом-входом из (а) заявленной в начале микросхемы и режиме её работы «Device: G16V8AS» и (б) контекста, в котором используются выводы.
Синтаксис используемого в данном случае языка CUPL очень схож с синтаксисами других подобных языков — ABEL и PalAsm (тоже тыкабельно мышой).
С экономической точки зрения — то же самое можно было реализовать и на какой-нибудь ATTiny2313 (и тактовый генератор не потребовался бы). И я бы лучше держал горсть тинек…
Если мне сейчас надо что-то вывести на экранчик, скажем, SSD1306 из, к примеру, STM32, то мне уже не надо никаких «тинек». А в 80-х годах ещё не было никаких «тинек».
Речь-то о ретрокомпьютинге идёт. Какой вообще смысл прикручивать к Z80 тиньку?
А вообще-то, микросхемы PLD предназначены для использования там, где можно (и/или нужно) заменить несколько корпусов дискретной логики одной микросхемой PAL/GAL.
Задержка сигнала от входа до выхода составляет от 5-7 до 15-20 наносекунд. И куда тут с «горстью тинек»?
Я конечно понимаю, писать коммент спустя почти три года, но всё-таки попробую.
Глядя на то, что в Segm_G есть ещё свободные термы и плюс есть один свободный вход — можно сделать функцию отображения прочерков.
Что-то вроде:
pin 11 = Dashes
Затем ко всем термам Segm_* кроме _G приписать & !Dashes, а в Segm_G добавить в конец:
# Dashes
HEX-дешифратор для 2-значного 7-сегментного LED-индикатора на одном(!) GAL16V8