8-900-374-94-44
[email protected]
Slide Image
Меню

Rs триггер verilog: ПЛИС — мои первые шаги / Хабр

Содержание

Verilog. Разбираемся с триггерами | IT. Как это работает?

Видео в конце...

Базовый элемент памяти

Базовым элементом памяти является триггер. Устройство, предназначенное для хранения одного бита информации.

Режимы работы RS-триггера

Режимы работы RS-триггера

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

Схема D-триггера

Схема D-триггера

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

Промышленные триггеры работают по фронту или спаду тактирующего сигнала.

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

Схема промышленного D-триггера

Схема промышленного D-триггера

При низком уровне тактового сигнала содержимое D записывается в зеленую половину, но как только низкий уровень тактирующего сигнала сменяется на высокий, содержимое зеленой половины записывается в красную. Состояние линии D записывается в триггер только по переднему фронту тактового сигнала. При этом записанный бит появляется на выходе Q.

Описание элемента памяти на языке Verilog

В языке Verilog для описания триггеров предусмотрена довольно простая конструкция. Это процедурный блок, где в списке чувствительности значится передний фронт тактового сигнала. Для переднего фронта предназначено слово posedge, для заднего фронта negedge.

Описание D-триггера на языке Verilog

Описание D-триггера на языке Verilog

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

D-триггер.

Как мы помним, в состав логической ячейки ПЛИС кроме LUT таблицы входит еще элемент памяти. Это D-триггер с разрешением и асинхронным сбросом. Опишем такой элемент при помощи языка Verilog. Для того чтобы сбрасывать состояние триггера не зависимо от тактового сигнала, необходимо в списке чувствительности указать еще один сигнал, по фронту которого произойдет некоторое событие.

Описание D-триггера с асинхронным сбросом и разрешением

Описание D-триггера с асинхронным сбросом и разрешением

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

Промоделируем этот триггер. Для этого разработаем модуль теста.

Модуль теста триггера

Модуль теста триггера

Количество проводов соответствует количеству входов и выходов триггера. Вписываем триггер в состав теста. Соединяем его входы и выходы с проводами. Каждые 50 пикосекунд состояние тактовой линии будет меняться на противоположное. Чтобы это все заработало, нужно задать начальное состояние тактовой линии и сделать это можно в секции initial begin. В начальный момент времени среди всех входных сигналов и у тактовой линии есть какое-то состояние. Посмотрим результат моделирования.

Временные диаграммы триггера

Временные диаграммы триггера

Тактовый сигнал (clk) подается непрерывно. В какой-то момент времени сигнал сброса (aclr) привел триггер в состояние нуля из состояния неопределенности. Неопределенность это либо ноль либо единица. Это неизвестно, потому как начальное состояние триггера нигде не было указано. Поступление единицы на вход D ни к чему не приводит, потому, что сигнал разрешения нулевой.

Потом в тесте разрешим работу триггера (

en=1) и отправим на некоторое время единицу на вход D. Как раз, в момент прихода переднего фронта тактового сигнала бит единица записался в триггер и оказался на его выходе. Как только состояние входного бита изменилось, то запись не произошла сразу, для записи опять же необходим передний фронт тактового сигнала. На этом этапе нужно особенно внимательно подойти к пониманию этих процессов, иначе потом будет непросто.

Использование элементов памяти в модулях поведенческого стиля описания

Теперь посмотрим как ненавязчиво создавать элементы памяти и не перегружать схемы структурным стилем описания. При структурном стиле мы вынуждены описывать экземпляры триггеров и соединять их проводами. Но все можно делать более незаметно. Ниже описание триггера и конъюнкции, причем запоминание результата происходит по переднему фронту тактового сигнала.

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

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

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

Триггеры-защелки (latch)

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

Устранение защелок в проектах

Устранение защелок в проектах

Но что делать когда разрешения нет? Это не ошибка, компилятор считает, что результат операции нужно сохранить до тех времен, пока не появится сигнал разрешения. А сохранить результат можно в триггере. Такие триггеры называют защелками.

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

Ранее мы рассматривали некоторые синтаксические конструкции и при помощи них создавали цифровые устройства.

Модуль мультиплексора и логического устройства

Модуль мультиплексора и логического устройства

И стоило бы нам ошибиться, как появился бы элемент памяти, который не ждали. Кстати, в конструкции case существует секция default. Она служит для того, чтобы не забыть описать что делать, если не все случаи описаны выше. Если не все опишем, то получим защелку.

Продолжение следует. ..

Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.

Проектирование цифровых устройств на ПЛИС/МЦСТ

1

I

Проектирование цифровых устройств

Элементная база цифровой электроники

Понятие цифрового сигнала и цифровой электроники. Преимущества и недостатки цифровых технологий. МОП-структура. Режимы работы МОП-транзистора. КМОП-технология. Базовые логические элементы: НЕ, 2И-НЕ, 2ИЛИ-НЕ, 2И, 2ИЛИ, шифратор, дешифратор, мультиплексор, сумматор. Триггер. RS-триггер, D-триггер, синхронные и асинхронные триггеры. Интегральные схемы. Классификация интегральных схем.

4

2

Принципы проектирования цифровых устройств.

Маршрут проектирования цифровых интегральных схем. Современные принципы логического проектирования. Современные принципы физического проектирования. Основные проблемы проектирования современных синхронных цифровых устройств: время срабатывания логических схем, время распространения сигнала по кристаллу, проблема выбора тактовой частоты синхросигнала. Уровень регистровых передач (RTL) как способ описания синхронных цифровых устройств.

4

3

Язык описания аппаратуры Verilog

Основные принципы моделирования цифровых устройств. Моделирование сигналов. Типы переменных языка Verilog. Моделирование схем при помощи алгоритмических блоков. Понятие события при моделировании и принципы описания событий на языке Verilog. Понятие модельного времени и обработка текущих событий. Типы присваивания в языке Verilog и особенности их выполнения.  Описание триггеров, регистров и комбинационных логических схем на языке Verilog. Описание устройства на языке Verilog. Иерархическое описание устройств. Среда моделирования ModelSim. Возможности языка Verilog для отладки устройства при моделировании. Синтезируемые и несинтезируемые конструкции языка.

12

4

II

Реализация цифровых устройств на ПЛИС

Программируемые логические интегральные схемы

Понятие ПЛИС. Структура ПЛИС и принцип её программирования. Области применения ПЛИС. Преимущества и недостатки применения ПЛИС.

2

5

Проектирование и отладка цифровых устройств на ПЛИС

Маршрут проектирования цифровых устройств на ПЛИС. Структура некоторых современных ПЛИС. САПР проектирования цифровых устройств на ПЛИС Altera Quartus II. Встроенный логический анализатор, как средство отладки устройств на ПЛИС: понятие, принцип работы, методы использования.

Разработка цифровых устройств на ПЛИС с использованием учебного  стенда.

10

Программируемая логика и ЦОС

Программируемая логика и ЦОС
  • китаезы где-то нарыли плат с цинками 7000, заказал одну на побаловаться. 15 баксов с доставкой имхо халява  danuna(1 знак., 27.04.2021 12:16, pld, картинка, полностью)
    • типо обзор/использование/ смысла мало - но зато много скриншотов.  Zoro(17 знак., 30.04.2021 01:38, ссылка, ссылка)
    • Описание EBAZ4205, схема, подводные камни (красным обведен отсутствующий кварц) - bodis(27. 04.2021 22:22, ссылка)
    • На Электрониксе подобная тема ("Дешёвая отладка Zynq 7000 c Али") уже обсуждалась (сентябрь 2020 года). Даже я в той теме тогда отметилась, предложив альтернативную плату на Zynq 7010, но мое предложение забраковали. -
      Kceния
      (27.04.2021 16:37, ссылка)
    • старт на русском - danuna(27.04.2021 12:51, ссылка)
    • это уже несколько месяцев так. это контроллеры каких-то майнеров. - Mahagam(27.04.2021 12:29)
    • Ссылку давай, где купить. - misyachniy(27.04.2021 12:20)
  • Lattice [CrossLink-NX] 28 nm FD-SOI, FLASH, и [полукастомный RISC-V] (аж две штуки) -> Гении!!!  Evgeny_CD(912 знак., 15.02.2020 00:24 - 00:27, pld, ссылка, полностью)
    • ATTN: The free license enables users to design and evaluate the performance of non-SERDES based Radiant supported devices.  - фyтбoлиcт(26.04.2021 10:04, , ссылка)
    • Lattice Propel открывает новые возможности для разработчиков программного обеспечения - тулза для создания конфигураций этого RISC-V - Evgeny_CD(07.04.2021 23:29, ссылка)
    • Вышел свежий ДШ, появились цены на старшие чипы DigiKey. Все начинается от $39 в розницу. Интересно, но противоречиво. QN72 наличествует.  Evgeny_CD(395 знак., 27.05.2020 02:08, ссылка)
    • CrossLink-NX - интересное, но несколько странноватое семейство. Вот когда появятся "обычные" NX ("не кросслинк") - вот это может быть бомба!  Stewart Little(664 знак., 17.02.2020 16:28)
    • Без малого 9 лет назад я это предсказал -> Я чуть по другому увидел будущее, но суть я почуял верно. - Evgeny_CD(15.02.2020 01:09, ссылка)
    • SiFive подсуетилась -> - Evgeny_CD(15. 02.2020 00:27, ссылка)
  • Однако! Цены LCSC на CPLD Altera EPM240T100I5N  Evgeny_CD(291 знак., 28.03.2021 14:28, pld, ссылка, ссылка)
  • Экспериментирую с zynq-7000 (zed board), заметил интересное. У xilinx есть свой форк линуха, который естественно имеет некоторые отличия, в частности на нём у меня полноценно запахал Linux FPGA Manager - стандартная обёртка, инкапсулирующая работу с fpga под линукс, присутствует в ванильном ядре.  evgeniy1294(668 знак., 16.03.2021 23:20, pld, полностью)
  • Мелкая плата на Xilinx ZYNQ XC7Z7010 ₽1161.  Evgeny_CD(47 знак., 20.03.2021 16:39, pld, ссылка, полностью)
  • [NiteFury] - M.2 борда Artix-7 FPGA with its own DDR3 RAM right in your laptop - for developing PCIe - Evgeny_CD(24. 02.2021 21:38, pld, ссылка, полностью)
  • [LiteX] - библиотека и "тулчейн" для синтеза SoC в FPGA. На основе Migen - Python надстройка над HDL языками. Просто обалдеть! Смотрим на список IP блоков...  Evgeny_CD(9 знак., 16.03.2021 20:00, pld, ссылка, ссылка)
  • [Fomu, Qomu, TinyFPGA] и другие дешевые FPGA платочки. Все открытое!  Evgeny_CD(68 знак., 24.02.2021 21:36 - 22:17, pld, ссылка, ссылка, полностью)
  • Налетай, подешевело-> - Moлoдoй кoллeгa(15.02.2021 07:27, pld, ссылка, ссылка, полностью)
  • [Efinix Trion FPGAs] -> начало китайской революции в FPGA? Благодарности Ruslan за наводку. Они читали мои посты про "самые дешевые FPGA всех времен и народов" -->  Evgeny_CD(823 знак. , 10.07.2019 23:59, pld, ссылка, ссылка, полностью)
    • ещё бы революцию с трансиверами в китайских фпга. что-то не ищется ничего с >=10Gbps. неужели сфп+ и кусфп на чужом кремнии собирают? - фyтбoлиcт(11.02.2021 10:21, )
    • [Efinix Trion FPGA - революция ширится!] Вышли T13, T20, -40°C ~ 100°C и анонсированы TQFP. Вышел недорогой кит за $100 на T8  Evgeny_CD(4682 знак., 13.11.2019 00:34 - 00:39)
    • [GOWIN Semiconductor - LITTLEBEE] -> FPGA that supports MIPI I3C --> and MIPI D-PHY Благодарности Stewart Little за наводку - Evgeny_CD(24.08.2019 01:06, ссылка, ссылка)
    • А вот простенькие, грубо говоря, уровня ПИКового таймера фпга есть в природе? Ну и потребление, чтоб соответствующее. - Крок(23. 08.2019 00:29)
    • Самые дешёвые FPGA всех времён и народов на сегодняшний день 😀 - Gowin. Тоже Поднебесная. Софт бесплатный. Англоязычные доки есть. В России дистрибутируются. Доками и дистрибутивами могу поделиться. Интересное решение - FPGA с набортным  Stewart Little(229 знак., 11.07.2019 19:58, ссылка)
    • пока сайт пустой они будут причмокивать только. где документация? где аппноты? где софт? у хилых доки и аппноты вообще безо всяких регистраций доступны. - Mahagam(11.07.2019 13:08)
    • Про китайскую революцию не знаю, а PolarFire могут серьезно подвинуть Kintex.  Хаос(86 знак., 11.07.2019 04:16, )
    • Дешевая eval борта ->  Evgeny_CD(335 знак., 11.07.2019 00:51, ссылка)
    • Mask Programmable Memory (MPM) тоже ну очень интересная опция. Вдруг она у них работает в невагонных количествах? - Evgeny_CD(11.07.2019 00:46)
    • Совет директоров впечатляет -> Так сказать, будущее мировой электроники - Evgeny_CD(11.07.2019 00:20, ссылка)
    • SMIC's 40LL process - Evgeny_CD(11.07.2019 00:13)
    • Какие интересные вещи они про себя пишут -> И типа даже в CNN обещают быть крутыми! - Evgeny_CD(11.07.2019 00:11, ссылка)
    • T4, T8, T13, and T20 FPGAs are in production now. - Evgeny_CD(11.07.2019 00:04)
  • Опенсорцные тулзы для синтеза FPGA. iCE40 FPGAs, Xilinx 7-Series FPGAs, Silego GreenPAK4 devices, and Gowinsemi GW1N/GW2A FPGAs. Yosys -> arachne-pnr --> - Evgeny_CD(29.01.2017 02:59, pld, ссылка, ссылка, полностью)
    • Развитие - Evgeny_CD(31. 01.2021 03:20, ссылка)
    • Вот что выросло из размышлений по теме -> - Evgeny_CD(31.01.2017 03:16, ссылка)
    • Жень, у тя разброс - писец фсему. Не, я конешь понимаю, шо ты - "начальника".  _basile(233 знак., 29.01.2017 08:27, )
    • Опачки. Экая темка, СПС 🙂 - Николай Коровин(29.01.2017 04:22)
    • Очень интересная презентация, показывающая эффективность этих тулзов. От одного их авторов. 1521 LUTs - Yosys, 1320 LUTs - Synplify Pro, 8619 LUTs -Lattice Synthesis Engine (LSE). Это синтез PicoRV32 - один из мелких вариантов RISC-V.  Evgeny_CD(42 знак., 29.01.2017 03:49)
    • В целом, самое интересное, что целая куча проектов активно развивается. Раньше я слегка интересовался отрытыми проектами в части HDL тулзов - там было довольно тоскливо, разве что только Verilator -> был интересным проектом. А тут такой взрыв! С  Evgeny_CD(13 знак., 29.01.2017 03:33, ссылка)
    • FuseSoC -> какая-то не очень понятная штуковина на питоне для адаптации HDL файлов под разные среды... - Evgeny_CD(29.01.2017 03:30, ссылка)
    • icoTC Verilog-to-bitstream FPGA toolchain -> Вроде даже под венду есть... - Evgeny_CD(29.01.2017 03:20, ссылка)
    • На основе этих тулзов ice40 платку для малинки сделали -> - Evgeny_CD(29.01.2017 03:17, ссылка)
    • Подборка на сайте Debian про эти тулзы -> - Evgeny_CD(29.01.2017 03:14, ссылка)
    • Типа оно даже работает -> - Evgeny_CD(29.01.2017 03:10, ссылка)
    • Некий Qflow -> - Evgeny_CD(29. 01.2017 03:04, ссылка)
  • Производственные серийные номера Xilinx и Altera ПЛИС.  T_T(333 знак., 03.02.2021 13:02, pld)
  • Мужики. Попросили меня сделать счётчик импульсов, чтобы к микрашу прикрутить. Фишка в том, что импульсы длиной 10нсек, причём, как я понял, длительность импульсов может разной (учёные, что с них взять) и частота импульсов тоже может гулять, но тоже какие-то микросекунды.  Звepoящep(427 знак., 25.11.2020 14:23, pld, полностью)
    • Хм... Может это подойдет ? - Bill(27.11.2020 12:31, ссылка)
    • Ну в общем 74LVC161 по скорости проходит более-менее. Но я что-то не нашёл подобное, но на 8 бит. Жаль - Звepoящep(26.11.2020 13:48)
      • ЭСЛ (MC100E016: ECL 8-Bit Synchronous Binary Up Counter, 700MHz). 74VCX от OnSemi  teap0t(253 знак., 27.11.2020 10:01 - 10:37, ссылка, ссылка)
      • Можно подойти совсем кардинально - взять STM32H730Vxxx, у которого таймеры (16- и 32-бит) могут считать до 130МГц от внешнего сигнала - argus98(26.11.2020 17:03)
      • SN74LVC112A считает до 150 МГц. Правда только 2 двоичных разряда, но зато быстро - argus98(26.11.2020 16:01)
      • 2 по 4 разряда, но без управления счетом. - Boвa(26.11.2020 15:02, ссылка)
      • SN74LV8154 - счетчик 2x16 или 1x32bit, 10 нс длина импульса пролазит, 20TSSOP --> - MBedder(26.11.2020 14:08, ссылка)
    • Очень важна скважность импульсов, с длительностью 10 ns справится можно.  evgeniy1294(649 знак. , 26.11.2020 11:50, ссылка)
    • Именно так я и делал. Там надо было ловить первый импульс. А остальные пропускать. В течении некоторого времени. Счётчики Гейгера и кабели большой длины. - max(26.11.2020 05:42)
    • Возможно, получится как-то заюзать таймеры-счетчики для измерения "времени пролета"? (Используются, например, для построения УЗ измерителей уровня или скорости потока жидкости, лидаров и т.п.)  BlackPrapor(85 знак., 26.11.2020 05:34, ссылка)
    • RS триггер - это если хочется просто. Если нужно сложно, то FPGA с SerDes - заодно длинну импульса посчитаете 🙂 - antm(25.11.2020 22:40)
    • В советские времена была серия делителей 193, она до 1 ГГц или более, клон тогдашней Моторолы. Можно радиочастотные синтезаторы нетрадиционным способом применить, типа LMX2306 и подобные, можно просто прескалеры поискать:  Visitor(475 знак. , 25.11.2020 18:23)
    • Я себе две недели назад вот такую м/с на Aliexpress заказала (но еще не пришло) - 34 руб за 2 штуки: SN74HC4040N - 12-разрядный асинхронный двоичный счетчик. По даташиту обещано tpd=12 ns - для ваших целей может оказаться недостаточно, а для меня в самый раз. - Kceния(25.11.2020 16:35, ссылка, ссылка)
    • неужто нет МК который со счётным входом таймера снаружи? ПЛИС имеет смысл ставить когда таких независимых счётчиков нужно штук 60 например. и чтобы они всё строго синхронные были и всё такое. - Mahagam(25.11.2020 14:27 - 14:36)
    • Фотоумножитель? Да обычный счётчик (вход по фронту) из скоростной логики подключить к GPIO выводам МК. По перепаду 1->0 и 0->1 старшего разряда настроить прерывание (чтоб считать счётчик и его значение добавить как младшие разряды к старшим посчитанным программно, или даже не прерывание, а встроенный счётчик МК). FPGA не нужна. Там буфер-то есть с компаратором (на выходе ФЭУ)? А то и амплитуда ещё от длины волны зависит. - fk0(25.11.2020 14:36)
    • "Какие-то микросекунды" и МК может посчитать. А почистить импульсы на входе можно при помощи 74LVC, например. - SciFi(25.11.2020 14:32)
    • Поставь счетчик на 16 из любимой К555 интегральной серии и заведи деленный на 16 сигнал на вход таймера любого микроконтроллера.  Boвa(143 знак., 25.11.2020 14:31)
  • ну вот и AMD купила Xilinx - garry_(27.10.2020 15:03, pld, полностью)
  • Есть ли у кого-нить положительный опыт прошивки Altera MAX 10 через JTAG китайским клоном USB-Blaster (как на картинке) ? Гугление показало, что есть туева хуча версий этого программатора, мож. какие-нить рекомендации, что искать? Интересует только JTAG, AS/PS загрузка не нужна.   Cидopгeк(1 знак., 07.10.2020 13:41, pld, картинка, полностью)

