Видео в конце…
Базовый элемент памятиБазовым элементом памяти является триггер. Устройство, предназначенное для хранения одного бита информации.
Режимы работы 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 |
---|
Недавно Юрий Панчул, один из сотрудников 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, которую сейчас рекомендует Кати, и которую я несколько переделываю, чтобы приспособить к своим нуждам (про это будет отдельный пост):
А теперь обсудим детально:
В картине мира, представляемой школьным образованием, существует “слепое пятно” в области принципов проектирования цифровой электроники, между физикой и программированием. Курсы роботики и ардуино это слепое пятно не закрывают, так как сводятся к программированию готовых чипов. Упражнения с дискретными элементами и микросхемами малой степени интеграции, хотя и эффективны во введении в основные принципы, базируются на технологиях 1960-1970-х годов и не содержат привязки к современному проектированию. Слепое пятно можно закрыть с помощью введения элементов языков описания аппаратуры (ЯОА) и доступные для школьного экспериментирования микросхемы ПЛИС (программируемые логические интегральные схемы) — матрицы реконфигурируемых логических элементов. Тем самым картина мира становится цельной, и способствует созданию среды для появления большого количества молодых инженеров, имеющих представление о всех сторонах современных микросхем для приложений типа самоуправляемых автомобилей, и способных в будущем специализироваться для проектирования того или иного аспекта таких устройств.
Введение ЯОА и ПЛИС в школьную программу также хорошо привязывается к курсу математики и физики физматшкол — булевская алгебра, арифметические схемы, конечные автоматы.
Заметим, что ЯОА и ПЛИС, несмотря на поверхностное сходство с программированием, используют другие базовые концепции:
Программирование: последовательное исполнение, ветви выбора, циклы, переменные, выражения, массивы (c моделью плоской адресуемой памяти), функции (на основе использования стека), рекурсия.
Проектирование цифровой логики: комбинационный логический элемент; построение из этих элементов облаков комбинационной логики, включающей примитивы выбора с помощью мультиплексоров, а также блоки для реализации арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами; конечный автомат; параллельность операций, иерархия модулей, концепция конвейера (не только для процессора, но и для арифметических блоков).
Секция 1. Соединение с физикой, с лабораторными на дискретных компонентах.
Секция 2. Основы цифровой логики и арифметики, с лабораторными на микросхемах малой степени интеграции.
Секция 3. Проектирование схем на основе синтеза языка описания аппаратуры, с лабораторными на ПЛИС Xilinx или Altera.
Секция 4. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.
Секция 5. Микроархитектура: строим процессор.
Индивидуальный проект: интеграция датчика или другого периферийного устройства с схемой, реализованной в ПЛИС.
Развернутый текст с итогами киевского эксперимента написал преподаватель Киевского Политехнического Института Евгений Короткий. Я дополню его своими личными выводами. Предыстория — посты на Хабре и Geektimes — 1, 2, 3, 4). В тех постах были заданы вопросы. Вот какие получились ответы:
Гипотеза, что школьники могут использовать Verilog, подтвердилась
Verilog также оказался достаточному количеству школьников интересен (до Киева некоторые коллеги в этом сомневались, утверждая, что детям более интересны проекты типа роботической руки с микроконтроллером)
Идея, что перед использованием Verilog полезно показать школьникам логические элементы и D-триггер на микросхемах малой степени интеграции — не то чтобы однозначно подтвердилась, но получила большее обоснование.
Всего после дня опыта с верилогом некоторые школьники начали задавать вразумительные вопросы — например когда применять блокирующее, а когда неблокирующее присваивание.
Довести школьников от нуля до конечных автоматов, реализующих протоколы типа SPI — за одну неделю по-видимому нереально, а вот до конечного автомата кодового замка или светофора — реально.
Также нереально довести за одну неделю по конструирования процессора, но мы попробуем это сделать за две недели в Новосибирске.
Во время киевского эксперимента мы пробовали рассказать и про FPGA, и про встроенные процессоры (MediaTek MT7688, находящийся где-то посередине между Ардуино и Интел Галилео или Расбери Пай по производительности). Потом мы сделали хакатон (в Киевско-Могилянской Академии) и пронаблюдали, сколько школьников выбрали для хакатона проект с FPGA и сколько — проект с встроенным процессором. Выяснилось — 50 на 50. Это интересно — до хакатона у меня не было вообще никакого предположения, какая будет разбивка.
У меня было опасение, что школьников может запутать пользовательский интерфейс в Xilinx Vivado, с кучей опций и элементов интерфейса. Но оказалось, что школьникам все равно — сложный GUI их не пугает.
Большинство школьников используют Windows. У меня вместе с моим коллегой Александром Белицем есть идея заготовить для таких мероприятий пару десятков bootable SSD-драйвов с Линуксом (Ubuntu или CentOS) и носить их от мероприятия к мероприятияю. Алекс даже написал скрипт для клонирования таких драйвов. Ubuntu более дружелюбен, но CentOS более официально поддерживается средствами автоматизации проектирования схем на FPGA, в частности Xilinx Vivado и Altera Quartus. Можно ли делать одновременно ликбез по Линуксу и ликбез по Verilog / FPGA во время летнего лагеря? Непонятно, но это можно попробовать.
Оказывается, Xilinx Vivado нещадно глючит приконфигурации Artix-7 FPGA, если использовать дешевые плохо экранированные микро-USB кабели. По какому-то мистическому наитию я перед поездкой в Киев засунул в чемодан дюжину качественных шнуров, и это спасло семинар.
У меня была идея, что использование 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 в одну и ту же макетную плату с лампочками и кнопками, и ожидать, что все будет продолжать работать.
Я подтвердил свое наблюдение, что для проведения краткосрочных (1 неделя) образовательных мероприятий критично, чтобы на месте находилась бригада студентов местного университета, которая бы осуществляла менторство школьников. В киевском случае такую бригаду обеспечил преподаватель Киевского Политехнического Института Евгений Короткий.
Стало более-менее понятно, в каких случаях и в каком объеме стоит включать в программу подобных мероприятий часть про уровень транзисторов и про производства микросхем. Эту часть преподавал доцент Киевского Национального Университета Александр Барабанов, переводчик материалов по курсу Nanometer ASIC для студентов. По-видимому, этот материал стоит в полном объеме включать в годовой курс для школьников, в небольшом — в двухнедельный курс в формате летнего лагеря, но при продолжительности меньше недели нужно наверное сразу (в течение 1 часа после начала) давать школьникам микросхемы малой степени интеграции (например CMOS 4000) и про транзистор упомянуть вскользь, в виде «транзистор — это устройство, в котором ток течет из пукта A в пункт B, если в C стоит напряжение 1 (или 0). Из транзисторов можно строить логические элементы И, ИЛИ, НЕ (показать на картинку)».
Во время лекций перед большой аудиторией школьникам можно показывать схемы, собранные на макетной плате из микросхем малой степени интеграции. Это наглядно, вызывет интерес, а также не требует подключения конструкции к компьютеру — только с батарейке 9 V. Я показывал три таких схемы, наиболее критичных для понимания — логический элемент XOR, комбинационный 4-битный сумматори D-триггер с частотой порядка 1 Герц (т.е. такт в секунду).
Остается открытым вопрос, можно ли преподавать школьникам идею конвейерной обработки, одну из самых мощных идей в цифровом проектировании и организации вычислений вообще. Для этого необязательно строить конвейерный процессор, можно сделать и конвейерное арифметическое устройство. Наверное это можно упомянуть в самом конце курса, когда дети наиграются с простыми комбинационными и последовательностным схемами и конечными автоматами. Скорее всего это будет интересно очень небольшому подмножеству школьников, но попробовать стоит.
Для мероприятий подлиннее можно использовать индивидуальные проекты и проверочные работы.
Код на GitHub использованный для киевского мероприятия
Источники информации для преподавателей физматшкол, которые по-видимому будут разрабатывать большую часть детальных материалов, после начальных экспериментов со школьниками на Украине, в России и в Silicon Valley:
Учебник Дэвида Харриса и Сары Харрис “Цифровая схемотехника и архитектура компьютера”, 2-е издание, русский перевод. Этот учебник можно скачать бесплатно, см. статьи на Хабре о нем — 1, 2, 3. Недавно также вышло новое бумажное издание с улучшенной цветной полиграфией
Слайды для преподавателей, дополнение к учебнику Харрис & Харрис. Бесплатное скачивание.
Материалы по курсу From NAND to Tetris, который был создан в Израиле и внедрен в некоторые американские университеты. При этом, имхо, от курса стоит использовать идеи и скелет, но реализацию делать на подмножествах “взрослых” средств проектирования, а не искуственных “детских” средствах, как делает это курс. Ключевые части скачиваются бесплатно.
Книга Чарльза Петзольда “Код”, которая адекватно объясняет на пальцах многие концепции и уровень которой соответствует школьному (идея подсказана преподавателем киевской школы ОРТ Сергеем Дзюбой). Опять же, с моей точки зрения, из книги стоит использовать идеи и скелет, но бОльшую часть материала заменить на более корректный (вместо защелок (D-latch) использовать D-триггеры (D-flip-flop)) и современный, например вместо accumulator-based 6800 и архаичного 8080 использовать подмножество RISC-архитектуры.
Наборы для конструирования схем на макетной плате на основе дискретных компонент и микросхем малой степени интеграции от американской компании ETron Circuit Labs, российской компании Киберфизика, украинской компании Радиомаг (я могу объяснить различия между этими наборами в комментариях, если кому интересно).
Материалы компаний-производителей микросхем ПЛИС (Xilinx, Altera) и образовательных плат с микросхемами ПЛИС (Digilent, Terasic).
Примеры кода, контрольные работы и рекомендации по проектам, разработанные Антоном Моисеевым, Юрием Панчулом, Евгением Коротким, Александром Барабановым и другими инженерами компаний и преподавателями университетов для различных мероприятий в Калифорнии, Казахстане, России и Украине.
От физики к дискретным элементам
Что такое ток, напряжение и сопротивление. Как устроена макетная плата. Упражнение: первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов. Переменные резисторы, фоторезисторы.
Что такое транзистор. Обзор переключающих элементов от реле, радиоламп, дискретных транзисторов до транзисторов на микросхемах. Упражнения с тиристором (SCR — silicon controlled rectifier — нагляднее чем транзистор), биполярным p-n-p и n-p-n транзисторами.
Контрольная работа.
От дискретных элементов к комбинационной логике
Булева алгебра и алгебра логики. Операции, выражения, аксиомы и тождества, включая законы де Моргана. Таблицы истинности.
Комбинационные логические элементы И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ-ИЛИ (AND, OR, NOT, NAND, NOR, XOR). Как комбинационные элементы строятся из транзисторов. Упражнение: построить AND, NAND или NOR из дискретных элементов.
Логические элементы в микросхемах малой степени интеграции. Индивидуальное упражнение: каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Что такое такое подтягивающие резисторы и зачем они нужны. Добавляем к предыдущему упражнению кнопки и подтягивающие резисторы.
Контрольная работа.
Двоичная арифметика и ее реализация
Двоичные числа. Преобразование из двоичных в десятичные числа и наоборот. Операции сложения и умножения. Отрицательные числа и дополнительный код.
Реализация полусумматора и полного сумматора с помощью логических элементов. Перенос. Многоразрядный сумматор с последовательным переносом. Упражнение на макетной плате. Упоминание о длинной временной задержке и схемах с более оптимальной задержкой.
Использование 4-битного полного сумматора CMOD 4008. Построение из него 8-битного сумматора и схемы вычитания. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.
Контрольная работа.
Последовательностная логика
Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.
Так как в обвязку 555 входят конденсаторы, могут понадобится дополнительные объяснения, что такое конденсаторы, зачем они нужны в обвязке 555 и как они маркируются. Также может быть полезным и вспомогательное упражнение с зарядкой и разрядкой конденсаторов разной емкости.
Схемы с внутренним состоянием. Построение RS-защелки из логических элементов NAND. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.
Последовательностные блоки — счетчик (CMOS 4029) и сдвиговый регистр (4015). Семисегментный индикатор и его драйвер 4511. Упражнения с этими микросхемами.
Экзамен.
От микросхем малой степени интеграции к ПЛИС — комбинационная логика
Понятие о ПЛИС (программируемой логической интегральной схеме) — матрице реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Упражнение: синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.
Продолжение изучения языка Verilog. Типы данных, выражения, присваивания. Always-блоки и основные операторы. Упражнение: вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.
Продолжение изучения языка Verilog. Иерархия модулей. Упражнение: построение мультиплексоров и сумматоров из подмодулей. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.
Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек. Упражнение: создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования и программы GTKWave для просмотра временных диаграмм.
Презентация группы продвинутых студентов: реализация быстрых сумматоров с ускоренным групповым переносом, моделирование в них временных задержек и сравнение их с сумматорами с последовательным переносом (количество логических элементов и задержки).
Контрольная работа
Проектирование последовательностной логике на языке Verilog с реализацией на ПЛИС
Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog.
Упражнения: реализация D-триггера, счетчика и сдвигового регистра на ПЛИС. Анализ результатов программы статического анализа о максимальной частоте. Демонстрация: использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.
Концепция конечного автомата. Диаграммы изменения состояний. Упражнения: конечные автоматы светофора и кодового замка.
Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце курса) по интеграции датчиков и других периферийных устройств с платой c ПЛИС. Самостоятельная работа: индивидуальный проект, модифицирующий поведение одного из примеров с последовательностной логикой: счетчика, сдвигового регистра или конечного автомата.
Концепция конвейерной обработки. Сравнение конвейерной реализации арифметических блоков, вычисляющих степень и квадратный корень.
Контрольная работа.
Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.
Концепция фон-Нейманновской машины. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Упражнение с симулятором процессора на уровне инструкций — MARS MIPS. Простые программы на ассемблере для вычисления выражений.
Условные и безусловные переходы, метки, циклы. Пример: вычисление чисел Фибоначчи. Индивидуальное упражнение на основе модификации примера.
Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Упражнение: программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.
Контрольная работа.
Микроархитектура: строим процессор
Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.
Продолжение 9.1
Представление студенческих проектов по интеграции с датчиками
Экзамен
Знакомство с макетной платой, сопротивлениями и логическими элементами.
Первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов.
Комбинационные логические элементы. Каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Входы подключаются к питанию и земле переходниками, и входы и выходы подключаются к светодиодам.
Вариант упражнения 2 с кнопками и подтягивающими резисторами, с объяснением их функции.
Знакомство с двоичной арифметикой
Использование 4-битного сумматора на микросхеме CMOD 4008.
Построение 8-битного сумматора из двух 4-битных.
Построение схемы вычитания используя тождество -a == ~ a + 1
Знакомство с последовательностной логикой
Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.
Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.
Использование сдвигового регистра для генерации “бегущих огоньков” на основе микросхемы CMOS 4015.
Строим счетчик (CMOS 4029) и подсоединяем к нему семисегментный индикатор через драйвер 4511.
Знакомство с ПЛИС (программируемой логической интегральной схеме) — матрицей реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Типы данных языка Verilog, выражения, присваивания. Always-блоки и основные операторы.
Синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.
Вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.
Продолжение изучения языка Verilog. Иерархия модулей. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек.
Упражнение: построение мультиплексоров из подмодулей.
Создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования, а также программы GTKWave для просмотра временных диаграмм.
Проектирование последовательностной логике на языке Verilog. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog. Анализ результатов программы статического анализа о максимальной частоте.
Реализация счетчика на ПЛИС.
Реализация сдвигового регистра на ПЛИС.
Использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.
Модификация упражнения 2 или упражнения 3 на основе индивидуального задания.
Концепция конечного автомата. Диаграммы изменения состояний. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце школы) по интеграции датчиков и других периферийных устройств с платой c ПЛИС.
Конечный автомат “улыбающаяся улитка”.
Конечный автомат кодового замка на основе индивидуального задания.
Конечный автомат для работы с датчиком освещения.
Архитектура процессора: вид вычислительной установки со стороны программиста. Концепция фон-Нейманновской машины. Использование симулятора процессора на уровне инструкций MARS MIPS.
Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Простые программы для вычисления выражений.
Условные и безусловные переходы, метки, циклы. Программа вычисляющая числа Фибоначчи.
Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.
Микроархитектура: строим процессор.
Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.
Больше о процессорах.
Работа над индивидуальным проектом
Сдача индивидуального проекта
Из поста на 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.
Из поста на Хабре Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:
В самом простом варианте FPGA состоит из матрицы однородных ячеек, в функцию каждой из которых можно поменять с помощью мультиплексоров, подсоединенных к битам конфигурационной памяти. Одна ячейка может стать гейтом AND с четырьмя вводами и одним выводом, другая — однобитным регистром и т.д. Загружаем в конфигурационную память последовательность битов из памяти — и в FPGA образуется заданная электронная схема, которая может быть процессором, контроллером дисплея и т.д.
ПЛИС-ы / FPGA — не процессоры, «программируя» ПЛИС (заполняя конфигурационную память ПЛИС-а) вы создаете электронную схему (хардвер), в то время как при программировании процессора (фиксированного хардвера) вы подсовываете ему цепочку написанных в память последовательных инструкций программы (софтвер).
Внизу — схема простейшего блока FPGA, в который входит look-up table (LUT) и flip-flop. Правда в этой схеме не показаны мультиплексоры, которые меняют функцию ячейки, и соединения с конфигурационной памятью.
Диаграммы, иллюстрирующие структуру FPGA:
И еще одна:
Системы на кристалле (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-х годов элементов программирования.
Помимо конференции в Томске и планируемого следующего эксперимента в июле а Новосибирске, который поддерживается Новосибирской Летней Школой Юных Программистов, есть еще ранний план организовывать такой эксперимент в Казахстане (этом в частности заинтересована Венера Жаналина посещавшая киевский семинар).
Подробное объяснение работы счетчика — в тексте «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».
Если вы преподаватель и хотите принять участие в разработке таких материалов (это все на общественных началах, без связи с той или иной компанией), сообщите мне в комментариях. Также интересна любая критика.
Курс окончен. Точнее, сам курс был готов еще в конце весны 2012го года, но отчеты осилил дописать только сейчас. С тех пор его прослушало 3 группы прикладных математиков и 1 одна группа автоматики и электромеханики в Нижегородском государственном техническом университете (НГТУ) им. Р.Е. Алексеева.
По результату оказалось, что текста получилось как-то много, но сами лабораторные работы действительно простые и их действительно можно легко пройти за 6-8 трехчасовых занятий вместе со всеми практическими частями. Также текст отчетов снабжен картинками и видеороликами так, чтобы для наблюдения и понимания результатов было не обязательно повторять все действия самостоятельно дома.
Оглавление
0. Введение
http://1i7.livejournal.com/
Как пересечь пропасть от физики к программированию (0)
http://1i7.livejournal.com/
Введение (в весь курс вообще и в 1ю лабораторную работу в частности)
1. Подготовка к лабораторным работам с макетными платами и проводами
1.1. Подбор реквизита
http://1i7.livejournal.com/
2. Лабораторная работа 1: сборка простых электронных схем на основе микросхем малой степени интеграции
http://1i7.livejournal.com/
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/
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/
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/
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/
4.7. Самостоятельная работа — драйвер для семисегментного диодного дисплея
5. Лабораторная работа 3: делаем память (защелки и триггеры)
http://1i7.livejournal.com/
5.1. RS защелка (RS latch) на макетной плате
5.2. RS защелка (RS latch) на ПЛИС+Verilog
http://1i7.livejournal.com/
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/
6.1. Разделение частоты тактового сигнала
http://1i7.livejournal.com/
6.2. Знакомство с конечными автоматами — светофор
6.3. Самостоятельная работа — сделать робота, управляемого простым конечным автоматом
7. Лабораторная работа 5: делаем процессор MIPS
http://1i7.livejournal.com/
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/
7.3. Основные модули дизайна HDL
7.3.1. Счетчик программы
7.3.2. Файл регистров
7.3.3. Память данных
7.3.4. Память инструкций
http://1i7.livejournal.com/
7.4. Шина данных и контроллер
7.4.1. Параметры
7.4.2. Счетчик инструкций и память инструкций
7.4.3. Файл регистров
7.4.4. Разбор команд (контроллер)
7.4.5. Выполнение команд (шина данных)
http://1i7. livejournal.com/
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/
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/
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. Программирование на голом железе и зачатие операционной системы
Так вот, логику мы опустим. Мы будем рассматривать ключевой момент — хранение состояния, в народе триггеры. Построение триггера сильно зависит от технологии. Что такое триггер? Это элемент с двумя устойчивыми состоянии. В простейшем случае это кольцо из двух инверторов:
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 позже.
Надеюсь, теперь многое станет понятней.
Предложения или отзывы?
В этом руководстве мы обсудим одну из основных схем в цифровой электронике, известную как 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.
Это простой триггер с двумя стабильными состояниями, и он остается в определенном состоянии, то есть в памяти, до тех пор, пока не произойдет внешнее событие (например, изменение ввода в данном случае).
Вышеупомянутый триггер на основе инвертора предназначен только для понимания работы, но не имеет практического применения, так как не предусматривает применения каких-либо входных сигналов. Именно здесь на сцену выходят ворота 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 показана в следующей таблице.
R | S | Q | Состояние | |||||
0 | 0 | Последнее состояние | Без изменений | Набор | ||||
1 | 0 | 0 | Сброс | |||||
1 | 1 | Не применяется (?) | Запрещено |
. показано ниже:
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: на основе NAND и на основе NOR. Схема синхронизированного SR-триггера с использованием логических элементов NAND показана ниже.
Эта схема образована добавлением двух логических элементов NAND к SR-триггеру на основе NAND. Входы имеют высокий уровень активности, поскольку дополнительный элемент И-НЕ инвертирует входы. Тактовый импульс подается на вход обоих дополнительных вентилей И-НЕ.
Следовательно, переход тактового импульса является ключевым фактором в функционировании этого устройства.Предполагая, что это устройство, запускаемое по положительному фронту, таблица истинности для этого триггера показана ниже.
Часы | R | S | Q | Состояние | ||||
↓ или 0 или 1 | X | X | X Последнее состояние Изменить (удерживать) | |||||
↑ | 0 | 0 | Последнее состояние | Без изменений (удерживать) | ||||
↑ | 0 | 1 | 1 | ↑ | Установить | 10 | 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.
Исходя из текущего состояния выхода, если кнопки установки или сброса нажаты, выход изменится таким образом, что он будет считать более одного входного сигнала, то есть схема может получать некоторые нежелательные импульсные сигналы и, следовательно, из-за механического дребезга действия машин, выходы 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): Срабатывание по отрицательному фронту (с
пузырь на входе Clock): |
Входы S-R, J-K и D называются синхронными входами, потому что данные на этих входах передается на выход триггера только по фронту запуска часов Импульс. С другой стороны, прямой набор (SET) и входы clear (CLR) называются асинхронными входами, поскольку они влияют на состояние триггера не зависит от часов.Для синхронного для правильной работы эти асинхронные входные данные должны быть сохранены НИЗКИЙ.
Основные операции показаны ниже вместе с таблица истинности для этого типа триггеров. Таблица операций и истинности для триггеры, срабатывающие по отрицательному фронту, такие же, как и для положительных, за исключением что задний фронт тактового импульса является запускающим край.
Как S = 1, R = 0. Триггерные УСТАНОВКИ на восходящих часах край. |
Обратите внимание, что входы S и R можно изменить в любое время, когда вход часов — НИЗКИЙ или ВЫСОКИЙ (за исключением очень короткого интервала вокруг запускающий переход часов), не влияя на выход. Это проиллюстрировано на временной диаграмме ниже:
Триггер J-K работает очень похоже на триггер S-R.Единственная разница в том, что у этого триггера НЕТ недопустимого состояния. Выходы переключаются (изменить на противоположный состояние), когда оба входа J и K находятся в состоянии ВЫСОКИЙ. Показана таблица истинности ниже.
D-триггер работает намного проще. Это имеет только одно дополнение к часам. Это очень полезно, когда один бит данных (0 или 1) должен быть сохранен. Если на D высокий при подаче тактового импульса триггер устанавливает и сохраняет значение 1.Если при подаче тактового импульса на входе D присутствует LOW, триггер сбрасывает и сохраняет 0. Таблица истинности ниже суммирует операции положительного запускаемого фронтом D-триггера. Как и прежде, триггер, запускаемый отрицательным фронтом, работает так же, за исключением того, что спадающий фронт синхроимпульса — это пусковой фронт.
1.A.A.1 Предупреждение | | По умолчанию HDL Coder генерирует код с
тот же модуль и имя файла. Если вы используете архитектуру | Если вы используете архитектуру |
| Имя исходного файла должно использовать определенные рекомендуемые наименования. соглашения и расширения файлов. | Используйте параметр расширения файла VHDL в
советник по рабочим процессам HDL или свойство | |
1.A.A.2 Сообщение | Verilog / VHDL: Идентификаторы
и имена должны соответствовать рекомендуемому соглашению об именовании. | Имя в дизайне не начинается с буквы или содержит символ, отличный от цифры, буквы или подчеркивания. | Обновите имена в своем дизайне, чтобы они начинались с
буква алфавита ( |
1.A.A.3 Сообщение | Verilog / VHDL: Ключевые слова
в Verilog-HDL (IEEE1364), SystemVerilog (v3.1a) и ключевые слова в VHDL (IEEE1076.X)
нельзя использовать. | Есть ключевые слова Verilog ® , SystemVerilog или VHDL ® . внутри имен в вашем дизайне. | Обновите имена в своем дизайне, чтобы они не содержали Verilog, SystemVerilog или ключевые слова VHDL. Можно отключить
проверка этого правила с помощью свойства |
1.A.A.3vb Сообщение | VHDL: Не использовать
стандартные имена VHDL. | HDL Coder не использует стандартные имена VHDL. | Никаких действий не требуется. |
1.A.A.4 Ошибка | | Имя или имена в дизайне не используют стандарт соглашение об именовании. | Обновите имена в своем дизайне, чтобы они начинались с
буква алфавита ( |
1.A.A.5 Ошибка | | Два или более имен в вашем дизайне в одном объеме, идентичны за исключением корпуса. Например, имена | Обновите имена в своем дизайне, чтобы два имени в одной и той же области различаются только в случае. Вы можете отключить эту проверку правила с помощью свойства |
1.A.A.6 Предупреждение | | HDL Coder генерирует код, который соответствует с этим правилом для Verilog и VHDL. | Нет действий обязательный. |
| |||
1.A.A.9 Предупреждение | Verilog / VHDL: Верхний уровень
имена модулей / объектов и портов должны быть меньше или равны 16 символам.
по длине и не смешивать-падеж. | Имя модуля, объекта или порта верхнего уровня в сгенерированном код длиннее 16 символов или использует буквы в смешанном регистре. | Обновите указанное имя в своем дизайне, чтобы оно длиной менее или равной 16 символов, и все буквы строчные. все буквы должно быть либо все в верхнем регистре, либо все строчные. Это правило можно настроить с помощью свойства |
Имя параметра | Этикетка | Тип данных | Диапазон | шт. | Параметр Описание | |||||||
CLK_TO_OUT_DELAY | Часы для вывода Задержка | Число | 1f на 1024 | с | Задержка срабатывания событие clock до тех пор, пока выходы триггера не изменятся | |||||||
GNDREF | Земля Ref | Строка | нет | Определяет, есть ли устройство имеет контакт заземления.Любой цифровой компонент, имеющий входной или выходной контакт, подключенный к узлу аналоговой схемы, должен иметь свой Земля Ссылка , подключенная к аналоговому узлу. Обычно это земля на схеме. | ||||||||
ВРЕМЯ ЗАДЕРЖКИ | Время удержания | Число | 1f на 1024 | с | Минимальное время после событие синхронизации, при котором входные сигналы должны оставаться стабильными, чтобы что допустимое изменение в каждом состоянии ввода распознается. | |||||||
HYSTWD, TH | Гистерезис, Порог | Число | мин: 1f | В | Гистерезис и порог
входы. Ширина гистерезисного окна, HYSTWD центрируется
около Порог ( TH ) напряжения.Для определения актуальных
порог ( TL , THI ), заменить Порог ( TH ) и Гистерезис ( HYSTWD ) в каждом из
следующие формулы:
| |||||||
IC | Начальное состояние | Число | нет | Исходное состояние Выход триггера в момент времени = 0 | ||||||||
MIN_CLK | Минимальная ширина Clk | Число | 1f на 1024 | с | Минимальная допустимая ширина часов.Ширина часов меньше этого параметра не вызовет срабатывания Резкий поворот. | |||||||
RIN | Входное сопротивление | Число | мин: 100 | Ом | Входное сопротивление каждого Входной контакт триггера | |||||||
МАРШРУТ | Выходное сопротивление | Число | мин: 1 мин. | Ом | Выходное сопротивление Q и QN штифты | |||||||
ВРЕМЯ НАСТРОЙКИ | Время настройки | Число | 1f на 1024 | с | Минимальное время до событие синхронизации, при котором входные сигналы должны оставаться устойчиво, так что распознается действительное изменение в каждом состоянии ввода. | |||||||
TRIG_COND | Условие срабатывания | Строка | нет | Определяет срабатывание
Состояние тактового вывода триггера:
| ||||||||
VOH | Высокое напряжение на выходе | Число | любой | В | Выходное высокое напряжение для Q и QN штифты | |||||||
ТОМ | Низкое напряжение на выходе | Число | любой | В | Выходное низкое напряжение для Q и QN штифты |
В этой статье мы узнаем о различных типах шлепанцев, используемых в цифровой электронике.
В этой статье рассматриваются основные схемы триггеров, такие как S-R триггеры, JK триггеры, D триггеры и T триггеры, а также таблицы истинности и соответствующие им символы схем.
Прежде чем перейти к теме, важно ознакомиться с ее основами. Щелкните по ссылкам ниже для получения дополнительной информации.
ПОСМОТРЕТЬ: BOOLEAN LOGIC
ПОСМОТРЕТЬ: ЛОГИЧЕСКИЕ ВОРОТА
СМОТРЕТЬ: ПОЛОВИННЫЙ И ПОЛНЫЙ ДОБАВИТЕЛЬ
Шлепки на самом деле являются применением логических вентилей.С помощью булевой логики вы можете создать с ними память. Триггеры также можно рассматривать как основную идею оперативной памяти [RAM]. Когда им дается определенное входное значение, они будут запоминаться и выполняться, если логические элементы спроектированы правильно. Более широкое применение шлепанцев помогает при разработке более совершенных электронных схем.
Наиболее часто используемые триггеры — это реализация схемы обратной связи. Поскольку память опирается на концепцию обратной связи, для ее создания можно использовать шлепанцы.
В электронных схемах используются в основном четыре типа триггеров. Их
Триггер SET-RESET разработан с помощью двух вентилей NOR, а также двух вентилей NAND. Эти шлепанцы также называются S-R Latch.
Конструкция такого триггера включает два входа, называемых 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 с использованием 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
Принципиальная схема и таблица истинности триггера JK показаны ниже.
J-K Flip FlopJ-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.Этого можно избежать, установив продолжительность меньше, чем задержка распространения через триггер.