Дэвид М. Харрис Сара Л. Харрис Цифровая схемотехника и архитектура компьютера. Второе издание

Недавно Юрий Панчул, один из сотрудников MIPS, решил с толкача организовать большое дело — перевести на русский язык один из толковых современных американских учебников по цифровой электронике. Благодаря его организации и активным действиям собралась внушительная команда русскоязычных профессионалов, которые за какие то 4 месяца осилили эту задачу, родив 1600 страничный учебник (на самом деле в исходной книжке страниц раза так в два поменьше будет, тут просто верстка оптимизирована под чтение с планшета). Подробней об этом можно прочитать на Хабре

Я же просто обращаю ваше внимание на сей замечательный труд. Книга реально толковая, начинает с нуля, с того что такое нолик и единичка, а заканчивает конвейерными процессорами. Причем все разобрано на HDL, начиная с простейших блоков. Есть задачи и вопросы для самопроверки. В общем, если ее вдумчиво прочитать и выполнить все задания, то потом родить какой-нибудь свой собственный микроконтроллер в недрах ПЛИС будет вполне посильной задачей.

Хорошо разобрана дискретная логика и ее синтез. Основные математические операции с целыми, а также числами с плавающей точкой. Дано беглое введение в VDHL и Verilog, а дальше идет сборка на HDL разных сумматоров, счетчиков, АЛУ и прочих потрохов процессора.

Содержание:

Глава 1 От нуля до единицы ………………………………………………………… 2
1.1 План игры …………………………………………………………………………………………. 3
1.2 Искусство управления сложностью ……………………………………………………… 5
1.2.1 Абстракция ……………………………………………………………………………….. 6
1.2.2 Конструкторская дисциплина …………………………………………………….. 11
1.2.3 Три базовых принципа ……………………………………………………………… 13
1.3 Цифровая абстракция ……………………………………………………………………… 18
1.4 Системы счисления …………………………………………………………………………. 24
1.4.1 Десятичная система счисления …………………………………………………. 24
1.4.2 Двоичная система счисления ……………………………………………………. 25
1.4.3 Шестнадцатеричная система счисления ……………………………………. 29
1.4.4 Байт, полубайт и «весь этот джаз» ……………………………………………. 33
1.4.5 Сложение двоичных чисел ……………………………………………………….. 36
1.4.6 Знак двоичных чисел ……………………………………………………………….. 39
1.5 Логические элементы ………………………………………………………………………. 50
1.5.1 Логический вентиль НЕ …………………………………………………………….. 51
1.5.2 Буфер……………………………………………………………………………………… 52
1.5.3 Логический вентиль И ………………………………………………………………. 54
1.5.4 Логический вентиль ИЛИ ………………………………………………………….. 55
1.5.5 Другие логические элементы с двумя входными сигналами ………… 56
1.5.6 Логические элементы с количеством входов больше двух …………… 59
1.6 За пределами цифровой абстракции …………………………………………………. 62
1.6.1 Напряжение питания ………………………………………………………………… 62
1.6.2 Логические уровни……………………………………………………………………. 63
1.6.3 Допускаемые Уровни Шумов …………………………………………………….. 64
1. 6.4 Передаточная Характеристика ………………………………………………….. 67
1.6.5 Статическая Дисциплина ………………………………………………………….. 68
1.7 КМОП транзисторы* …………………………………………………………………………. 73
1.7.1 Полупроводники ………………………………………………………………………. 75
1.7.2 Диоды……………………………………………………………………………………… 77
1.7.3 Конденсаторы ………………………………………………………………………….. 78
1.7.4 n-МОП и p-МОП-транзисторы ……………………………………………………. 80
1.7.5 Логический вентиль НЕ на КМОП-транзисторах ………………………….. 90
1.7.6 Другие логические вентили на КМОП-транзисторах ……………………. 92
1.7.7 Передаточный логический вентиль ……………………………………………. 99
1.7.8 Псевдо n-МОП-Логика …………………………………………………………….. 100
1.8 Потребляемая мощность ………………………………………………………………… 103
1.9 Краткий обзор главы 1 и того, что нас ждет впереди …………………………. 106
Упражнения …………………………………………………………………………………… 111
Вопросы для собеседования …………………………………………………………… 142

Глава 2 Проектирование комбинационной логики……………………. 144
2.1 Введение ………………………………………………………………………………………. 145
2.2 Булевы уравнения………………………………………………………………………….. 153
2.2.1 Терминология ………………………………………………………………………… 153
2.2.2 Дизъюнктивная форма ……………………………………………………………. 154
2.2.3 Конъюнктивная форма ……………………………………………………………. 159
2.3 Булева алгебра ……………………………………………………………………………… 161
2.3.1 Аксиомы ………………………………………………………………………………… 162
2.3.2 Теоремы одной переменной ……………………………………………………. 163
2.3.3 Теоремы с несколькими переменными …………………………………….. 167
2.3.4 Правда обо всем этом…………………………………………………………….. 172
2.3.5 Упрощение уравнений ……………………………………………………………. 174
2.4 От логики к логическим элементам ………………………………………………….. 178
2.5 Многоуровневая комбинационная логика …………………………………………. 186
2.5.1 Минимизация аппаратуры ………………………………………………………. 187
2.5.2 Перемещение инверсии ………………………………………………………….. 190
2.6 Что за x и z? ………………………………………………………………………………….. 196
2.6.1 Недопустимое значение: Х ……………………………………………………… 196
2.6.2 Третье состояние: Z ………………………………………………………………. . 198
2.7 Карты карно …………………………………………………………………………………… 202
2.7.1 Думайте об овалах …………………………………………………………………. 205
2.7.2 Логическая минимизация на картах Карно………………………………… 207
2.7.3 Безразличные переменные …………………………………………………….. 215
2.7.4 Подводя итоги ……………………………………………………………………….. 217
2.8 Базовые комбинационные блоки……………………………………………………… 218
2.8.1 Мультиплексоры …………………………………………………………………….. 218
2.8.2 Дешифраторы ……………………………………………………………………….. 228
2.9 Временные характеристики …………………………………………………………….. 231
2.9.1 Задержка распространения и задержка реакции ……………………….. 232
2.9.2 Импульсные помехи ……………………………………………………………….. 242
2.10 Резюме …………………………………………………………………………………………. 246
Упражнения …………………………………………………………………………………… 250
Вопросы для собеседования …………………………………………………………… 266

Глава 3 Проектирование последовательностной логики …………. 269
3.1 Введение ………………………………………………………………………………………. 270
3.2 Защелки и триггеры ………………………………………………………………………. . 271
3.2.1 RS-триггер …………………………………………………………………………….. 274
3.2.2 D-защелка ……………………………………………………………………………… 280
3.2.3 D-Триггер ………………………………………………………………………………. 282
3.2.4 Регистр………………………………………………………………………………….. 285
3.2.5 Триггер с функцией разрешения ……………………………………………… 286
3.2.6 Триггер с функцией сброса ……………………………………………………… 287
3.2.7 Проектирование триггеров и защелок на транзисторном уровне … 289
3.2.8 Общий обзор …………………………………………………………………………. 293
3.3 Проектирование синхронных логических схем ………………………………….. 295
3.3.1 Некоторые проблемные схемы ……………………………………………….. 295
3.3.2 Синхронные последовательностные схемы ……………………………… 298
3.3.3 Синхронные и асинхронные схемы ………………………………………….. 305
3.4 Конечные автоматы ……………………………………………………………………….. 306
3.4.1 Пример проектирования конечного автомата ……………………………. 307
3.4.2 Кодирование состояний ………………………………………………………….. 320
3.4.3 Автоматы Мура и Мили …………………………………………………………… 327
3. 4.4 Декомпозиция конечных автоматов …………………………………………. 334
3.4.5 Восстановление конечных автоматов по электрической схеме ….. 338
3.4.6 Обзор конечных автоматов ……………………………………………………… 345
3.5 Синхронизация последовательностных схем ……………………………………. 346
3.5.1 Динамическая дисциплина ……………………………………………………… 349
3.5.2 Временные характеристики системы ……………………………………….. 351
3.5.3 Расфазировка тактовых сигналов ……………………………………………. 364
3.5.4 Метастабильность ………………………………………………………………….. 371
3.5.5 Синхронизаторы …………………………………………………………………….. 375
3.5.6 Вычисление времени разрешения …………………………………………… 380
3.6 Параллелизм …………………………………………………………………………………. 388
3.7 Резюме …………………………………………………………………………………………. 396
Упражнения …………………………………………………………………………………… 399
Вопросы для собеседования …………………………………………………………… 417

Глава 4 Языки описания аппаратуры ……………………………………….. 420
4.1 Введение ………………………………………………………………………………………. 421
4.1.1 Модули …………………………………………………………………………………. . 422
4.1.2 Происхождение языков SystemVerilog и VHDL ………………………….. 425
4.1.3 Симуляция и Синтез ………………………………………………………………. 427
4.2 Комбинационная логика………………………………………………………………….. 433
4.2.1 Битовые операторы………………………………………………………………… 433
4.2.2 Комментарии и пробелы …………………………………………………………. 439
4.2.3 Операторы сокращения ………………………………………………………….. 440
4.2.4 Условное присваивание ………………………………………………………….. 442
4.2.5 Внутренние переменные …………………………………………………………. 449
4.2.6 Приоритет ……………………………………………………………………………… 453
4.2.7 Числа ……………………………………………………………………………………. 456
4.2.8 Z-состояние и X-состояние ……………………………………………………… 459
4.2.9 Манипуляция битами ……………………………………………………………… 465
4.2.10 Задержки ……………………………………………………………………………… 466
4.3 Структурное моделирование …………………………………………………………… 469
4.4 Последовательностная логика ………………………………………………………… 478
4.4.1 Регистры ……………………………………………………………………………….. 478
4.4.2 Регистры со сбросом ………………………………………………………………. 483
4.4.3 Регистры с сигналом разрешения ……………………………………………. 488
4.4.4 Группы регистров …………………………………………………………………… 490
4.4.5 Защелки ………………………………………………………………………………… 493
4.5 И снова комбинационная логика ……………………………………………………… 496
4.5.1 Операторы case …………………………………………………………………….. 502
4.5.2 Операторы if ………………………………………………………………………….. 508
4.5.3 Таблицы истинности с незначащими битами ……………………………. 512
4.5.4 Блокирующие и неблокирующие присваивания ………………………… 515
4.6 Конечные автоматы ……………………………………………………………………….. 525
4.7 Типы данных* ………………………………………………………………………………… 537
4.7.1 SystemVerilog …………………………………………………………………………. 537
4.7.2 VHDL …………………………………………………………………………………….. 540
4.8 Параметризованные модули* ………………………………………………………….. 547
4.9 Среда тестирования ………………………………………………………………………. 556
4.10 Резюме …………………………………………………………………………………………. 569
Упражнения …………………………………………………………………………………… 571
Вопросы для собеседования …………………………………………………………… 594

Глава 5 Цифровые функциональные узлы ………………………………. 596
5.1 Введение ………………………………………………………………………………………. 597
5.2 Арифметические схемы ………………………………………………………………….. 598
5.2.1 Сложение ………………………………………………………………………………. 598
5.2.2 Вычитание …………………………………………………………………………….. 616
5.2.3 Компараторы …………………………………………………………………………. 618
5.2.4 АЛУ……………………………………………………………………………………….. 622
5.2.5 Схемы сдвига и циклического сдвига ……………………………………….. 626
5.2.6 Умножение …………………………………………………………………………….. 629
5.2.7 Деление ………………………………………………………………………………… 633
5.2.8 Дополнительная литература …………………………………………………… 635
5.3 Представление чисел …………………………………………………………………….. 636
5.3.1 Числа с фиксированной точкой ……………………………………………….. 636
5.3.2 Числа с плавающей точкой ……………………………………………………… 639
5.4 Функциональные узлы последовательностной логики ……………………….. 649
5.4.1 Счетчики ……………………………………………………………………………….. 649
5.4.2 Сдвигающие регистры ……………………………………………………………. 651
5.5 Матрицы памяти……………………………………………………………………………. . 658
5.5.1 Обзор ……………………………………………………………………………………. 659
5.5.2 Динамическое ОЗУ (DRAM) …………………………………………………….. 668
5.5.3 Статическое ОЗУ (SRAM) ……………………………………………………….. 670
5.5.4 Площадь и задержки ………………………………………………………………. 670
5.5.5 Регистровые файлы ……………………………………………………………….. 672
5.5.6 Постоянное Запоминающее Устройство …………………………………… 673
5.5.7 Реализация логических функций с использованием матриц
памяти ………………………………………………………………………………… 681
5.5.8 Языки описания аппаратуры и память ……………………………………… 682
5.6 Матрицы логических элементов ………………………………………………………. 687
5.6.1 Программируемые логические матрицы …………………………………… 688
5.6.2 Программируемые пользователем матрицы логических
элементов …………………………………………………………………………… 691
5.6.3 Схемотехника матриц …………………………………………………………….. 703
5.7 Резюме …………………………………………………………………………………………. 707
Упражнения …………………………………………………………………………………… 710
Вопросы для собеседования …………………………………………………………… 732

Глава 6 Архитектура …………………………………………………………………. 734
6.1 Предисловие …………………………………………………………………………………. 735
6.2 Язык ассемблера …………………………………………………………………………… 740
6.2.1 Инструкции ……………………………………………………………………………. 741
6.2.2 Операнды: регистры, память и константы ………………………………… 745
6.3 Машинный язык ……………………………………………………………………………… 762
6.3.1 Инструкции типа R …………………………………………………………………. 763
6.3.2 Инструкции типа l …………………………………………………………………… 766
6.3.3 Инструкции типа J ………………………………………………………………….. 770
6.3.4 Расшифровываем машинные коды ………………………………………….. 771
6.3.5 Могущество хранимой программы …………………………………………… 772
6.4 Программирование ………………………………………………………………………… 776
6.4.1 Арифметические/логические инструкции ………………………………….. 776
6.4.2 Переходы ………………………………………………………………………………. 786
6.4.3 Условные операторы ……………………………………………………………… 791
6.4.4 Зацикливаемся ………………………………………………………………………. 797
6.4.5 Массивы ………………………………………………………………………………… 803
6.4.6 Вызовы функций……………………………………………………………………. . 815
6.5 Режимы адресации ………………………………………………………………………… 838
6.6 Камера, мотор! Компилируем, ассемблируем и загружаем ………………… 845
6.6.1 Карта памяти …………………………………………………………………………. 845
6.6.2 Трансляция и запуск программы ……………………………………………… 851
6.7 Добавочные сведения* …………………………………………………………………… 861
6.7.1 Псевдокоманды ……………………………………………………………………… 861
6.7.2 Исключения …………………………………………………………………………… 863
6.7.3 Команды для чисел со знаком и без знака………………………………… 867
6.7.4 Команды для работы с числами с плавающей точкой ……………….. 870
6.8 Живой пример: архитектура х86* …………………………………………………….. 874
6.8.1 Регистры x86 …………………………………………………………………………. 877
6.8.2 Операнды x86 ………………………………………………………………………… 878
6.8.3 Флаги состояния …………………………………………………………………….. 881
6.8.4 Команды х86 ………………………………………………………………………….. 883
6.8.5 Кодировка команд х86 …………………………………………………………….. 887
6.8.6 Другие особенности х86 ………………………………………………………….. 890
6.8.7 Оглядываясь назад ………………………………………………………………… 892
6. 9 Резюме …………………………………………………………………………………………. 893
Упражнения …………………………………………………………………………………… 896
Вопросы для собеседования …………………………………………………………… 920

Глава 7 Микроархитектура ……………………………………………………….. 923
7.1 Введение ………………………………………………………………………………………. 924
7.1.1 Архитектурное состояние и система команд …………………………….. 925
7.1.2 Процесс разработки ……………………………………………………………….. 927
7.1.3 Микроархитектуры MIPS …………………………………………………………. 932
7.2 Анализ производительности …………………………………………………………… 934
7.3 Однотактный процессор …………………………………………………………………. 938
7.3.1 Однотактный тракт данных ……………………………………………………… 939
7.3.2 Однотактное устройство управления ……………………………………….. 951
7.3.3 Дополнительные команды ………………………………………………………. 957
7.3.4 Анализ производительности ……………………………………………………. 962
7.4 Многотактный процессор ………………………………………………………………… 966
7.4.1 Многотактный тракт данных ……………………………………………………. 967
7.4.2 Многотактное устройство управления ……………………………………… 980
7. 4.3 Дополнительные команды ………………………………………………………. 998
7.4.4 Оценка производительности …………………………………………………. 1003
7.5 Конвейерный процессор ……………………………………………………………….. 1007
7.5.1 Конвейерный тракт данных ……………………………………………………. 1012
7.5.2 Конвейерное устройство управления ……………………………………… 1016
7.5.3 Конфликты …………………………………………………………………………… 1018
7.5.4 Дополнительные команды …………………………………………………….. 1038
7.5.5 Оценка производительности …………………………………………………. 1040
7.6 Пишем процессор на hdl* ……………………………………………………………… 1044
7.6.1 Однотактный процессор ……………………………………………………….. 1046
7.6.2 Универсальные строительные блоки ……………………………………… 1059
7.6.3 Тестовое окружение ……………………………………………………………… 1068
7.7 Исключения* ………………………………………………………………………………… 1079
7.8 Улучшенные микроархитектуры* …………………………………………………… 1086
7.8.1 Длинные конвейеры ……………………………………………………………… 1087
7.8.2 Предсказание условных переходов ……………………………………….. 1091
7.8.3 Суперскалярный процессор …………………………………………………… 1096
7. 8.4 Процессор с внеочередным выполнением команд ………………….. 1102
7.8.5 Переименование регистров …………………………………………………… 1109
7.8.6 SIMD ……………………………………………………………………………………. 1112
7.8.7 Многопоточность ………………………………………………………………….. 1114
7.8.8 Симметричные мультипроцессоры ………………………………………… 1117
7.8.9 Гетерогенные мультипроцессоры ………………………………………….. 1120
7.9 Живой пример: микроархитектура x86 ……………………………………………. 1127
7.10 Резюме ……………………………………………………………………………………….. 1139
Упражнения …………………………………………………………………………………. 1143
Вопросы для собеседования …………………………………………………………. 1156

Глава 8 Иерархия памяти и подсистема ввода-вывода …………. 1158
8.1 Введение …………………………………………………………………………………….. 1159
8.2 Анализ производительности систем памяти …………………………………… 1170
8.3 Кэш-память ………………………………………………………………………………….. 1174
8.3.1 Какие данные хранятся в кэш-памяти? …………………………………… 1175
8.3.2 Как найти данные в кэш-памяти? …………………………………………… 1177
8.3.3 Какие данные заместить в кэш-памяти? …………………………………. 1196
8.3.4 Улучшенная кэш-память* ………………………………………………………. 1198
8.3.5 Эволюция кэш-памяти процессоров MIPS ………………………………. 1206
8.4 Виртуальная память …………………………………………………………………….. 1208
8.4.1 Трансляция адресов …………………………………………………………….. 1214
8.4.2 Таблица страниц ………………………………………………………………….. 1218
8.4.3 Буфер ассоциативной трансляции …………………………………………. 1223
8.4.4 Защита памяти …………………………………………………………………….. 1227
8.4.5 Стратегии замещения страниц*……………………………………………… 1228
8.4.6 Многоуровневые таблицы страниц* ……………………………………….. 1230
8.5 Системы ввода-вывода ………………………………………………………………… 1236
8.6 Ввод-вывод во встроенных системах …………………………………………….. 1241
8.6.1 Микроконтроллер PIC32MX675F512H …………………………………….. 1243
8.6.2 Цифровой ввод-вывод общего назначения …………………………….. 1254
8.6.3 Последовательный ввод-вывод …………………………………………….. 1259
8.6.4 Таймеры ……………………………………………………………………………… 1288
8.6.5 Прерывания …………………………………………………………………………. 1292
8. 6.6 Аналоговый ввод-вывод ……………………………………………………….. 1297
8.6.7 Другие внешние устройства микроконтроллера ………………………. 1313
8.7 Интерфейсы ввода-вывода персональных компьютеров …………………. 1360
8.7.1 USB …………………………………………………………………………………….. 1364
8.7.2 PCI и PCI Express …………………………………………………………………. 1366
8.7.3 Память DDR3 ……………………………………………………………………….. 1367
8.7.4 Сеть ……………………………………………………………………………………. 1368
8.7.5 SATA …………………………………………………………………………………… 1370
8.7.6 Подключения к ПК ………………………………………………………………… 1371
8.8 Живой пример: системы памяти и ввода-вывода семейства х86 ………. 1377
8.8.1 Системы кэш-памяти процессоров семейства х86 …………………… 1377
8.8.2 Виртуальная память х86 ……………………………………………………….. 1383
8.8.3 Программируемый ввод-вывод х86 ………………………………………… 1385
8.9 Резюме ……………………………………………………………………………………….. 1386
Упражнения …………………………………………………………………………………. 1390
Вопросы для собеседования …………………………………………………………. 1409

Приложение A Реализация цифровых систем ……………………… 1410
A. 1 Введение …………………………………………………………………………………….. 1411
A.2 Логические микросхемы серии 74xx……………………………………………….. 1412
A.2.1 Логические элементы …………………………………………………………… 1413
A.2.2 Другие логические функции…………………………………………………… 1415
A.3 Программируемая логика ……………………………………………………………… 1415
A.3.1 PROM …………………………………………………………………………………. 1419
A.3.2 Блоки PLA ……………………………………………………………………………. 1421
A.3.3 FPGA ………………………………………………………………………………….. 1422
A.4 Программируемая логика ……………………………………………………………… 1428
A.5 Заказные специализированные интегральные схемы ……………………… 1430
A.6 Работа с документацией ……………………………………………………………….. 1439
A.7 Семейства логических элементов ………………………………………………….. 1445
A.8 Корпуса и монтаж интегральных схем ……………………………………………. 1454
A.8.1 Согласованная нагрузка ……………………………………………………….. 1457
A.8.2 Нагрузка холостого хода……………………………………………………….. 1462
A.8.3 Нагрузка короткого замыкания ………………………………………………. 1465
A.8.4 Рассогласованная нагрузка …………………………………………………… 1467
A. 8.5 Когда нужно применять модели линии передачи …………………….. 1473
A.8.6 Правильное подключение нагрузки к линии передачи …………….. 1474
A.8.7 Вывод формулы для Z0* ………………………………………………………. 1477
A.8.8 Вывод формулы для коэффициента отражения* ……………………. 1480
A.8.9 Подводя итог ……………………………………………………………………….. 1482

A.9 Экономика …………………………………………………………………………………… 1485

Приложение B Инструкции архитектуры MIPS ………………………. 1490

Приложение C Программирование на языке Си ……………………. 1502
C.1 Введение …………………………………………………………………………………….. 1503
C.2 Добро пожаловать в язык Си …………………………………………………………. 1508
Оглавление xxv
C.2.1 Структура программы на языке СИ ……………………………………….. 1510
C.2.2 Запуск Си-программы …………………………………………………………… 1512
C.3 Компиляция …………………………………………………………………………………. 1514
C.3.1 Комментарии ……………………………………………………………………….. 1515
C.3.2 #define …………………………………………………………………………….. 1516
C.3.3 #include …………………………………………………………………………… 1519
C. 4 Переменные ………………………………………………………………………………… 1521
C.4.1 Базовые типы данных…………………………………………………………… 1523
C.4.2 Глобальные и локальные переменные…………………………………… 1527
C.4.3 Инициализация переменных …………………………………………………. 1530
C.5 Операции …………………………………………………………………………………….. 1532
C.6 Вызовы функций ………………………………………………………………………….. 1538
C.7 Управление последовательностью выполнения действий ……………….. 1544
C.7.1 Условные операторы ……………………………………………………………. 1544
C.7.2 Циклы …………………………………………………………………………………. 1548
C.8 Другие типы данных ……………………………………………………………………… 1553
C.8.1 Указатели ……………………………………………………………………………. 1553
C.8.2 Массивы ……………………………………………………………………………… 1557
C.8.3 Символы……………………………………………………………………………… 1566
C.8.4 Строки символов …………………………………………………………………. 1568
C.8.5 Структуры ……………………………………………………………………………. 1572
C.8.6 * Оператор typedef …………………………………………………………….. 1576
C.8.7 Динамическое распределение памяти …………………………………… 1578
Оглавление xxvi
C. 8.8 Связные списки ……………………………………………………………………. 1580
C.9 Стандартная библиотека языка C ………………………………………………….. 1585
C.9.1 stdio ………………………………………………………………………………… 1586
C.9.2 stdlib ………………………………………………………………………………. 1596
C.9.3 math ………………………………………………………………………………….. 1601
C.9.4 string ………………………………………………………………………………. 1602
C.10 Компилятор и опции командной строки ………………………………………….. 1603
C.10.1 Компиляция нескольких исходных c-файлов ………………………… 1603
C.10.2 Опции компилятора ……………………………………………………………. 1603
C.10.3 Аргументы командной строки ………………………………………………. 1605
C.11 Типичные ошибки …………………………………………………………………………. 1606
Литература для дальнейшего чтения ………………………………………. 1619

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

Юрий Панчул:

Как загрузить? К сожалению, не одним кликом. Сначало надо зарегистрироваться в пользовательском коммьюнити Imagination Technologies, потом зарегистрироваться в образовательных программах на том же сайте, после чего наконец скачать:

Последовательность регистрации:
1) зарегистрироваться в коммьюнити community. imgtec.com/register
2) подтвердить емейл
3) login в коммьюнити
4) пойти в imagination university program — community.imgtec.com/university/university-registration
5) пойти в меню University | Join IUP
6) заполнить
7) пойти в community.imgtec.com/downloads/digital-design-and-computer-architecture-russian-edition и наконец скачать

Также в поле телефонного кода страны есть баг — вместо «максимум три символа» она требует «минимум три символа», из-за чего в Великобритании сайт работает (+44), а в России и США — нет (код +7 и +1). Напишите туда что-нибудь абстрактное.

К сожалению сайт только начал работать, и регистрация сделана криворуко. Я извиняюсь за такую накладку, это должны поправить скоро.

Но, если вам таки это не удалось, то можно попробовать дернуть отсюда:
Зеркало 1
Зеркало 2
Зеркало 3

Взял видеоинтервью у вице-президента Ардуино и обсудил с ней преподавание школьникам ПЛИС-ов

На днях я встретился и взял короткое видеоинтервью у Kathy Giori, Vice President Operations Arduino USA. Мы обсудили с Кати новое веяние, которое уже коснулось и Ардуино-коммьюнити: так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены, то пора делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog и микросхемы ПЛИС / FPGA, матрицы логических элементов с изменяемыми функциями. А для того, чтобы сделать освоение FPGA проще, стоит воскресить упражнения с микросхемами малой степени интеграции, популярные в 1970-х, в качестве приквела к современным FPGA. Все это закроет брешь между физикой и программированием, дискретными элементами и микроконтроллерами, транзистором и Ардуино.

FPGA и платы можно использовать от любого производителя (Xilinx, Altera, Lattice, Digilent, Terasic), все что я пишу ниже, не имеет привязки к той или иной компании.

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

В этом посте я приведу как информацию по результатам киевского эксперимента, так и некоторые планы на будущее, которые сейчас разрабатывают активисты — преподаватели физматшкол и вузов Киева, Чернигова, Новосибирска, Москвы, Нижнего Новгорода, Самары, Санкт-Петербура, Алматы и других городов. На киевском семинаре участники дошли до создания конечных автоматов кодового замка и интеграции с простыми периферийными устройствами (16-кнопочная клавиатура, динамик). На летней школе в Новосибирске у нас времени будет больше и мы попробуем построить со школьниками процессор. В перспективе из этого планируется сделать годовой курс основ цифровой электроники на FPGA для физматшкол, который может обогатить школьное образование, как в 1980-х его обогатило введение элементов программирования.

Плата c FPGA, которую сейчас рекомендует Кати, и которую я несколько переделываю, чтобы приспособить к своим нуждам (про это будет отдельный пост):

А теперь обсудим детально:

1. Зачем учить школьников языкам описания аппаратуры и использованию ПЛИС? Обоснование программы.

В картине мира, представляемой школьным образованием, существует “слепое пятно” в области принципов проектирования цифровой электроники, между физикой и программированием. Курсы роботики и ардуино это слепое пятно не закрывают, так как сводятся к программированию готовых чипов. Упражнения с дискретными элементами и микросхемами малой степени интеграции, хотя и эффективны во введении в основные принципы, базируются на технологиях 1960-1970-х годов и не содержат привязки к современному проектированию. Слепое пятно можно закрыть с помощью введения элементов языков описания аппаратуры (ЯОА) и доступные для школьного экспериментирования микросхемы ПЛИС (программируемые логические интегральные схемы) — матрицы реконфигурируемых логических элементов. Тем самым картина мира становится цельной, и способствует созданию среды для появления большого количества молодых инженеров, имеющих представление о всех сторонах современных микросхем для приложений типа самоуправляемых автомобилей, и способных в будущем специализироваться для проектирования того или иного аспекта таких устройств.

Введение ЯОА и ПЛИС в школьную программу также хорошо привязывается к курсу математики и физики физматшкол — булевская алгебра, арифметические схемы, конечные автоматы.

Заметим, что ЯОА и ПЛИС, несмотря на поверхностное сходство с программированием, используют другие базовые концепции:

Программирование: последовательное исполнение, ветви выбора, циклы, переменные, выражения, массивы (c моделью плоской адресуемой памяти), функции (на основе использования стека), рекурсия.

Проектирование цифровой логики: комбинационный логический элемент; построение из этих элементов облаков комбинационной логики, включающей примитивы выбора с помощью мультиплексоров, а также блоки для реализации арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами; конечный автомат; параллельность операций, иерархия модулей, концепция конвейера (не только для процессора, но и для арифметических блоков).

2. Общий план таких курсов:

  • Секция 1. Соединение с физикой, с лабораторными на дискретных компонентах.

  • Секция 2. Основы цифровой логики и арифметики, с лабораторными на микросхемах малой степени интеграции.

  • Секция 3. Проектирование схем на основе синтеза языка описания аппаратуры, с лабораторными на ПЛИС Xilinx или Altera.

  • Секция 4. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.

  • Секция 5. Микроархитектура: строим процессор.

  • Индивидуальный проект: интеграция датчика или другого периферийного устройства с схемой, реализованной в ПЛИС.

3. Итоги киевского эксперимента.

Развернутый текст с итогами киевского эксперимента написал преподаватель Киевского Политехнического Института Евгений Короткий. Я дополню его своими личными выводами. Предыстория — посты на Хабре и Geektimes — 1, 2, 3, 4). В тех постах были заданы вопросы. Вот какие получились ответы:

  1. Гипотеза, что школьники могут использовать Verilog, подтвердилась

  2. Verilog также оказался достаточному количеству школьников интересен (до Киева некоторые коллеги в этом сомневались, утверждая, что детям более интересны проекты типа роботической руки с микроконтроллером)

  3. Идея, что перед использованием Verilog полезно показать школьникам логические элементы и D-триггер на микросхемах малой степени интеграции — не то чтобы однозначно подтвердилась, но получила большее обоснование.

  4. Всего после дня опыта с верилогом некоторые школьники начали задавать вразумительные вопросы — например когда применять блокирующее, а когда неблокирующее присваивание.

  5. Довести школьников от нуля до конечных автоматов, реализующих протоколы типа SPI — за одну неделю по-видимому нереально, а вот до конечного автомата кодового замка или светофора — реально.

  6. Также нереально довести за одну неделю по конструирования процессора, но мы попробуем это сделать за две недели в Новосибирске.

  7. Во время киевского эксперимента мы пробовали рассказать и про FPGA, и про встроенные процессоры (MediaTek MT7688, находящийся где-то посередине между Ардуино и Интел Галилео или Расбери Пай по производительности). Потом мы сделали хакатон (в Киевско-Могилянской Академии) и пронаблюдали, сколько школьников выбрали для хакатона проект с FPGA и сколько — проект с встроенным процессором. Выяснилось — 50 на 50. Это интересно — до хакатона у меня не было вообще никакого предположения, какая будет разбивка.

  8. У меня было опасение, что школьников может запутать пользовательский интерфейс в Xilinx Vivado, с кучей опций и элементов интерфейса. Но оказалось, что школьникам все равно — сложный GUI их не пугает.

  9. Большинство школьников используют Windows. У меня вместе с моим коллегой Александром Белицем есть идея заготовить для таких мероприятий пару десятков bootable SSD-драйвов с Линуксом (Ubuntu или CentOS) и носить их от мероприятия к мероприятияю. Алекс даже написал скрипт для клонирования таких драйвов. Ubuntu более дружелюбен, но CentOS более официально поддерживается средствами автоматизации проектирования схем на FPGA, в частности Xilinx Vivado и Altera Quartus. Можно ли делать одновременно ликбез по Линуксу и ликбез по Verilog / FPGA во время летнего лагеря? Непонятно, но это можно попробовать.

  10. Оказывается, Xilinx Vivado нещадно глючит приконфигурации Artix-7 FPGA, если использовать дешевые плохо экранированные микро-USB кабели. По какому-то мистическому наитию я перед поездкой в Киев засунул в чемодан дюжину качественных шнуров, и это спасло семинар.

  11. У меня была идея, что использование breadboardable FPGA modules (FPGA плат, которые втыкаются в макетные платы), например Digilent Cmod A7 35T, может облегчить школьникам переход с упражнений с микросхемами малой степени интеграции на упражнения с FPGA. Верна ли эта идея, я так и не понял. Возможно использование более крупных плат с богатым набором периферии, например Terasic DE10-Lite, будет ничуть не хуже. Все равно при переходе с микросхем малой степени интеграции (CMOS 4000 или 74HC) на FPGA — нужно менять напряжение питания (с 9 V или 5 V на 3.3 V), поэтому нельзя воткнуть Cmod A7 вместо скажем CMOD 4013 в одну и ту же макетную плату с лампочками и кнопками, и ожидать, что все будет продолжать работать.

  12. Я подтвердил свое наблюдение, что для проведения краткосрочных (1 неделя) образовательных мероприятий критично, чтобы на месте находилась бригада студентов местного университета, которая бы осуществляла менторство школьников. В киевском случае такую бригаду обеспечил преподаватель Киевского Политехнического Института Евгений Короткий.

  13. Стало более-менее понятно, в каких случаях и в каком объеме стоит включать в программу подобных мероприятий часть про уровень транзисторов и про производства микросхем. Эту часть преподавал доцент Киевского Национального Университета Александр Барабанов, переводчик материалов по курсу Nanometer ASIC для студентов. По-видимому, этот материал стоит в полном объеме включать в годовой курс для школьников, в небольшом — в двухнедельный курс в формате летнего лагеря, но при продолжительности меньше недели нужно наверное сразу (в течение 1 часа после начала) давать школьникам микросхемы малой степени интеграции (например CMOS 4000) и про транзистор упомянуть вскользь, в виде «транзистор — это устройство, в котором ток течет из пукта A в пункт B, если в C стоит напряжение 1 (или 0). Из транзисторов можно строить логические элементы И, ИЛИ, НЕ (показать на картинку)».

  14. Во время лекций перед большой аудиторией школьникам можно показывать схемы, собранные на макетной плате из микросхем малой степени интеграции. Это наглядно, вызывет интерес, а также не требует подключения конструкции к компьютеру — только с батарейке 9 V. Я показывал три таких схемы, наиболее критичных для понимания — логический элемент XOR, комбинационный 4-битный сумматори D-триггер с частотой порядка 1 Герц (т.е. такт в секунду).

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

  16. Для мероприятий подлиннее можно использовать индивидуальные проекты и проверочные работы.

Код на GitHub использованный для киевского мероприятия

4.

Источники информации для разработки будущих материалов.

Источники информации для преподавателей физматшкол, которые по-видимому будут разрабатывать большую часть детальных материалов, после начальных экспериментов со школьниками на Украине, в России и в Silicon Valley:

  1. Учебник Дэвида Харриса и Сары Харрис “Цифровая схемотехника и архитектура компьютера”, 2-е издание, русский перевод. Этот учебник можно скачать бесплатно, см. статьи на Хабре о нем — 1, 2, 3. Недавно также вышло новое бумажное издание с улучшенной цветной полиграфией

  2. Слайды для преподавателей, дополнение к учебнику Харрис & Харрис. Бесплатное скачивание.

  3. Материалы по курсу From NAND to Tetris, который был создан в Израиле и внедрен в некоторые американские университеты. При этом, имхо, от курса стоит использовать идеи и скелет, но реализацию делать на подмножествах “взрослых” средств проектирования, а не искуственных “детских” средствах, как делает это курс. Ключевые части скачиваются бесплатно.

  4. Книга Чарльза Петзольда “Код”, которая адекватно объясняет на пальцах многие концепции и уровень которой соответствует школьному (идея подсказана преподавателем киевской школы ОРТ Сергеем Дзюбой). Опять же, с моей точки зрения, из книги стоит использовать идеи и скелет, но бОльшую часть материала заменить на более корректный (вместо защелок (D-latch) использовать D-триггеры (D-flip-flop)) и современный, например вместо accumulator-based 6800 и архаичного 8080 использовать подмножество RISC-архитектуры.

  5. Наборы для конструирования схем на макетной плате на основе дискретных компонент и микросхем малой степени интеграции от американской компании ETron Circuit Labs, российской компании Киберфизика, украинской компании Радиомаг (я могу объяснить различия между этими наборами в комментариях, если кому интересно).

  6. Материалы компаний-производителей микросхем ПЛИС (Xilinx, Altera) и образовательных плат с микросхемами ПЛИС (Digilent, Terasic).

  7. Примеры кода, контрольные работы и рекомендации по проектам, разработанные Антоном Моисеевым, Юрием Панчулом, Евгением Коротким, Александром Барабановым и другими инженерами компаний и преподавателями университетов для различных мероприятий в Калифорнии, Казахстане, России и Украине.

5. План на будущее номер 1. Формат годового курса на 35 учебных часов, раскиданных на учебный год по часу в неделю

  1. От физики к дискретным элементам

    1. Что такое ток, напряжение и сопротивление. Как устроена макетная плата. Упражнение: первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов. Переменные резисторы, фоторезисторы.

    2. Что такое транзистор. Обзор переключающих элементов от реле, радиоламп, дискретных транзисторов до транзисторов на микросхемах. Упражнения с тиристором (SCR — silicon controlled rectifier — нагляднее чем транзистор), биполярным p-n-p и n-p-n транзисторами.

    3. Контрольная работа.

  2. От дискретных элементов к комбинационной логике

    1. Булева алгебра и алгебра логики. Операции, выражения, аксиомы и тождества, включая законы де Моргана. Таблицы истинности.

    2. Комбинационные логические элементы И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ-ИЛИ (AND, OR, NOT, NAND, NOR, XOR). Как комбинационные элементы строятся из транзисторов. Упражнение: построить AND, NAND или NOR из дискретных элементов.

    3. Логические элементы в микросхемах малой степени интеграции. Индивидуальное упражнение: каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Что такое такое подтягивающие резисторы и зачем они нужны. Добавляем к предыдущему упражнению кнопки и подтягивающие резисторы.

    4. Контрольная работа.

  3. Двоичная арифметика и ее реализация

    1. Двоичные числа. Преобразование из двоичных в десятичные числа и наоборот. Операции сложения и умножения. Отрицательные числа и дополнительный код.

    2. Реализация полусумматора и полного сумматора с помощью логических элементов. Перенос. Многоразрядный сумматор с последовательным переносом. Упражнение на макетной плате. Упоминание о длинной временной задержке и схемах с более оптимальной задержкой.

    3. Использование 4-битного полного сумматора CMOD 4008. Построение из него 8-битного сумматора и схемы вычитания. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.

    4. Контрольная работа.

  4. Последовательностная логика

    1. Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.
      Так как в обвязку 555 входят конденсаторы, могут понадобится дополнительные объяснения, что такое конденсаторы, зачем они нужны в обвязке 555 и как они маркируются. Также может быть полезным и вспомогательное упражнение с зарядкой и разрядкой конденсаторов разной емкости.

    2. Схемы с внутренним состоянием. Построение RS-защелки из логических элементов NAND. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.

    3. Последовательностные блоки — счетчик (CMOS 4029) и сдвиговый регистр (4015). Семисегментный индикатор и его драйвер 4511. Упражнения с этими микросхемами.

  5. Экзамен.

  6. От микросхем малой степени интеграции к ПЛИС — комбинационная логика

    1. Понятие о ПЛИС (программируемой логической интегральной схеме) — матрице реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Упражнение: синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.

    2. Продолжение изучения языка Verilog. Типы данных, выражения, присваивания. Always-блоки и основные операторы. Упражнение: вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.

    3. Продолжение изучения языка Verilog. Иерархия модулей. Упражнение: построение мультиплексоров и сумматоров из подмодулей. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.

    4. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек. Упражнение: создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования и программы GTKWave для просмотра временных диаграмм.

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

    6. Контрольная работа

  7. Проектирование последовательностной логике на языке Verilog с реализацией на ПЛИС

    1. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog.

    2. Упражнения: реализация D-триггера, счетчика и сдвигового регистра на ПЛИС. Анализ результатов программы статического анализа о максимальной частоте. Демонстрация: использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.

    3. Концепция конечного автомата. Диаграммы изменения состояний. Упражнения: конечные автоматы светофора и кодового замка.

    4. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце курса) по интеграции датчиков и других периферийных устройств с платой c ПЛИС. Самостоятельная работа: индивидуальный проект, модифицирующий поведение одного из примеров с последовательностной логикой: счетчика, сдвигового регистра или конечного автомата.

    5. Концепция конвейерной обработки. Сравнение конвейерной реализации арифметических блоков, вычисляющих степень и квадратный корень.

    6. Контрольная работа.

  8. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.

    1. Концепция фон-Нейманновской машины. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Упражнение с симулятором процессора на уровне инструкций — MARS MIPS. Простые программы на ассемблере для вычисления выражений.

    2. Условные и безусловные переходы, метки, циклы. Пример: вычисление чисел Фибоначчи. Индивидуальное упражнение на основе модификации примера.

    3. Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Упражнение: программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.

    4. Контрольная работа.

  9. Микроархитектура: строим процессор

    1. Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.

    2. Продолжение 9.1

  10. Представление студенческих проектов по интеграции с датчиками

  11. Экзамен

6. План на будущее номер 2. Формат двухнедельного летнего лагеря

  1. Знакомство с макетной платой, сопротивлениями и логическими элементами.

    1. Первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов.

    2. Комбинационные логические элементы. Каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Входы подключаются к питанию и земле переходниками, и входы и выходы подключаются к светодиодам.

    3. Вариант упражнения 2 с кнопками и подтягивающими резисторами, с объяснением их функции.

  2. Знакомство с двоичной арифметикой

    1. Использование 4-битного сумматора на микросхеме CMOD 4008.
      Построение 8-битного сумматора из двух 4-битных.

    2. Построение схемы вычитания используя тождество -a == ~ a + 1

  3. Знакомство с последовательностной логикой

    1. Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.

    2. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.

    3. Использование сдвигового регистра для генерации “бегущих огоньков” на основе микросхемы CMOS 4015.

    4. Строим счетчик (CMOS 4029) и подсоединяем к нему семисегментный индикатор через драйвер 4511.

  4. Знакомство с ПЛИС (программируемой логической интегральной схеме) — матрицей реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Типы данных языка Verilog, выражения, присваивания. Always-блоки и основные операторы.

    1. Синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.

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

    3. Продолжение изучения языка Verilog. Иерархия модулей. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек.

    4. Упражнение: построение мультиплексоров из подмодулей.

    5. Создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования, а также программы GTKWave для просмотра временных диаграмм.

  5. Проектирование последовательностной логике на языке Verilog. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog. Анализ результатов программы статического анализа о максимальной частоте.

    1. Реализация счетчика на ПЛИС.

    2. Реализация сдвигового регистра на ПЛИС.

    3. Использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.

    4. Модификация упражнения 2 или упражнения 3 на основе индивидуального задания.

  6. Концепция конечного автомата. Диаграммы изменения состояний. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце школы) по интеграции датчиков и других периферийных устройств с платой c ПЛИС.

    1. Конечный автомат “улыбающаяся улитка”.

    2. Конечный автомат кодового замка на основе индивидуального задания.

    3. Конечный автомат для работы с датчиком освещения.

  7. Архитектура процессора: вид вычислительной установки со стороны программиста. Концепция фон-Нейманновской машины. Использование симулятора процессора на уровне инструкций MARS MIPS.

    1. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Простые программы для вычисления выражений.

    2. Условные и безусловные переходы, метки, циклы. Программа вычисляющая числа Фибоначчи.

    3. Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.

  8. Микроархитектура: строим процессор.

    1. Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.

    2. Больше о процессорах.

  9. Работа над индивидуальным проектом

  10. Сдача индивидуального проекта

Приложение A.

Что такое язык описания аппаратуры Verilogи как он связан с проектированием микросхем

Из поста на Geektimes Оруженосцы микроэлектроники. Видеорепортаж с конференции по проектированию электроники в Сан-Франциско.

В последние 25 лет дизайн микросхемы чаще всего пишется на языке описания аппаратуры Verilog (в Европе и у военных — VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы.

Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. — получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы. Самые известные фабрики этого типа принадлежат компании Taiwan Semiconductor Manufacturing Company или TSMC.

Приложение B. Что такое ПЛИС / FPGA и почему изучение ПЛИС нельзя заменить более глубоким изучением Ардуино или Расберри Пай

Из поста на Хабре Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:

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

ПЛИС-ы / FPGA — не процессоры, «программируя» ПЛИС (заполняя конфигурационную память ПЛИС-а) вы создаете электронную схему (хардвер), в то время как при программировании процессора (фиксированного хардвера) вы подсовываете ему цепочку написанных в память последовательных инструкций программы (софтвер).

Внизу — схема простейшего блока FPGA, в который входит look-up table (LUT) и flip-flop. Правда в этой схеме не показаны мультиплексоры, которые меняют функцию ячейки, и соединения с конфигурационной памятью.

Диаграммы, иллюстрирующие структуру FPGA:

И еще одна:

Приложение C. Отрывок из заметки про конференции в Томске про то, как образование школьников в данной области привязано к образованию студентов

Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.

К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге. Игнорируется возможность интеграции концепций HDL и RTL в программы физматшкол, где их можно было бы привязать к математической логике, теории конечных автоматов и электричеству, подобно тому, как обогатило советские школьные программы введение в середине 1980-х годов элементов программирования.

Помимо конференции в Томске и планируемого следующего эксперимента в июле а Новосибирске, который поддерживается Новосибирской Летней Школой Юных Программистов, есть еще ранний план организовывать такой эксперимент в Казахстане (этом в частности заинтересована Венера Жаналина посещавшая киевский семинар).

Приложение D. Примеры простейшего кода на Verilog и порождаемые им схемы

Подробное объяснение работы счетчика — в тексте «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».

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

About Юрий Панчул

Поделиться ссылкой:

Как пересечь пропасть от физики к программированию: 1i7 — LiveJournal

Как пересечь пропасть от физики к программированию за 6 лабораторных работ - от мигающих лампочек на макетной плате через собственную реализацию процессора MIPS на ПЛИС до промышленной реализации MIPS в виде контроллера PIC32.

Курс окончен. Точнее, сам курс был готов еще в конце весны 2012го года, но отчеты осилил дописать только сейчас. С тех пор его прослушало 3 группы прикладных математиков и 1 одна группа автоматики и электромеханики в Нижегородском государственном техническом университете (НГТУ) им. Р.Е. Алексеева.

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

Оглавление

0. Введение
http://1i7.livejournal.com/515.html
Как пересечь пропасть от физики к программированию (0)
http://1i7.livejournal.com/1267.html
Введение (в весь курс вообще и в 1ю лабораторную работу в частности)

1. Подготовка к лабораторным работам с макетными платами и проводами
1.1. Подбор реквизита
http://1i7.livejournal.com/940.html

2. Лабораторная работа 1: сборка простых электронных схем на основе микросхем малой степени интеграции
http://1i7.livejournal.com/1471.html
2. 1. Главные детали — макетная плата, диоды и светодиоды
2.2. Определение булевых значений TRUE/FALSE на выбранном участке цепи — светодиод в качестве индикатора текущего значения
2.3. Таблица истинности и оператор OR
2.4. Оператор AND
2.5. Оператор NOT и транзистор
2.6. Объединение логических элементов в логическую цепь — оператор NAND как AND+NOT
2.7. Знакомство с модулями цифровой логики — 4 оператора NAND внутри модуля 4011
2.8. Таймер из двух элементов NAND и конденсатора
2.9. Устройство вывода — семисегментный диодный дисплей
2.10. Заключение

3. Подготовка к лабораторным работам с ПЛИС
3.1. Выбор оборудования, литературы и программного обеспечения
http://1i7.livejournal.com/1927.html (1)
3.1.1. Подобрать подходящую плату ПЛИС (FPGA)
3.1.2. Подобрать литературу
3.1.3. Verilog против VHDL
3.1.4. Подобрать и установить необходимое программное обеспечение

3.2. Установка Xilinx ISE WebPack и Digilent Adept2
http://1i7. livejournal.com/2271.html (2)
3.2.1. Установка Xilinx ISE WebPack
3.2.2. Установка Digilent Adept 2 Linux
3.2.3. Проверка работоспособности инструментов Digilent Adept 2 с платой Digilent Basys2

4. Лабораторная работа 2: знакомство с платой ПЛИС (FPGA) - основы комбинаторной логики
http://1i7.livejournal.com/2414.html (1)
4.1. Запуск среды разработки и создание проекта для платы Digilent Basys 2
4.2. Создать файл с исходным кодом на Verilog - пустой модуль
4.3. Структурная единица дизайна на Verilog - модуль как черный ящик со входами и выходами
4.4. Базовые булевы операторы
4.5. Синтез (synthesis) для ПЛИС (FPGA)
4.5.1. Подключение ucf-файла с описанием структуры платы ПЛИС
4.5.2. Создание модуля верхнего уровня для манипуляции реальными устройствами ввода/вывода платы ПЛИС
4.5.3. Синтез прошивки
4.6. Знакомство с симуляцией (simulation)

http://1i7.livejournal.com/2647.html (2)
4.7. Самостоятельная работа - драйвер для семисегментного диодного дисплея

5. Лабораторная работа 3: делаем память (защелки и триггеры)
http://1i7.livejournal.com/6295.html (1)
5.1. RS защелка (RS latch) на макетной плате
5.2. RS защелка (RS latch) на ПЛИС+Verilog

http://1i7.livejournal.com/6473.html (2)
5.3. D защелка (D latch) на ПЛИС+Verilog
5.4. D триггер (D flip-flop) на ПЛИС+Verilog
5.5. 0.5 байта (4 бита) из 4х D триггеров на ПЛИС+Verilog
5.6. Заключение

6. Лабораторная работа 4: простые конечные автоматы
http://1i7.livejournal.com/7503.html (1)
6.1. Разделение частоты тактового сигнала

http://1i7.livejournal.com/7749.html (2)
6.2. Знакомство с конечными автоматами - светофор
6.3. Самостоятельная работа - сделать робота, управляемого простым конечным автоматом

7. Лабораторная работа 5: делаем процессор MIPS
http://1i7.livejournal.com/8270.html (1)
7.1. Основные элементы архитектуры процессора на примере 32хбитного процессора MIPS
7. 1.1. Память инструкций и счетчик программы
7.1.2. Память данных
7.1.3. Файл регистров (register file)

7.2. Понятие языка ассемблера и конвертация его в машинный код процессора
7.2.1. Переходим к командам ассемблера
7.2.1.1. Команды типа R-type (register type)
7.2.1.2. Команды типа I-type (immediate type)
7.2.1.3. Команды типа J-type (jump type)
7.2.2. Практическое упражнение - перевести простую программу на ассемблере в машинный код
7.2.3. Ввод-вывод

http://1i7.livejournal.com/10468.html (2)
7.3. Основные модули дизайна HDL
7.3.1. Счетчик программы
7.3.2. Файл регистров
7.3.3. Память данных
7.3.4. Память инструкций

http://1i7.livejournal.com/10806.html (3)
7.4. Шина данных и контроллер
7.4.1. Параметры
7.4.2. Счетчик инструкций и память инструкций
7.4.3. Файл регистров
7.4.4. Разбор команд (контроллер)
7.4.5. Выполнение команд (шина данных)

http://1i7. livejournal.com/11103.html (4)
7.4.5.1. Команда add
7.4.5.2. Команда sub
7.4.5.3. Команда lw
7.4.5.4. Команда sw
7.4.5.5. Команда addi
7.4.5.6. Команда beq
7.4.5.7. Команда j

7.5. Ядро MIPS и модуль верхнего уровня
7.5.1. Ядро MIPS
7.5.2. Модуль верхнего уровня

http://1i7.livejournal.com/11333.html (5)
7.6. Подключение устройств ввода-вывода и демо-запуск на ПЛИС
7.6.1. Видео-память 7мисегментный дисплей v
7.6.2. Массив из 4х рычажков bs
7.6.3. Однобитный флаг bsf
7.6.4. Дополняем модуль Память данных
7.6.5. Дополняем модуль верхнего уровня

http://1i7.livejournal.com/11571.html (6)
7.7. Тестовые программы
7.7.1. Проверка "видео-памяти" - выводим цифру 8
7.7.2. Проверка "видео-памяти" - выводим цифру 5
7.7.3. Проверка ввода (1 бит - порт bsf) и условного перехода beq
7.7.4. Проверка сохранения слова (sw) и загрузки слова (lw)
7.7.5. Проверка рычажкового способа ввода данных
7. 7.6. Калькулятор

7.8. Лаба окончена

8. Подготовка к лабораторным работам с промышленной реализацией архитектуры MIPS на примере pic32
http://1i7.livejournal.com/12327.html
8.1. Литература

8.2. Оборудование
8.2.1. ChipKIT Uno32
8.2.2. ChipKIT Max32
8.2.3. ChipKIT uC32
8.2.4. Olimex DuinoMite

8.3. Программное обеспечение
8.3.1. Редактор кода
8.3.2. Компилятор Си и транслятор ассемблера в машинный код
8.3.3. Сборка прошивки
8.3.4. Программатор
8.3.5. Подключение платы (для прошивки с avrdude)

8.4. Дополнительно
8.4.1. GDB
8.4.2. MPLAB X
8.4.3. Коммерческие компиляторы от Microchip
8.4.4. PICkit3

9. Лабораторная работа 6: знакомство с промышленной реализацией архитектуры MIPS на примере pic32
http://1i7.livejournal.com/15095.html (1)
9.1. Дополнительно документация
9.2. Поддерживаемые команды - ассемблер MIPS32

http://1i7.livejournal. com/15209.html (2)
9.3. Структура памяти
9.3.1. Как делали мы
9.3.1. Как сделано в PIC32
9.4. Блок памяти RAM
9.5. Блок памяти FLASH
9.6. Блок памяти BOOT

http://1i7.livejournal.com/15637.html (3)
9.7. Блок памяти SFR (ввод-вывод)
9.7.1. Распиновка
9.7.2. Работа с портами ввода-вывода через регистры

http://1i7.livejournal.com/17042.html (4)
9.8. Примеры
9.8.1. Задание 1 - зажечь лампочку ассемблером MIPS
9.8.2. Задание 2 - считать значение с ножки ассемблером MIPS

http://1i7.livejournal.com/17301.html (5)
9.8.3. Задание 3 - мигаем лампочкой программой на Си
9.8.4. Задание 4: считать значение с ножки программой на Си

Также для удобства pdf-файлы с этими же материалами
(пока просто копии веб-страниц с нехорошей версткой):
Лекции по Верилогу: https://yadi.sk/d/Frm7d25P3St2wr
лаба1: https://yadi.sk/i/K4s9ByHaBG7DZw
лаба2: https://yadi.sk/i/l_HoWDOkVab19A
лаба3: https://yadi. sk/i/mA8C3jpHnjIQ2Q
лаба4: https://yadi.sk/i/pKO500ndpH-C1Q
лаба5: https://yadi.sk/i/aWQwPsYBEC6Ipw

Исходный код всех занятий: https://github.com/1i7/verilog-basics

Занимательное чтиво по мотивам

Концепт курса и вводная информация:
первый пост у Юрия Панчула: Как пересечь пропасть от физики к программированию и насолить Алексу Экслеру
репост у Аммосова: Электронная логика
Статья Юрия Панчула в газете "Троицкий вариант": "Между программированием и физикой", 06 декабря 2011 года. ТрВ № 93, c. 7, "Образование" (pdf).

Объявление о начале:
Как пересечь пропасть от физики к программированию (0)
репост у Аммосова: Аппаратное программирование в НГТУ
репост у Панчула: Товарищи в Нижегородском государственном техническом университете воплощают в реал обсуждение в ЖЖ

Обсуждение 1й лабораторной работы с мигающими лампочками:
Вакуленко: Цифровая электроника для программистов
Аммосов: Железячные лабы
Ужас Совка: Да или Нет? (к сожалению журнал Ужаса уже удален и пост не сохранился даже в кеше яндекса; апдейт: зато остался в веб-архиве!)
Панчул: А Ужас Совка Против!

Цифровые микроэлектронные биороботы на Верилоге:
Пост: Цифровые микроэлектронные биороботы на Верилоге
Панчул: Молодые люди, которым есть что показать помимо "открытых человеческих лиц"
Статья в Московском Комсомольце:  Детям предложат поиграть в тараканов, ОккупайМК!, О нашей затее с преподаванием FPGA и микроконтроллеров написали в "Московском Комсомольце"
Ролик на СетиНН: Цифровые микроэлектронные биороботы на СетиНН, От телепередачи до матрицы

Разное у Юрия Панчула:
Репост c 1i7: Автоматизация проектирования электроники
Репост c 1i7: Подготовка к лабам на FPGA
Подготовка к лабораторным работам с ПЛИС (2) или как я занимался сексуальным харазментом
Написал примерчик на верилоге для начинающих - стековый калькулятор
Почему одни культуры уважаемы, а другие нет?
Google и Philips поддерживают архитектуру MIPS, а в Нижнем Новгороде студенты собирают роботов
С Днем Победы! В XXI веке противником России будет не Германия
В чем разница между "креативным классом" и "людьми, создающими новое"?
Шоппинг-лист для курса "Знакомство с цифровой микроэлектроникой для математиков и программистов"
За то, что я рекомендую российским студентам, американские полицаи арестовуют с пистолетом
Написал примерчик на верилоге для начинающих - стековый калькулятор

Дополнительное полезное:
Лабораторная работа по программированию на голом железе у Сергея Вакуленко: Часть 5. Программирование на голом железе и зачатие операционной системы

Потактовый клон Денди на FPGA [Архив] - Speccy

Я хочу, чтобы данный туториал подходил для самых маленьких детей. (с) stalker29218 Поэтому, необходимо дать некоторую базу по цифровой электронике. Есть разные технологии цифровых микросхем, во многом они похожи. Я не буду описывать, как работает базовая логика. Практически одинаково во всех технологий, а кому интересно я рекомендую очень хороший справочник, который называется "Популярные цифровые микросхемы", за авторством В.Л.Шило из серии МРБ выпуск 1111.

Так вот, логику мы опустим. Мы будем рассматривать ключевой момент - хранение состояния, в народе триггеры. Построение триггера сильно зависит от технологии. Что такое триггер? Это элемент с двумя устойчивыми состоянии. В простейшем случае это кольцо из двух инверторов:
http://savepic.net/10173528.png
Однако, практической пользы от него нет - им не возможно управлять, не вызвав короткое замыкание одного из выходов. Поэтому, обычно используются многовходовые элементы с инверсией (без разницы И или ИЛИ):
http://savepic.net/10171480.png
Это простейший RS триггер. Он уже может быть полезен, например, для подавления дребезга ответственной кнопки. Однако, у него есть недостаток: если активировать оба входа управления возникает неопределенное состояние. Поэтому, к нему добавляется простейшая схема управления:
http://savepic.net/10161240.png
И триггер обретает сигнал строба. Это позволяет ввести нечувствительность RS триггера к изменению на входах R или S во время изменения сигнала. Замечу, что это не тактируемый тригер, а обычная прозрачная защелка, поэтому, во время активного сигнала управления неопределенное состояние все еще может возникнуть. Поэтому, сигналы R и S объединяют через инвертор и получается D триггер:
http://savepic.net/10159192.png
Это схема классической прозрачной защелки. Иногда прозрачность защелки вредна: если выходной сигнал завязан на вход, то схема при активации защелки станет осцеллировать, вызывая непредсказуемые состояния логики. Для развязывания выхода от входа нужен тактируемый триггер. Обычно, это цепочка ведущий-ведомый из двух защелок:
http://savepic.net/10165336.png
Теперь, ведомый получит сигнал от мастера тогда, когда мастер станет нечувствительным ко входу. И наоборот, ведомый будет не чувствителен к изменению состояния мастера когда мастер управляется извне. Это классический тактируемый триггер (Т триггер). Если объединить R и S входы через инвертор, как это сделано у D триггера, то получаем тактируемый D триггер. Если нам нужен тактируемый D триггер с ассинхронными входами сброса и установки, то нужно вводить дополнительные ведущие RS триггеры:
http://savepic.net/10218587.png
Вот так сложно дается базовый элемент синхронной схемы на технологии ТТЛ. Вот этот же примитив в схемном вводе Quartus'а:
http://savepic.net/10216539.png
Очень расточительно расходуется пространство кристалла: по нескольку транзисторов на каждый субэлемент примитива. Но все изменилось, когда пришла КМОП технология. Среди разных достоинств этой технологии есть одна ключевая, которую имеют только полевые транзисторы: большое сопротивление затвора и большой диапазон изменения сопротивления канала (от практически короткого замыкания, до практически полной изоляции). Поэтому, в некотором смысле каждый транзистор КМОП структуры можно рассматривать как управляемый тумблер:
http://savepic.net/10221659.png
Всего два разнополярных транзистора позволяют организовать Z состояние выхода (электронный ключ):
http://savepic.net/10219611.png
Причем, при определенных условиях питающего напряжения, это позволяет коммутировать даже аналоговый сигнал. Яркий пример - К561КП2 в Вега МП122 или К176КТ3. Даный ключ (на картинке блок "КК") позволяет очень просто построить триггер:
http://savepic.net/10213467.png
Действительно, нет ничего проще, чем просто разорвать кольцо из инверторов. Это схема полноценного тактируемого D триггера с асинхронными входами сброса или установки. Если они не нужны, то вся схема упрощается до 2х инверторов и 2 ключей на каждый RS триггер (всего 8 транзисторов на RS триггер). Сравните с ТТЛ вариантом.

Есть еще кое-что в технологии КМОП, что наследуется из особенностей полевых транзисторов. Ключевой недостаток полевого транзистора вытекает из его достоинства: из-за большого сопротивления затвора паразитная емкость последнего начинает иметь значение. Таким образом, если вдруг затвор полевого транзистора повиснет в воздухе, то его затвор будет сохранять заряд некоторое время, что будет эквивалентно подаче управляющего сигнала. Это очень похоже на ячейку DRAM. И этим же воспользовались инженеры, которые проектировали микросхемы КМОП на заре электроники.

Действительно, если допустить, что паразитной емкости затвора достаточно для хранения заряда в пределах периода тактовой частоты и недостаточно, чтобы исказить (затянуть фронт) форму сигнала при переключении, то транзистор с оторванным затвором можно рассматривать как элементарную ячейку DRAM, которую периодически следует регенерировать. А если еще допустить то, что нам не требуется, чтобы ток тек в обоих направлениях, то управляющий ключ упрощается до одного транзистора. Таким образом, мы получаем триггер-защелку всего из трех транзисторов (транзистор разрывающий затвор ключевого транзистора, сам ключевой транзистор и транзистор-нагрузка, если не требуется ОС):
http://savepic.net/10212443.png
Причем, добавление всего одного транзистора позволяет организовать мультиплексор: на картинке выше сигнал OAM8 подключает один источник к триггеру, а сигнал OAP к другому. Конечно, такие схемы не будут статичными и будут иметь нижний предел рабочей частоты (верхний предел есть у всех). Но простота реализации и стабильная тактовая частота оправдывают это.

- - - Добавлено - - -

Я думаю, многое теперь понятно. Теперь ключевая особенность ПЛИС. Особенность ПЛИС в том, что они могут менять эквивалентную логическую функцию в зависимости от "программы" пользователя. Это не копия дискретной схемы в прямом смысле, это функциональная симуляция. Конечно, можно создать ASIC на основе описания схемы посредством xHDL языка (для чего этот язык и создавался) и это будет либо транзисторная копия, либо функциональная, созданная из примитивов библиотеки CELL. Но это может быть применено только на стадии выпуска готовой схемы. На стадии разработки требуется многократное реконфигурирование. И только из-за этого приходиться мириться с некоторыми ограничениями любой ПЛИС, от CPLD до FPGA. Более подробно как сделаны ASICи на основе CELL можно подсмотреть у Org'а на PSXDev (http://psxdev.ru/news).

Реконфигурируемые ПЛИС выдвигают определенные требования к дизайну (так называется проект функциональной схемы, описываемой на языках xHDL либо схемным вводом). Особенность ПЛИСин в том, что они состояит из базовых блоков, в состав каждого входит один (или несколько) триггеров, логическая программируемая матрица (в старых CPLD и FGPA) или LUT (Look-Up Table в новых CPLD и FPGA) и несколько вспомогательных схем, вроде схемы выбора тактирования триггера или ускоренного переноса для организации сумматоров и счетчиков. LUT позволяет "запаковать" целый кусок логической комбинаторной схемы по построенной синтезатором таблице истинности, что положительно сказывается на "вместимости" микросхемы ПЛИС. Вот так выглядит ячейка у CPLD семейства MAX3000:
http://savepic.net/10199131.png
А вот так у FPGA семейства Cyclone IV:
http://savepic.net/10200155.png
Все ячейки связаны между собой магистралями. Это PIA (Programmable Interconnect Array) у CPLD и просто LAB Interconnect у FPGA. И вся соль в том, что именно эти магистрали и дают ту самую гибкость при построении эквивалентной схемы. Однако именно они и являются самым главным недостатком.

Во-первых, ее емкость конечна. У CPLD PIA общий для всех LAB, поэтому, даже простую схему, требующую большое количество соединений в CPLD бывает не уместить. У FPGA магистрали разбиты на категории: локальная, глобальная горизонтальная и глобальная вертикальная. Это дало больше свободы, однако ограничения всегда есть.

Во-вторых, "растекание" схемы по ячейкам. И если на входы одной ячейки подаются сигналы от других, находящихся на разном расстоянии, то сигналы могут прийти с разной задержкой. Она не большая, однако быстродействия ПЛИС хватает, чтобы среагировать на нее. И все это зависит как от синтезатора и компилятора, так и (наверное в большей степени) от фиттера (программа, которая планирует в какую ячейку какую часть схемы положить). Конечно, в каких-то пределах можно влиять на процесс, например можно указать границы района, куда следует расположить отдельный модуль (и фиттер поругается, если ему не хватит ресурсов этого региона) или допустить локальное дублирование кусков схем, если позволяет место.

В любом случае, при программировании ПЛИС следует стремиться строго к синхронному дизайну, и тогда многие грабли просто не появятся. По моим личным наблюдениям, комбинаторику следует синхронизировать не далее 2го уровня (вложенность логических функций), стараться не допускать появления защелок (latch'ей, Quartus сам предупредит об этом в логе). Почаще заглядывать в RTL Viewer, чтобы проконтролировать, правильно ли понял вас синтезатор. В общем-то, это все и так описано в соответствующих книгах.

- - - Добавлено - - -

И на последок напомню, что исходная схема у нас построена на прозрачных защелках, а в ПЛИС следует использовать синхронный дизайн. Наличие защелок в дизайне ПЛИС (кроме специально созданных) может привести к метастабильности, а это в свою очередь приведет к неработоспособности схемы. Конечно, после просмотра RTL можно прогнать модель в симуляторе (это либо встроенный в Q9.x.x для ограниченного набора ПЛИС, либо ModelSim для любого другого Quartus'а и семейства ПЛИС), но проще всего это проверка в железе. Тем более, там можно использовать логический анализатор (как дискретный, что предпочтительно, так и встроенный в ПЛИС SignalTap). О каждой особенности переноса схемы будет указано в процессе обсуждения каждого блока PPU позже.

Надеюсь, теперь многое станет понятней.

Страница не найдена | MIT

Перейти к содержанию ↓
  • Образование
  • Исследовать
  • Инновации
  • Прием + помощь
  • Студенческая жизнь
  • Новости
  • Выпускников
  • О MIT
  • Подробнее ↓
    • Прием + помощь
    • Студенческая жизнь
    • Новости
    • Выпускников
    • О MIT
Меню ↓ Поиск Меню Ой, похоже, мы не смогли найти то, что вы искали!
Попробуйте поискать что-нибудь еще! Что вы ищете? Увидеть больше результатов

Предложения или отзывы?

SR Flip Flop Design с NOR Gate и NAND Gate

В этом руководстве мы обсудим одну из основных схем в цифровой электронике, известную как SR Flip Flop.Мы увидим базовую схему SR-триггера с использованием вентилей NOR и NAND, его работу, таблицы истинности, синхронизированный SR-триггер, а также простое приложение в реальном времени.

Введение

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

За исключением небольшой задержки распространения, выход Комбинационной логической схемы изменяется немедленно, когда есть изменение на входе.

Есть еще один класс схем, в которых выход зависит не только от текущего входа, но и от прошлых входов / выходов. Эти типы схем известны как последовательные логические схемы. Как мы можем получить данные «прошлого ввода / вывода»? У нас должна быть какая-то «память», чтобы иметь возможность хранить данные для последующего использования. Устройства или схемы, которые могут хранить данные и действовать как блок «памяти», известны как защелки или триггеры.

ПРИМЕЧАНИЕ: Термины «защелка» и «триггер» будут использоваться как синонимы, хотя технически они немного отличаются. Проще говоря, триггер - это защелка, управляемая тактовой частотой, то есть выход изменяется только при наличии тактового сигнала (высокий или низкий уровень, в зависимости от конструкции).

Что такое триггер?

Триггер - это базовый блок памяти, который может хранить 1-битную цифровую информацию. Это бистабильная электронная схема, то есть она имеет два стабильных состояния: ВЫСОКОЕ или НИЗКОЕ.Поскольку триггер является бистабильным элементом, его выход остается в любом из стабильных состояний до тех пор, пока не будет применено внешнее событие (известное как триггер).

Поскольку он сохраняет выходные данные еще долго после применения входа (если что-то не сделано для его изменения), триггер можно рассматривать как устройство памяти, которое может хранить один двоичный бит.

Простой триггер может быть спроектирован с использованием двух инверторов последовательно с обратной связью с выхода второго инвертора на вход первого инвертора. Следующие схемы показывают триггер с использованием инверторов.

Пусть Q 1 будет входом, а Q 3 будет выходом. Первоначально предположим, что обратная связь отключена и Q 1 переведен в 0 (логический 0, LOW, бит 0) путем подключения к земле. Q 3 также будет 0. Теперь, если обратная связь подключена и вход Q 1 отключен от земли, Q 3 по-прежнему будет иметь значение 0.

Аналогично, вместо земля, если мы повторим тот же процесс с 1 (логическая 1, HIGH, бит 1), на выходе Q 3 останется 1.

Это простой триггер с двумя стабильными состояниями, и он остается в определенном состоянии, то есть в памяти, до тех пор, пока не произойдет внешнее событие (например, изменение ввода в данном случае).

Обзор SR Flip Flop

Вышеупомянутый триггер на основе инвертора предназначен только для понимания работы, но не имеет практического применения, так как не предусматривает применения каких-либо входных сигналов. Именно здесь на сцену выходят ворота NOR и NAND. Вышеупомянутый триггер на основе инвертора может быть реализован с использованием логического элемента ИЛИ-НЕ, как показано ниже.

Пока не обращайте внимания на значения «R» и «S» и давайте перерисуем приведенную выше схему в более традиционную форму и переименуем Q 2 как Q и ​​Q 3 как Q.

Из этого , триггер имеет два входа: R и S и два выхода: Q и Q, и из представления ясно, что выходы дополняют друг друга. Давайте попробуем проанализировать различные возможности входов и соответствующих им выходов.

Здесь важно отметить, что для логического элемента ИЛИ-ИЛИ логическая «1» является доминирующим входом, и если любой из его входов имеет логическую «1» (ВЫСОКИЙ), то на выходе будет логический «0» (НИЗКИЙ). , независимо от другого входа.Имея это в виду, проанализируем приведенную выше схему.

Случай 1: R = 0 и S = ​​0

В первом случае входы обоих вентилей ИЛИ-НЕ имеют логический «0». Поскольку ни один из них не является доминирующим входом, они не влияют на выход. Таким образом, выходные данные сохраняют свои предыдущие состояния, т. Е. Выходных данных нет. Это состояние называется условием удержания или условием отсутствия изменений.

Случай 2: R = 0 и S = ​​1

В этом случае вход «S» равен 1, что означает, что выход логического элемента И-ИЛИ B станет 0.В результате оба входа логического элемента ИЛИ-ИЛИ A становятся 0 и, следовательно, выходом логического элемента ИЛИ-НЕ A, и, таким образом, значение Q равно 1 (ВЫСОКОЕ). Поскольку «1» на входе S заставляет выход переключиться в одно из своих стабильных состояний и устанавливает его в «1», вход S известен как вход SET.

Случай 3: R = 1 и S = ​​0

В этом случае вход «R» равен 1, что означает, что выход логического элемента ИЛИ-НЕ А станет 0, то есть Q = 0 (НИЗКИЙ). В результате оба входа логического элемента ИЛИ-НЕ B становятся 0, и, следовательно, выход логического элемента ИЛИ-НЕ B равен 1 (ВЫСОКИЙ).Поскольку «1» на входе R заставляет выход переключиться в одно из своих стабильных состояний и сбрасывать его на «0», вход R известен как вход RESET.

Случай 4: R = 1 и S = ​​1

Это условие входа запрещено, поскольку оно заставляет выходы обоих вентилей ИЛИ-НЕ стать 0, что является нарушением дополнительных выходов. Даже если это условие ввода применяется, если следующие входы становятся R = 0 и S = ​​0 (условие удержания), то это вызывает «состояние гонки» между воротами NOR, что вызывает нестабильное или непредсказуемое состояние на выходе.

Следовательно, входное условие R = 1 и S = ​​1 просто не используется.

Итак, основанная на вышеупомянутых случаях и различных комбинациях входных данных, таблица истинности для SR Flip-Flop показана в следующей таблице.

SR-логика
R S Q Состояние
0 0 Последнее состояние Без изменений Набор
1 0 0 Сброс
1 1 Не применяется (?) Запрещено

. показано ниже:

SR Flip-Flop с использованием вентилей NAND (технически RS Flip-Flop)

SR-триггер также может быть сконструирован путем перекрестной связи двух вентилей NAND, но состояния Hold и Forbidden меняются местами.Это активный триггер SR с низким входом, поэтому назовем его RS-триггером. Схема триггера SR, использующего вентили NAND, показана на рисунке ниже.

Важным моментом относительно логического элемента NAND является то, что его доминирующий вход равен 0, то есть, если какой-либо из его входов имеет логический «0», выход будет логическим. 1 ', независимо от другого входа. Выход равен 0, только если все входы равны 1. Имея это в виду, давайте посмотрим, как работает RS-триггер на основе NAND.

Случай 1: R = 1 и S = ​​1

Когда оба входа S и R имеют ВЫСОКИЙ уровень, выход остается в предыдущем состоянии i.е., в нем хранятся предыдущие данные.

Случай 2: R = 1 и S = ​​0

Когда вход R - ВЫСОКИЙ, а вход S - НИЗКИЙ, триггер будет в состоянии SET. Поскольку R имеет высокий уровень, выход логического элемента И-НЕ B, то есть Q становится низким. Это приводит к тому, что оба входа логического элемента И-НЕ A становятся НИЗКИМИ, и, следовательно, выход логического элемента И-НЕ A, то есть Q становится ВЫСОКИМ.

Случай 3: R = 0 и S = ​​1

Когда вход R LOW, а вход S HIGH, триггер будет в состоянии RESET. Поскольку S имеет высокий уровень, выход логического элемента И-НЕ A i.е., Q становится НИЗКИМ. Это приводит к тому, что оба входа логического элемента И-НЕ B становятся НИЗКИМИ, и, следовательно, выход логического элемента И-НЕ A, то есть Q становится ВЫСОКИМ.

Случай 3: R = 0 и S = ​​0

Когда оба входа R и S имеют LOW, триггер будет в неопределенном состоянии. Поскольку низкие входы S и R нарушают правило триггера, согласно которому выходы должны дополнять друг друга. Итак, триггер находится в неопределенном состоянии (или в запрещенном состоянии).

Приведенная ниже таблица истинности суммирует описанную выше работу SR Flip Flop, разработанного с помощью логических элементов NAND.

R S Q Состояние
1 1 Последнее состояние Без изменений 0139 1 Установить
0 1 0 Сбросить
0 0 Не применяется (?) Запрещено

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

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

Тактовые триггеры SR

Возможны два типа синхронизированных триггеров SR: на основе NAND и на основе NOR. Схема синхронизированного SR-триггера с использованием логических элементов NAND показана ниже.

Эта схема образована добавлением двух логических элементов NAND к SR-триггеру на основе NAND. Входы имеют высокий уровень активности, поскольку дополнительный элемент И-НЕ инвертирует входы. Тактовый импульс подается на вход обоих дополнительных вентилей И-НЕ.

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

1
Часы R S Q Состояние
↓ или 0 или 1 X X X Последнее состояние Изменить (удерживать)
0 0 Последнее состояние Без изменений (удерживать)
0 1 1 Установить 0 0 Сброс
1 1 Не применяется (?) Запрещено

То же самое может быть достигнуто с помощью шлюзов NOR.Схема синхронизированного триггера SR, использующего вентили NOR, показана ниже.


На рисунке показана структура RS-триггера (поскольку R связан с выходом Q), функции SET и RESET остаются неизменными, то есть, когда S высокий, Q устанавливается в 1, а когда R высокий , Q сбрасывается в 0.

Приложения

Триггеры SR - это очень простые схемы, но они не широко используются в практических схемах из-за их недопустимого состояния, когда оба S и R имеют высокий уровень (S = R = 1).Но они используются в схемах переключения, поскольку обеспечивают простую функцию переключения (между Set и Reset).

Одним из таких приложений является схема устранения дребезга Switch. Триггеры SR используются для устранения механического дребезга переключателей в цифровых схемах.

Механический отскок

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

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

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

Как SR Flip-Flop устраняет механический отскок?

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

Когда кнопка нажата, контакт повлияет на вход триггера, и в текущем состоянии произойдет изменение, и никакие дальнейшие воздействия на схему / машину не будут другой механический переключатель отскакивает.Если есть какой-либо дополнительный вход от переключателя, изменений не произойдет, и триггер SR будет сброшен через небольшой промежуток времени.

Таким образом, тот же переключатель будет использоваться только после того, как триггер SR выполнит изменение состояния, то есть только после получения сигнала одиночного тактового импульса.

Схема расцепителя дребезга переключателя показана ниже.

Вход переключателя заземлен (логический 0). К каждому входу подключено по два подтягивающих резистора.Они гарантируют, что входы триггера S и R всегда равны 1, когда переключатель находится между контактами.
Другая схема может быть построена с триггером NOR SR.

Вход переключателя подключен к логике 1. К каждому входу подключены два понижающих резистора. Они гарантируют, что входы триггера S и R всегда равны 0, когда переключатель находится между контактами a и b.

Обычно используемые ИС для устранения дребезга механического переключателя: MAX6816 - с одним входом, MAX6817 - с двойным входом, MAX6818 - ИС с восьмигранным входом переключателя.Эти микросхемы содержат необходимую конфигурацию с триггерами SR.

Заключение

Полное руководство для начинающих по базовой схеме памяти, известной как SR Latch или SR Flip-Flop. Вы узнали, что такое SR-триггер, его работа, его реализация с использованием вентилей NOR и NAND, синхронизированный Sr-триггер, а также важное применение SR-триггера.

Разница между триггером и защелкой

Разница между триггером и защелкой

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

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

Защелка:
Защелка - это электронное устройство, которое немедленно изменяет свой выход в зависимости от применяемого входа. Он используется для хранения 1 или 0 в любое заданное время. Он состоит из двух входов, а именно «SET» и RESET, и двух выходов, которые дополняют друг друга.


Разница между триггером и защелкой:

SNO Триггер Защелка
1 Триггер - это бистабильное устройство i.е., он имеет два стабильных состояния, которые представлены как 0 и 1. Защелка также является бистабильным устройством, состояния которого также представлены как 0 и 1.
2 Он проверяет входы, но изменяет только выход время от времени определяется тактовым сигналом или любым другим управляющим сигналом. Он непрерывно проверяет входы и немедленно реагирует на изменения входных данных.
3 Это устройство с запуском по фронту. Это устройство срабатывания по уровню.
4 Такие ворота, как NOR, NOT, AND, NAND, являются строительными блоками шлепанцев. Они тоже состоят из ворот.
5 Они подразделяются на асинхронные и синхронные триггеры. У защелок такой классификации нет.
6 Он образует строительные блоки многих последовательных схем, таких как счетчики. Они могут использоваться для проектирования последовательных цепей, но обычно не являются предпочтительными.
7 a, Триггер всегда имеет тактовый сигнал Защелка не имеет тактового сигнала
8 Триггер может быть построен из защелок Защелки могут быть построены из ворот
9 Пример: D-триггер, JK-триггер Пример: SR-защелка, D-защелка

Триггеры по краю

Триггеры по краю

Триггерные изменения, запускаемые по фронту состояния либо на положительном фронте (нарастающий фронт), либо на отрицательном фронте (задний фронт) тактового импульса на входе управления.Три основных здесь представлены типы: S-R, J-K и D.

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

Положительное срабатывание фронта (без пузыря на входе Clock):
S-R, J-K и D.

Срабатывание по отрицательному фронту (с пузырь на входе Clock):
S-R, J-K и D.

Входы S-R, J-K и D называются синхронными входами, потому что данные на этих входах передается на выход триггера только по фронту запуска часов Импульс. С другой стороны, прямой набор (SET) и входы clear (CLR) называются асинхронными входами, поскольку они влияют на состояние триггера не зависит от часов.Для синхронного для правильной работы эти асинхронные входные данные должны быть сохранены НИЗКИЙ.

Триггер S-R с синхронизацией по фронту

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

Как S = 1, R = 0. Триггерные УСТАНОВКИ на восходящих часах край.
Обратите внимание, что входы S и R можно изменить в любое время, когда вход часов - НИЗКИЙ или ВЫСОКИЙ (за исключением очень короткого интервала вокруг запускающий переход часов), не влияя на выход. Это проиллюстрировано на временной диаграмме ниже:

Триггер J-K с синхронизацией по фронту

Триггер J-K работает очень похоже на триггер S-R.Единственная разница в том, что у этого триггера НЕТ недопустимого состояния. Выходы переключаются (изменить на противоположный состояние), когда оба входа J и K находятся в состоянии ВЫСОКИЙ. Показана таблица истинности ниже.

Триггер D с синхронизацией по фронту

D-триггер работает намного проще. Это имеет только одно дополнение к часам. Это очень полезно, когда один бит данных (0 или 1) должен быть сохранен. Если на D высокий при подаче тактового импульса триггер устанавливает и сохраняет значение 1.Если при подаче тактового импульса на входе D присутствует LOW, триггер сбрасывает и сохраняет 0. Таблица истинности ниже суммирует операции положительного запускаемого фронтом D-триггера. Как и прежде, триггер, запускаемый отрицательным фронтом, работает так же, за исключением того, что спадающий фронт синхроимпульса - это пусковой фронт.

Базовые методы кодирования - MATLAB и Simulink

1.A.A.1
Предупреждение

Verilog: Имя исходного файла должно совпадать с именем модуля в файле.

По умолчанию HDL Coder генерирует код с тот же модуль и имя файла. Если вы используете архитектуру BlackBox для вашей подсистемы и сгенерируйте код, имена источников и имена файлов может быть разным.

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

VHDL: файл имена, содержащие сущности, должны иметь расширение .vhd или .vhdl.

Имя исходного файла должно использовать определенные рекомендуемые наименования. соглашения и расширения файлов.

Используйте параметр расширения файла VHDL в советник по рабочим процессам HDL или свойство VHDLFileExtension из командной строки.

1.A.A.2
Сообщение
Verilog / VHDL: Идентификаторы и имена должны соответствовать рекомендуемому соглашению об именовании.

Имя в дизайне не начинается с буквы или содержит символ, отличный от цифры, буквы или подчеркивания.

Обновите имена в своем дизайне, чтобы они начинались с буква алфавита ( a-z , A-Z ), и содержат только буквенно-цифровые символы ( a-z , A-Z , 0-9 ) и подчеркивания ( _ ).

1.A.A.3
Сообщение
Verilog / VHDL: Ключевые слова в Verilog-HDL (IEEE1364), SystemVerilog (v3.1a) и ключевые слова в VHDL (IEEE1076.X) нельзя использовать.

Есть ключевые слова Verilog ® , SystemVerilog или VHDL ® . внутри имен в вашем дизайне.

Обновите имена в своем дизайне, чтобы они не содержали Verilog, SystemVerilog или ключевые слова VHDL.

Можно отключить проверка этого правила с помощью свойства HDLKeywords объекта настройки стандарта HDL-кодирования.

1.A.A.3vb
Сообщение
VHDL: Не использовать стандартные имена VHDL.

HDL Coder не использует стандартные имена VHDL.

Никаких действий не требуется.

1.A.A.4
Ошибка

Verilog / VHDL: Не используйте имена, начинающиеся с VDD, VSS, VCC, GND или VREF.

Имя или имена в дизайне не используют стандарт соглашение об именовании.

Обновите имена в своем дизайне, чтобы они начинались с буква алфавита ( a-z , A-Z ), и содержат только буквенно-цифровые символы ( a-z , A-Z , 0-9 ) и подчеркивания ( _ ).

1.A.A.5
Ошибка

Verilog / VHDL: Не используйте прецедентные варианты имени в одной и той же области.

Два или более имен в вашем дизайне в одном объеме, идентичны за исключением корпуса.

Например, имена foo и Foo не могут быть в той же сфере.

Обновите имена в своем дизайне, чтобы два имени в одной и той же области различаются только в случае.

Вы можете отключить эту проверку правила с помощью свойства DetectDuplicateNamesCheck объекта настройки стандарта HDL-кодирования.

1.A.A.6
Предупреждение

Verilog: Имена основных портов или модулей должны соответствовать рекомендованному именованию. соглашение.

HDL Coder генерирует код, который соответствует с этим правилом для Verilog и VHDL.

Нет действий обязательный.

VHDL: компонент имя должно совпадать с именем соответствующего объекта.

1.A.A.9
Предупреждение
Verilog / VHDL: Верхний уровень имена модулей / объектов и портов должны быть меньше или равны 16 символам. по длине и не смешивать-падеж.

Имя модуля, объекта или порта верхнего уровня в сгенерированном код длиннее 16 символов или использует буквы в смешанном регистре.

Обновите указанное имя в своем дизайне, чтобы оно длиной менее или равной 16 символов, и все буквы строчные. все буквы должно быть либо все в верхнем регистре, либо все строчные.

Это правило можно настроить с помощью свойства ModuleInstanceEntityNameLength объекта настройки стандарта HDL-кодирования.

S / R Flip-Flop

Имя параметра Этикетка Тип данных Диапазон шт. Параметр Описание
CLK_TO_OUT_DELAY Часы для вывода Задержка Число 1f на 1024 с Задержка срабатывания событие clock до тех пор, пока выходы триггера не изменятся
GNDREF Земля Ref Строка нет Определяет, есть ли устройство имеет контакт заземления.Любой цифровой компонент, имеющий входной или выходной контакт, подключенный к узлу аналоговой схемы, должен иметь свой Земля Ссылка , подключенная к аналоговому узлу. Обычно это земля на схеме.
ВРЕМЯ ЗАДЕРЖКИ Время удержания Число 1f на 1024 с Минимальное время после событие синхронизации, при котором входные сигналы должны оставаться стабильными, чтобы что допустимое изменение в каждом состоянии ввода распознается.
HYSTWD,
TH
Гистерезис,
Порог
Число мин: 1f В Гистерезис и порог входы. Ширина гистерезисного окна, HYSTWD центрируется около Порог ( TH ) напряжения.Для определения актуальных порог ( TL , THI ), заменить Порог ( TH ) и Гистерезис ( HYSTWD ) в каждом из следующие формулы:
Входной логический уровень Фактический порог
1 Порог + 0.5 * Гистерезис
0 Порог - 0,5 * Гистерезис
IC Начальное состояние Число нет Исходное состояние Выход триггера в момент времени = 0
MIN_CLK Минимальная ширина Clk Число 1f на 1024 с Минимальная допустимая ширина часов.Ширина часов меньше этого параметра не вызовет срабатывания Резкий поворот.
RIN Входное сопротивление Число мин: 100 Ом Входное сопротивление каждого Входной контакт триггера
МАРШРУТ Выходное сопротивление Число мин: 1 мин. Ом Выходное сопротивление Q и QN штифты
ВРЕМЯ НАСТРОЙКИ Время настройки Число 1f на 1024 с Минимальное время до событие синхронизации, при котором входные сигналы должны оставаться устойчиво, так что распознается действительное изменение в каждом состоянии ввода.
TRIG_COND Условие срабатывания Строка нет Определяет срабатывание Состояние тактового вывода триггера:
  • 0_TO_1 для срабатывания нарастающего фронта
  • 1_TO_0 для срабатывания спадающего фронта
VOH Высокое напряжение на выходе Число любой В Выходное высокое напряжение для Q и QN штифты
ТОМ Низкое напряжение на выходе Число любой В Выходное низкое напряжение для Q и QN штифты

Вьетнамки в электронике-T Flip Flop, SR Flip Flop, JK Flip Flop, D Flip Flop Circuits

В этой статье мы узнаем о различных типах шлепанцев, используемых в цифровой электронике.

Базовые шлепанцы в цифровой электронике

В этой статье рассматриваются основные схемы триггеров, такие как S-R триггеры, JK триггеры, D триггеры и T триггеры, а также таблицы истинности и соответствующие им символы схем.

Прежде чем перейти к теме, важно ознакомиться с ее основами. Щелкните по ссылкам ниже для получения дополнительной информации.

ПОСМОТРЕТЬ: BOOLEAN LOGIC

ПОСМОТРЕТЬ: ЛОГИЧЕСКИЕ ВОРОТА

СМОТРЕТЬ: ПОЛОВИННЫЙ И ПОЛНЫЙ ДОБАВИТЕЛЬ

Шлепки на самом деле являются применением логических вентилей.С помощью булевой логики вы можете создать с ними память. Триггеры также можно рассматривать как основную идею оперативной памяти [RAM]. Когда им дается определенное входное значение, они будут запоминаться и выполняться, если логические элементы спроектированы правильно. Более широкое применение шлепанцев помогает при разработке более совершенных электронных схем.

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

В электронных схемах используются в основном четыре типа триггеров. Их

  1. Базовый триггер или S-R триггер
  2. Триггер задержки [D-триггер]
  3. Вьетнамки J-K
  4. T Вьетнамки

1. Шлепанцы S-R

Триггер SET-RESET разработан с помощью двух вентилей NOR, а также двух вентилей NAND. Эти шлепанцы также называются S-R Latch.

  • S-R Flip Flop с использованием NOR Gate

Конструкция такого триггера включает два входа, называемых SET [S] и RESET [R]. Также есть два выхода, Q и Q ’. Схема и таблица истинности показаны ниже.

S-R Flip Flop с использованием NOR Gate

Из диаграммы видно, что триггер имеет в основном четыре состояния. Их

S = 1, R = 0 — Q = 1, Q ’= 0

Это состояние также называется состоянием SET.

S = 0, R = 1 — Q = 0, Q ’= 1

Это состояние известно как состояние СБРОС.

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

S = 0, R = 0 — Q&Q ’= Запомнить

Если оба значения S и R переключены на 0, тогда схема запоминает значение S и R в их предыдущем состоянии.

S = 1, R = 1 — Q = 0, Q ’= 0 [Недействительно]

Это недопустимое состояние, поскольку значения Q и Q ’равны 0. Предполагается, что они дополняют друг друга.Обычно этого состояния следует избегать.

  • S-R Flip Flop с использованием NAND Gate

Схема триггера S-R с использованием NAND Gate и его таблица истинности показаны ниже.

S-R триггер с использованием NAND Gate

Как и NOR Gate S-R триггер, этот также имеет четыре состояния. Их

S = 1, R = 0 — Q = 0, Q ’= 1

Это состояние также называется состоянием SET.

S = 0, R = 1 — Q = 1, Q ’= 0

Это состояние известно как состояние СБРОС.

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

S = 0, R = 0 — Q = 1, & Q ’= 1 [Недействительно]

Если оба значения S и R переключены на 0, это недопустимое состояние, поскольку значения Q и Q ’равны 1. Предполагается, что они дополняют друг друга. Обычно этого состояния следует избегать.

S = 1, R = 1 — Q&Q ’= Запомнить

Если оба значения S и R переключены на 1, тогда схема запоминает значение S и R в их предыдущем состоянии.

Его также называют триггером Gated S-R.

Проблемы с триггерами S-R, использующими вентиль ИЛИ и И-НЕ, являются недопустимым состоянием. Эту проблему можно преодолеть с помощью бистабильного триггера SR, который может изменять выходы при определенных недопустимых состояниях, независимо от состояния входов Set или Reset. Для этого разработан синхронизированный триггер S-R путем добавления двух вентилей И к базовому триггеру ИЛИ-вентиль. Принципиальная схема и таблица истинности показаны ниже.

Clocked S-R Flip Flop

Тактовый импульс [CP] подается на входы логического элемента AND.Когда значение тактового импульса равно «0», выходы обоих вентилей И остаются «0». Как только подается импульс, значение CP меняется на «1». Это заставляет значения в S и R проходить через триггер NOR Gate. Но когда значения обоих значений S и R изменяются на «1», ВЫСОКОЕ значение CP заставляет их обоих на короткое время переключиться на «0». Как только импульс удален, состояние триггера становится промежуточным. Таким образом, может быть вызвано любое из двух состояний, и это зависит от того, остается ли вход установки или сброса триггера на «1» дольше, чем переход в «0» в конце импульса.Таким образом, недопустимые состояния могут быть устранены.

2. D Флип-флоп

Принципиальная схема и таблица истинности приведены ниже.

D-триггер

D-триггер на самом деле является небольшой модификацией описанного выше синхронизированного SR-триггера. Из рисунка видно, что вход D подключен к входу S, а дополнение входа D подключено к входу R. Вход D передается на триггер, когда значение CP равно «1». Когда CP равен HIGH, триггер переходит в состояние SET.Если он равен «0», триггер переходит в состояние CLEAR.

Чтобы узнать больше о срабатывании триггера, нажмите на ссылку ниже.

ПОСМОТРЕТЬ: Срабатывание откидных створок

СМОТРЕТЬ: ЦЕПЬ MASTER-SLAVE FLIP FLOP

3. Вьетнамки J-K

Принципиальная схема и таблица истинности триггера JK показаны ниже.

J-K Flip Flop

J-K-триггер также можно определить как модификацию триггера S-R.Единственная разница в том, что промежуточное состояние более тонкое и точное, чем у S-R триггера.

Поведение входов J и K такое же, как входов S и R триггера S-R. Буква J обозначает SET, а буква K - CLEAR.

Когда оба входа J и K находятся в состоянии HIGH, триггер переключается в состояние дополнения. Таким образом, для значения Q = 1 он переключается на Q = 0, а для значения Q = 0 он переключается на Q = 1.

Схема включает в себя два логических элемента И с 3 входами.Выход Q триггера возвращается в качестве обратной связи на вход И вместе с другими входами, такими как K и тактовый импульс [CP]. Таким образом, если значение CP равно «1», триггер получает сигнал CLEAR и при условии, что значение Q было ранее 1. Аналогичным образом выход Q 'триггера выдается в качестве обратной связи на вход И вместе с другими входами, такими как J и тактовый импульс [CP]. Таким образом, выход становится SET, когда значение CP равно 1, только если значение Q ’было ранее 1.

Выход может повторяться в переходах после того, как они были дополнены для J = K = 1 из-за соединения обратной связи в триггере JK.Этого можно избежать, установив продолжительность меньше, чем задержка распространения через триггер.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *