Справочник от Автор24
Поделись лекцией за скидку на Автор24

Моделирование цифровых схем на VHDL

  • ⌛ 2016 год
  • 👀 508 просмотров
  • 📌 459 загрузок
  • 🏢️ МЭИ
Выбери формат для чтения
Статья: Моделирование цифровых схем на VHDL
Найди решение своей задачи среди 1 000 000 ответов
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Моделирование цифровых схем на VHDL» pdf
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Национальный исследовательский университет «МЭИ» КУРС ЛЕКЦИЙ дисциплины дистанционного образования «Моделирование цифровых схем на VHDL» Направление подготовки 230100 Информатика и вычислительная техника Профиль Вычислительные машины, комплексы, системы и сети Авторский коллектив: Профессор кафедры ВМСиС _________________ В.Н.Балашов Доцент кафедры ВМСиС ____________________ А.К.Поляков «_15_»_ноября_2016 г. Москва 2016 НИУ «МЭИ» 1 Оглавление стр Лекция 1 Моделирование цифровых устройств на VHDL .......................... 4 Интерфейс объекта ............................................................................................... 5 Тело объекта VHDL .............................................................................................. 6 Структурное описание архитектуры ................................................................ 7 Поведенческое описание архитектуры ............................................................. 8 Лекция 2. Типы данных в языке VHDL ......................................................... 14 Константы и переменные .................................................................................. 14 Скалярные типы ................................................................................................. 14 Физические типы ................................................................................................ 15 Предопределенные атрибуты скалярных типов .......................................... 16 Тип с плавающей точкой ................................................................................... 16 Перечислимые типы ........................................................................................... 17 Массивы ................................................................................................................ 17 Строки, битовые строки и агрегаты ............................................................... 19 Лекция 3. Типы сигналов в языке VHDL ..................................................... 21 Сигналы ................................................................................................................ 21 Видимость сигналов в VHDL............................................................................ 24 Лекция 4. Операторы языка VHDL ............................................................... 26 Последовательные операторы .......................................................................... 26 Параллельные операторы ................................................................................. 27 Отображение информации о запрещенных ситуациях ............................... 27 Лекция 5. Сигналы стандарта VHDL std_ulogic и std_logic ....................... 29 Инерционная и транспортная задержки сигналов ...................................... 31 Механизм продвижения модельного времени при моделировании на VHDL ..................................................................................................................... 31 Отображение информации о запрещенных ситуациях ............................... 32 Стандартные атрибуты сигналов .................................................................... 33 Лекция 6. Пакеты в VHDL ................................................................................ 35 Объявление пакета ............................................................................................. 35 2 Тело пакета ........................................................................................................... 35 Арифметические операции пакета Numeric_STD ........................................ 40 Примеры описания цифровых схем ................................................................ 42 Мультиплексор 8 – 1 ........................................................................................... 42 Дешифратор 3 х 8 ................................................................................................ 43 Сумматор чисел с фиксированной точкой .................................................... 44 Сумматор чисел с фиксированной точкой .................................................... 45 Умножитель чисел с фиксированной запятой .............................................. 47 Счетчик до 16 на триггерах (пример структурного описания проекта).. 48 3 Лекция 1 Моделирование цифровых устройств на VHDL Традиционный метод проектирования цифровых устройств состоит в графическом изображении схем проекта и составлении необходимых спецификаций. Этот метод делает возможным наглядное представление проекта и позволяет установить связи между различными блоками устройства. При создании сложных цифровых устройств обычно применяются методы логического проектирования, состоящие в составлении и минимизации логических уравнений и последующей реализации полученных логических функций на схемотехническом уровне. Главный недостаток традиционных методов проектирования – ручное составление логических уравнений и функций. Для облегчения этого этапа проектирования создан ряд языков описания оборудования (HDL). Наиболее популярные из них – VHDL и Verilog. Язык VHDL является универсальным языком разработок, наиболее приспособленным для проектирования цифровых систем. Описание цифровой системы на VHDL базируется на понятии Интерфейса объекта и понятии Тела (Архитектуры) объекта. Интерфейс объекта определяет его взаимодействие с окружающей средой, Тело (архитектура) объекта – его внутреннюю структуру или поведение. Неотъемлемой частью описания цифровой системы на VHDL является использование Пакетов, содержащих общие типы данных, переменных, функций и процедур для различных объектов данного проекта. Применение пакетов позволяет упростить и стандартизировать выполнение проекта. Интерфейс описывается в объявлении объекта проекта (entity declaration), архитектура – в блоке VHDL описания объекта с заголовком architecture. Связь объекта с окружающей средой и своими внутренними элементами осуществляется при помощи Сигналов (signal). Сигнал – физическое яв4 ление, связанное с изменением величины, формы и т.д. физического носителя сигнала, например, напряжения в электрической цепи. Сигналы могут быть классифицированы как сигналы, несущие информацию или от окружающей среды объекта или определяющие взаимодействие элементов самого объекта (внешние и внутренние сигналы). Сигналы описываются в объявлении объекта проекта с заголовком signal. Интерфейс объекта Приведем описание интерфейса объекта на примере. Пусть необходимо описать взаимодействие цифровой микросхемы с внешней средой. Микросхема имеет входы X1, X2, X3 и выходы Y1, Y2. Входы и выходы объекта в VHDL называются Портами (port). Порты могут быть входными (in), выходными (out), двунаправленными (inout), двунаправленными с буфером (buffer) и связанными (linkage). Порты объекта характеризуются типом поступающих на них сигналов: целый (integer), вещественный (real), битовый (bit), символьный (character) и т.д. DD1 port X1 (in) port X2 (in) port X3 (in) X1 Y1 port Y1 (out) Y2 port Y2 (out) X2 X3 Рис. 1. Интерфейс объекта VHDL Описание интерфейса этого объекта имеет следующий вид 5 entity DD1 is port (X1, X2, X3: in real; Y1, Y2: out real); end DD1; Тело объекта VHDL Описание структуры и поведения объекта содержится в блоке описания архитектуры (architecture). Язык VHDL реализует два подхода к описанию архитектуры, соответствующих различным стадиям разработки проекта. Так на начальной стадии разработки создается описание функциональной схемы, содержащей функциональные блоки устройства и связи между ними. На каждый функциональный блок разрабатываются технические требования, включающие алгоритм работы этого блока. На этой стадии внутренняя структура функционального блока еще не разработана, больше того, не ясно, все ли технические требования к функциональному блоку можно реализовать. Для моделирования на VHDL на начальной стадии разработки преимущественно применяют поведенческое описание объекта. В процессе разработки постепенно уточняется понимание структуры и алгоритма работы функциональных блоков, что позволяет постепенно довести детализацию структуры до уровня регистров и логических элементов (до уровня принципиальной электрической схемы блока). Для моделирования на VHDL на этих этапах разработки используют более детальное структурное описание архитектуры объекта. Таким образом, для одного и того же объекта, заданного одним и тем же интерфейсом, возможен ряд различных описаний архитектуры. 6 Структурное описание архитектуры Пусть структура объекта состоит из трех компонент К1, К2 и К3. Компоненты К1 и К2 относятся к типу SM, компонента К3 – к типу М. Объект DD1 X1 X1 К1 A C S К3 E тип М D Y1 Y1 B X2 К2 X2 тип SM X3 X3 A Y2 Y2 C B тип SM Рис. 2. Структура объекта VHDL, состоящего из трех компонент К1, К2 и К3 Объект (entity) DD1 содержит компоненты (component) К1, К2 и К3, связанные между собой линиями связи. Каждая из компонент в свою очередь может содержать другие входящие в нее компоненты. Линии связи подключены к входным (in) и выходным (out) портам компонент. Компоненты взаимодействуют между собой при помощи сигналов, передаваемым по линиям связи. Имена сигналов отождествляется с именами портов. Выходной порт компонента К1 (С) соединен с входными портами компонент К2 и К3 (В и Е) при помощи внутренней линии связи. Сигнал, передаваемый по этой линии, обозначен S. Соответствие между именами портов и связанными с ними сигналами определяется в карте портов (port map). Можно считать, что карта портов является описанием разъема, по которому проходят сигналы на вставленный в него компонент. Приведем описание связей компонент объекта DD1 (рис. 2). 7 K1: SM port map (X1, X2, S); K3: M port map (S, Y1); K2: SM port map (S, X3, Y2); В приведенном описании X1, X2, X3, S, Y1 и Y2 являются именами сигналов, связанных с портами. Полное описание архитектуры ST объекта DD1 на VHDL имеет следующий вид (это одна из возможных архитектур объекта DD1). architecture ST of DD1 is component SM port (A, B: in real; C: out real); end component; component M port (E: in real; D: out real); end component; signal S: real; begin K1: SM port map (X1, X2, S); K3: M port map (S, Y1); K2: SM port map (S, X3, Y2); end ST; В первых четырех строках описаны интерфейсы компонент SM и M. В пятой строке определен внутренний сигнал S. В последних строках определены карты портов компонент или их связи. Отметим, что в этом описании архитектуры определены только связи компонент внутри объекта DD1. Функции, реализуемые этими компонентами, не указаны. Поведенческое описание архитектуры Поведение объекта во времени может быть сведено к взаимодействию последовательных и параллельных процессов. В самом деле, любая система 8 является набором одновременно работающих подсистем. Каждая подсистема может выполнять набор последовательных и параллельных операций. Каждая подсистема может быть связана с другими подсистемами внутри объекта. Язык VHDL является иерархическим и поэтому позволяет описывать реальную работу объекта как набора одновременно работающих связанных между собой подсистем. Каждая подсистема может быть описана как отдельный процесс. Уровень детализации зависит от конкретно решаемой задачи. Например, в форме одного процесса может быть описана работа сложного блока объекта, а может – и очень простого, например, логического элемента. Поэтому поведенческое описание объекта следует рассматривать как набор последовательных одновременных процессов. Все операторы внутри процесса выполняются последовательно, а процессы – одновременно. Каждый процесс может находиться в двух состояниях: активном – когда он выполняется, и пассивном – когда выполнение процесса приостановлено до момента поступления разрешающего сигнала. Приведем поведенческое описание архитектуры объекта DD1, состоящего из трех процессов Р1, Р2 и Р3. Объект DD1 Процесс X1 X1 Р1 X2 X3 Процесс X2 X3 S Р3 Y1 Y1 Y2 Y2 Процесс Р2 Рис. 3. Поведенческое описание архитектура объекта Сравнивая этот рисунок с предыдущим, заметим, что каждому компоненту на рис. 2 соответствует процесс на рис. 3. Пусть процессы Р1 и Р2 суммируют входные сигналы и передают результаты на выход. Пусть про9 цесс Р3 просто передает входной сигнал на выход. В общем случае число структурных компонент и процессов может не совпадать. Поведенческое описание объекта на VHDL имеет следующий вид: architecture behavior of DD1 is - - начало архитектуры behavior signal S: real; - - определение сигнала S begin P1: process - - начало процесса Р1 variable E1: real; - - определение внутренней переменной Е1 begin E1:=X1+X2; wait for 10 ns; - - задержка 10 нс S<=E1; - - назначение нового значения сигналу S wait on X1, X2; - - ждать изменения сигналов в X1 или X2 end process P1; - - конец процесса Р1 P2: process; - - начало процесса Р2 variable E2: real; - - определение внутренней переменной Е2 begin E2:=S+X3; wait for 10 ns; - - задержка 10 нс Y2<=E2; - - назначение нового значения сигналу Y2 wait on S, X3; - - ждать изменения сигналов в S или X3 end process P2; - - конец процесса Р2 P3: process; - - начало процесса Р3 begin Y1<=S; - - назначение нового значения сигналу Y1 wait on S; -- ждать изменения сигнала в S end process P3; -- конец процесса Р3 end behavior; -- конец архитектуры с именем behavior 10 Процесс Р1 складывает значения входных сигналов, поступающих на входы Х1 и Х2, и присваивает (оператор присваивания :=) сумму внутренней переменной Е1. Затем происходит задержка процесса на 10 нс, после чего назначается новое значение сигнала S (оператор назначения <=). Отметим разницу между операторами присваивания и назначения сигнала. Присваивание происходит мгновенно, назначение – с явной или неявной задержкой. Если задержка сигнала не указана явно, в операторе присваивания производится "малая" задержка сигнала (δ – задержка), равная одному шагу модельного времени. Применение "малых" задержек позволяет при моделировании формально анализировать причинно – следственные отношения в модели. Следующий оператор wait on переводит процесс в режим ожидания (в пассивное состояние). При очередном изменении значений входных сигналов Х1 и Х2 процесс Р1 вновь переходит в активное состояние, выполняет предусмотренную в нем последовательность действий и вновь переходит в пассивное состояние. Аналогично работает процесс Р2, складывая значения сигналов S и Х3 и назначая новое значение сигнала Y2 без явной задержки. Процесс Р3 назначает новое значение сигнала Y1 без явной задержки. 11 Рассмотрим временную диаграмму работы объекта DD1. X1 X2 X3 E1 10нс + δt S δt E2 2 δt Y1 δt Y2 110 120 130 δt 140 150 60 170 180 нс Рис. 4. Временная диаграмма работы объекта DD1 В начальный момент времени 100 нс все входные сигналы Х1, Х2 и Х3 равны нулю. В момент 120 нс на входы Х1 и Х3 поступают сигналы "единица". В результате процесс Р1 и Р2 переходят в активное состояние. Процесс Р1 через 10 нс + δt назначает сигналу S новое значение "единица". Процесс Р2 через 10 нс + δt назначает сигналу Y2 новое значение "единица". Изменение сигнала S создает условие для запуска процесса Р3 и вторичного запуска процесса Р2. Процесс Р3 с задержкой δt назначает сигналу Y1 значение "единица", а процесс Р2 присваивает новое значение внутренней переменной Е2 ("двойка") и с задержкой 10 нс + δt назначает новое значение для сигнала Y2 ("двойка"). Задержка δt считается бесконечно малой и предназначена только для правильного определения причинно – следственных отношений в объекте. Рассмотрим более подробно особенности продвижения модельного времени. Модельное время в VHDL продвигается по событиям и включает фазы инициализации и выполнения процесса. В момент запуска программы все процессы переходят в активную фазу и выполняются, пока не достигнут 12 своих операторов ожидания (wait). Так, в рассмотренном примере процессы Р1 и Р2 после инициализации перейдут в пассивное состояние через 10 нс, а процесс Р3 станет пассивным в момент времени 0 нс. Следующий запуск этих процессов произойдет в момент изменения сигналов X1, X2 и X3, являющихся внешними для объекта моделирования DD1. В фазе выполнения операторы активных процессов выполняются один за другим, пока не достигают своих операторов ожидания wait. В VHDL реализован двух стадийный механизм продвижения модельного времени. На первой стадии в ранее запланированный момент времени изменяются запланированные значения сигналов, и вычисляется время новых событий. В результате на второй стадии активизируются соответствующие процессы и выполняются до тех пор, пока не достигнут своих операторов wait. При выполнении этих процессов планируются времена будущих событий. В рассмотренном выше примере (рис. 4) в заранее запланированный момент времени Т = 120 нс изменяются сигналы Х1 и Х3. В результате запускаются процессы Р1 и Р2, планируют будущие события на момент времени Т = 130 нс и переходят в пассивное состояние. После продвижения модельного времени до Т = 130 нс эти процессы активизируются вновь и планируют будущие события на момент времени Т = 130 нс + δt. В процессе моделирования может сложиться коллизия, когда в один и тот же момент времени два или больше процессов по разному изменят один и тот же сигнал. Для разрешения такой коллизии в VHDL применяется функция resolved (разрешение), в которой указываются правила, позволяющие выработать один выходной сигнал. 13 Лекция 2. Типы данных в языке VHDL Константы и переменные Алгоритмический язык VHDL близок по семантике и синтаксису ко многим современным языкам программирования, в частности к языку Паскаль. Язык является строго типизированным, при этом кроме встроенных типов данных, пользователь имеет возможность вводить и использовать собственные типы данных. Типы данных образуют объекты (data object) четырех классов:  Константы;  Переменные;  Сигналы;  Файлы. Значение константы устанавливается до начала моделирования и не может быть изменено в процессе моделирования. Значение переменной можно изменить в процессе моделирования оператором присваивания (:=). Сигнал имеет текущее значение, прошлую историю сигнала и множество будущих значений. Новое значение сигнала определяется оператором назначения (<=). Каждый объект в описании связывается с одним и только одним типом данных. Тип состоит из множества возможных значений и множества операций. Имеются операции двух видов. Некоторые операции являются предопределенными, это, например, операторы (+) и (–). Имеется возможность определить собственные операции, удобные для решения конкретной задачи. Скалярные типы Скалярные типы данных (scalar) являются базовыми, из которых формируются все остальные типы VHDL. Базовые типы встроены в язык (пакет 14 STANDARD) и включают, в частности, целый (integer), вещественный (real), битовый (bit), перечислимый тип (enumeration). Приведем пример определения целого типа: type TV1 is range 0 to 31; -- целый диапазонный тип TV1 type Word is range 15 downto 0; -- целый диапазонный тип Word Заметим, что диапазоны задаются либо убывающей, либо возрастающей последовательностью чисел. На базе этих целых типов можно определить переменные: variable VAR1: TV1; -- переменная VAR1 типа TV1 variable VAR2: Word; -- переменная VAR2 типа Word Этим переменным можно присвоить начальные значения. VAR1 := 10; VAR2 := 7; Физические типы Физические типы данных используются для выражения величин в физических единицах измерения. В VHDL используется один физический тип – предопределенный физический тип TIME (время) с базовой единицей fs (фемтосекунда). Производными единицами являются ps, ns, us и так далее. type TIME is range –(2**31–1) to 2**31–1 units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; s = 1000 ms; min = 60 s; hr = 60 min; end units; Диапазон типа TIME определяет диапазон единиц времени, который может быть точно представлен объектами физического типа. Эти объекты 15 будут автоматически преобразовываться к фемтосекундам, то обеспечивает максимально высокую точность вычислений Если значение физического типа делится на другое значение того же самого типа, то получается безразмерная величина, которую можно отнести к единицам целого или вещественного типов. Допускается умножение физического типа на число с плавающей точкой, в этом случае получается результат физического типа. Предопределенные атрибуты скалярных типов На некоторые значения величин скалярного типа можно сослаться, используя атрибуты скалярного типа (attribute notation). Например, если А является именем скалярного типа вида type TV1 is range 0 to 31, то А'high является наибольшим возможным значением типа (31), а А'low – наименьшим возможным значением (0). Если В является именем скалярного типа вида type Word is range 15 downto 0, то T'right – самое правое значение типа (0), а T'left – самое левое значение типа (15). В языке VHDL определены и другие предопределенные атрибуты скалярных типов. Тип с плавающей точкой Тип real является предопределенным типом чисел с плавающей точкой. Пользовательские типы с плавающей точкой могут быть объявлены явно путем задания диапазона значений переменной. type ZONE1 is range 0.0 to 10.0; 16 Диапазон задается либо убывающей, либо возрастающей последовательностью значений. Зададим числа, относящиеся к этому типу constant A2: ZONE1:= 7.5; variable X3: ZONE1; Перечислимые типы Перечислимый тип содержит все возможные значения, которые могут принимать переменные или константы, а так же возможные операции над его элементами. При объявлении перечислительного типа необходимо перечислить все идентификаторы и графические символы, которые задают его элементы. Идентификаторы и символы являются литералами. Элементы типа упорядочены их местом в списке Например type TV2 is ('x', 'y',' z'); -- перечислимый тип TV2 type color is (red,orange,yellow,green,blue,indigo,violet); type bit6 is('U','0','1','F','R','X'); В языке предопределены следующие типы: type character is (NUL,...,'A','B','C',...DEL); type boolean is (False,True); type bit is ('0','1'); Массивы Массив представляет собой одномерный, двухмерный или многомерный набор однородных элементов. Одномерный массив называется вектором. Элемент массива может быть выбран путем задания значения индекса и имени массива. Непрерывная часть или секция (slice) одномерного массива может быть выбрана целиком путем использования диапазона вместо индек17 са. Выражение или возвращаемое значение функции может иметь значение, являющееся массивом. При объявлении типа для массива с неопределенной размерностью (unconstrained) задается число индексов, тип и позиция каждого индекса, а также тип элементов массива. В нем не определяется число элементов в каждом измерении массива. Некоторые неограниченные типы массивов являются предопределенными: type bit_vector is array (natural range <> ) of bit; type string is array( positive range <> ) of character; Это одномерные массивы. Тип bit_vector содержит индексы предопределенного типа natural и элементы типа bit. Тип string содержит индексы предопределенного типа positive и элементы типа character. Запись range <> ("ящик диапазона" – range box) означает, что определение границ индексов отложено. Эти границы необходимо задать при создании объекта данного типа. В качестве индексов массива можно взять переменные целого или перечислительного типа. Элементы могут быть любого типа. Например: type matrix is array (integer range <>, integer range <> ) of real; type bit6_data is array (positive range <> ) of bit6; type transition_delay is array (bit6 range <> ,bit6 range <> ) of time; Объявление объекта, относящегося к типу массив, производится путем задания имени типа и ограничений на индексы (index constraint): variable exp_10: matrix (1 to 10, 1 to 10); variable bit_inp8: bit6_data (bit6); Множество индексов по каждой размерности объекта типа неограниченный массив должно быть ограничено. 18 Строки, битовые строки и агрегаты Строки, битовые строки и агрегаты (strings, bit strings, aggregates) используются для задания констант или начальных значений переменных. Например, constant С1:bit_vector : =B"10101111"; Запись вида (A, B, C, D), в котором элементы заключены в скобки и разделены запятой, называется агрегатом. Агрегаты типа массив создаются путем размещения элементов в определенных позициях записи. Например constant С1:bit_vector : =('1','0','1','0','1','1','1','1'); constant trans_delay:transition_delay := -- 'U' '0' '1' 'F' 'R' 'X' --второй индекс массива --первый индекс массива -( (0ns, 3ns, 4ns, 3ns, 1ns, 0ns), --'U' (5ns, 0ns, 0ns, 3ns, 1ns, 1ns), --'0' (6ns, 3ns, 0ns, 4ns, 2ns, 2ns), --'1' (3ns, 6ns, 6ns, 0ns, 1ns, 1ns), --'F' (5ns, 5ns, 5ns, 5ns, 5ns, 3ns), --'R' (0ns, 0ns, 0ns, 1ns, 1ns, 0ns)) --'X' Агрегат для константы С1 записывается как список элементов, взятых в скобки и разделенных запятыми. Первое значение находится слева, затем элементы перечисляются по очереди слева направо. Второй вариант объявления константы С1 эквивалентен предыдущему. Агрегат записывается, как список значений элементов, разделенных запятыми. Первое значение элемента назначается элементу с самым левым значением индекса, а затем эта операция выполняется в порядке слева направо. Значением элемента может быть произвольное выражение. Константе trans_delay в начальный момент времени (при запуске или инициализации программы) присваиваются значения элементов массива, являющиеся за19 держками. Агрегат состоит из строк элементов, разделенных запятыми. Каждая строка также входит в агрегат. 20 Лекция 3. Типы сигналов в языке VHDL Сигналы Отдельные компоненты цифровых электронных приборов соединяются проводами (линиями связи) (wire), по которым передаются сигналы. Двоичные электрические сигналы представляют собой два уровня напряжения на проводе, один из которых называется Логической "1", а второй – Логическим "0". Это сигнал битового типа (двоичный сигнал). Провода, передающие сигналы, могут объединяться в шину (bus), по которой информация передается в параллельном двоичном коде или в форме двоичного вектора (bit vector). Типы сигналов, используемых в VHDL, показаны на следующем рисунке. Processing Unit K1: ST K2: SN K3; STT Рис. 1. Типы сигналов, определенных в VHDL Язык VHDL допускает два вида двоичных сигналов:  сигнал bit (значения сигнала "0" или "1") и 21  сигнал bit_vector, каждая компонента которого соответствует сигналу bit. Каждая компонента соответствует одному проводу шины. Число проводов в шине (ширина шины) задается целым числом. На рисунке 2 шина DATA содержит 8 проводов и передает сигнал в форме bit vector размерности 8. По проводам a, b, c, x, y и z передаются сигналы в форме bit. Ширина шины и порядок проводов или сигналов в ней должны быть описаны явно. Старший разряд шины обозначается MSB, младший разряд – LSB. Порядок разрядов в возрастающем списке номеров задается ключевым словом to, в убывающем списке номеров – downto. Так, ширина 8-ми разрядной шины с возрастающими номерами проводов определяется оператором bit_vector(0 to 7); -- возрастающие номера от 0 до 7 bit_vector(7 downto 0); -- убывающие номера от 7 до 0 В первой записи младшим битом (LSB) является правый бит "7". Старшим (MSB) является левый бит "0". Во второй записи наоборот. Нумерация разрядов в шине показана на следующем рисунке. Сигналы, с которыми работает цифровое устройство, разделяют на внутренние и внешние. Внешние сигналы проходят через порты интерфейса и связывают цифровое устройство с внешним миром. Внутренние сигналы связывают внутренние компоненты устройства. 22 Шина из 8 проводов 7 6 5 4 3 2 1 0 MSB LSB bit_vector (7 downto 0) 0 1 2 3 4 5 6 7 MSB LSB bit_vector (0 to 7 ) Рис. 2. Порядок двоичных разрядов в шине На рис. 5 сигналы шин DATA, RESULT и EXTBUS, проводов a, b, z являются внешними. Сигналы шины INTBUS и проводов x и y являются внутренними. Внешние сигналы фактически определяются при описании портов интерфейса. Каждый сигнал должен иметь уникальное имя, например, совпадающее с именем порта для внешнего сигнала или именем провода (связи) для внутреннего сигнала. Для сигнала указывается его тип (bit или bit_vector). Для порта указывается направление потока информации (mode), принимающее значения in, out или inout. Для каждого сигнала можно объявить его начальное значение. Например: entity _Processing_Unit is port ( DATA : in bit_vector (7 downto 0); RESULT : inout bit vector (7 downto 0); EXTBUS : out bit vector (4 downto 0); a, b, c, z : in bit;); 23 end Processing_Unit; Внешние сигналы цифрового устройства определяются его портами, что позволяет явно не указывать ключевое слово signal. Для внутренних сигналов обязательно применение ключевого слова signal, что позволяет отличить их от других объектов языка VHDL. Внутренние сигналы не требуют декларации mode (in, out или inout). Для них можно определить начальные значения. В качестве примера опишем примерную архитектуру и внутренние сигналы устройства, приведенного на рис. 2. architecture Behavior_PU of Processing_Unit is component ST port( ____ ); -- Описание интерфейса end component; -- внутренних компонент component SN port( ____ ); end component; component STT port( _____ ); end component; signal INTBUS: bit vector( 7 downto 0); signal x, y: bit begin K1: ST port map( ____ ); -- описание связей K2: SN port map( ____ ); -- внутренних компонент K3: STT port map( ____ ); end Behavior_PU; Видимость сигналов в VHDL Проект цифрового устройства на VHDL строится по иерархическому принципу. Поэтому все объявления, сделанные на данном иерархическом уровне проекта, являются доступными (видимыми) и со всех более низких уровней иерархии проекта. 24 Приведем основные правила видимости сигнала. 1. Сигнал, объявленный в пакете, библиотеке, блоке и т.д. видим во всех частях проекта, которые используют этот пакет, блок, библиотеку. 2. Сигнал, объявленный как порт в описании интерфейса объекта (внешний сигнал), видим во всех архитектурах, входящих в этот объект. 3. Сигнал, объявленный в архитектуре объекта (внутренний сиг- нал), видим только внутри этой архитектуры. 4. Сигнал, объявленный в одном из блоков архитектуры объекта (внутренний сигнал), видим только внутри этого блока. Сигналу может быть назначено начальное значение. Если начальное значение не объявлено, то принимается значение, объявленное как левая граница соответствующего типа. Запрещено явно объявлять сигнал в процессе или подпрограмме. Приведем пример, показывающий видимость сигналов в проекте, имеющем иерархическую структуру. package UU1 is entity DD1 is use UU1 entity DD2 is signal X1 port (Y1) port (Y2) architecture AA of DD1 is use UU1 architecture BB of DD1 is architecture EE of DD2 is signal X3 signal X4 signal X2 Signal X1 is visible in (видим из) UU1, DD2, BB, EE Signal Y1 is visible in (видим из) DD1, AA, BB Signal Y2 is visible in (видим из) DD2, EE Signal X2 is visible in (видим из) AA Signal X3 is visible in (видим из) BB Signal X4 is visible in (видим из) EE Рис. 3. Видимость сигналов Так, например, сигнал Х1, объявленный в пакете UU1, видим внутри этого пакета, а также в других объектах проекта, использующих этот пакет. 25 Лекция 4. Операторы языка VHDL Последовательные операторы Последовательные операторы в VHDL действуют аналогично операторам других языков высокого уровня. Оператор присваивания значения переменной (:= ). Этот оператор заменяет текущее значение переменной новым значением. Условный оператор (if). Этот оператор имеет следующее определение: if (условие) then последовательность утверждений {elsif (условие) then последовательность утверждений } [else последовательность утверждений] end if; Оператор case (случай). Этот оператор имеет следующее определение: case выражение is when логическая альтернатива => последовательность утверждений [when логическая альтернатива => последовательность утверждений ] [when others логическая альтернатива => последовательность утверждений] end case; Оператор цикла loop Вариант цикла "пока" [метка:] while условие loop последовательность утверждений end loop [метка]; Вариант цикла "до" for параметр цикла in границы изменения параметра цикла (in 1 to 10) loop последовательность утверждений 26 end loop [метка]; Внутри цикла можно употреблять операторы when, exit, next. В число последовательных операторов входит оператор ожидания wait. Параллельные операторы Оператор процесса. Формат параллельного оператора процесса имеет следующий вид: [метка] process [список сигналов запуска] декларации begin последовательные операторы end process [метка]; Параллельный оператор процесса определяет поведение некоторой части проекта, определяемой последовательными операторами, находящимися внутри оператора процесса. Процесс может иметь список сигналов запуска и оператор ожидания wait. Отображение информации о запрещенных ситуациях Оператор утверждения assept содержит логическое контролируемое условие, которое должно быть истинно. Если это логическое условие нарушается, то создается сообщение report и указывается уровень серьезности ошибки (severity). Эти операторы записываются в части описания объекта entity. Пример: Заданы два сигнала: CLK, CLR. Длительность сигнала CLK должна быть больше 400 нс, длительность сигнала CLR – больше 500 нс. entity DU01 is 27 generis ( A, B in STD_Logic: C, D out STD_logic; CLK, CLR: time); begin assert CLK > 400 ns report "Длительность сигнала CLK меньше 400 нс" severity warning; assert CLR > 500 ns report "Длительность сигнала CLR меньше 500 нс" severity error; end DU01; 28 Лекция 5. Сигналы стандарта VHDL std_ulogic и std_logic Логические сигналя типа bit и bit_vector недостаточны для корректного описания цифрового устройства. На входах и выходах электронных компонентов может оказаться неопределенный сигнал Х, сигнал с высоким импедансом Z. При работе двух выходов на общую шину возможен конфликт сигналов на выходах. В языке VHDL применяются следующие 9-ти значные логические сигналы, образующие перечисляемый (логический) тип с именем std_ulogic. TYPE std_ulogic IS ( 'U', -- Uninitialized (неинициализированный сигнал), 'X', -- Forcing Unknown (неопределенный сигнал), '0', -- Forcing 0 (сигнал лог. "0"), '1', -- Forcing 1 (сигнал лог. "1"), 'Z', -- High Impedance (высокий импеданс), 'W', -- Weak Unknown (слабый неопределенный сигнал), 'L', -- Weak 0 (слабый сигнал лог. "0"), 'H', -- Weak 1 (слабый сигнал лог. "1"), '-' -- Don't care (произвольный сигнал) ); Подтипом типа std_ulogic является 6-ти значные логические сигналы перечисляемого типа std_logic, широко применяемые на практике. В этом типе отсутствуют сигналы 'W", 'L' и 'H'. Сигналы и операторы типа std_ulogic предназначены для структурного описания цифровой схемы, детализированной до уровня логических элементов. Тип сигналов - многозначный логический. Поэтому прямое выполнение арифметических операций в этом пакете невозможно. Поведенческое описание в этом пакете не работает. 29 Значения сигналов std_logic_vector задаются в двойных кавычках (“0011”), для std_logic – в одинарных (‘0’). Тип переменной std_logic является скалярным, а std_logic_vector – композитным. Значения для сигналов типа integer записываются без кавычек. Компоненты вектора std_logic_vector автоматически не интерпретируются как двоичное число. Компоненты такого вектора не являются разрядами двоичного числа, так как не относятся к типам integer или bit (символы “0011” автоматически не воспринимаются как число 3). Поэтому при описании цифровых схем и моделировании необходимо проводить явное или неявное преобразование типов данных. Приведем примеры явного преобразования типов данных в языке VHDL. Функция conv_integer преобразует явно сигнал типа std_logic_vector в целочисленный перечисляемый тип. В описании на VHDL необходимо описать первый и второй сигналы: signal x_slv : std_logic_vector (7 downto 0); signal x_int : integer range 0 to 255; После этого в исполняемой части описания записывается оператор преобразования типа x_int <= conv_integer(x_slv); Обратное преобразование типа сигналов, рассмотренных выше, записывается так x_slv <= conv_std_logic_vector(x_int, 8); Второй параметр в правой части оператора (в примере равный 8), задает количество разрядов в векторе std_logic_vector, в который будет помещен результат преобразования. В языке VHDL широко применяется неявное преобразование типов данных в описаниях, к которым присоединены необходимые пакеты. Эти возможности языка рассмотрим позже. 30 Инерционная и транспортная задержки сигналов В процессе моделирования устройств на VHDL необходимо использовать понятия задержки распространения сигналов при логическом описании цифровой схемы. В качестве примера рассмотрим модель элемента 2И, состоящую из идеального элемента и элемента задержки. Задержки указываются в операторе назначения сигнала =>. Применяются две модели задержек – инерционная и транспортная. Инерциальная задержка (inertial delay) задается по умолчанию, а транспортная (transport) задержка указывается явно. Элемент с инерциальной задержкой не реагирует на сигналы, меньше чем время задержки. Транспортная задержка не изменяет короткие сигналы. Приведем примеры указания задержек. Y <= X1 and X2 after 10 ns; -- инерциальная задержка. Если требуется вначале задержать сигнал, то записывают оператор задержки Wait, а затем оператор назначения сигнала. Wait 10 ns; Y <= X1 and X2; Транспортная задержка указывается так Y <= transport X1 and X2 after 10 ns; Механизм продвижения модельного времени при моделировании на VHDL Модельное время в процессе моделирования продвигается по событиям. Для этого проводится начальная инициализация модели, а затем циклическое выполнение операторов PROCESS. Остановка процесса моделирования происходит на операторе Wait, в котором указаны сигналы, при изменении 31 значения которых происходит запуск оператора PROCESS. Сигналы изменяются оператором <= ; Альтернативным вариантом запуска процесса моделирования является запись необходимых сигналов в список запуска оператора PROCESS. На каждом такте продвижения модельного времени создается пара время будущего события и будущее значение сигнала. Множество этих пар называется драйвером сигнала. Если несколько процессов формируют один сигнал - возможны конфликты, которые разрешаются функцией resolved. Отображение информации о запрещенных ситуациях Для контроля запрещенных ситуаций используется оператор утверждения assept, который включает логическое контролируемое условие. Если это логическое условие нарушается, то создается сообщение report и указывается уровень серьезности ошибки (severity). Приведем пример применения оператора assept. Пусть заданы два сигнала: CLK, CLR. Длительность сигнала CLK должна быть больше 400 нс, длительность сигнала CLR – больше 500 нс. Создадим устройство с именем D_1 и зададим сигналы при помощи оператора generis. entity D_1 is port (A, B in STD_Logic: C, D out STD_logic); generis ( CLK, CLR: time); -- описание сигналов CLK и CLR. -- Далее приводим пример использования оператора assept. begin assept CLK > 400 ns; -- проверка длительности сигнала report "Длительность сигнала CLK меньше 400 нс" -- текст, выводимый на экран компьютера severity warning; -- уровень ошибки. assert CLR > 500 ns; 32 report "Длительность сигнала CLR меньше 500 нс" severity error; end D_1; Стандартные атрибуты сигналов Атрибуты, приписываемые сигналам, позволяют упростить процесс описания цифровой схемы на VHDL. Рассмотрим применение атрибутов сигналов на конкретном примере. Рассмотрим сигнал S, заданный следующим описанием. S<= ‘1’ after 3 ns; ‘0’ after 30 ns; ‘1’ after 50 ns; Временная диаграмма этого сигнала с различными атрибутами показана на следующем рисунке Применяется следующая запись операторов, позволяющая выделить фронт и спад (срез) цифрового сигнала. S’event and S = ‘1’ -- условие фронта сигнала; S’event and S = ‘0’ -- условие среза сигнала; 33 Следующие атрибуты применяются для описания элементов массивов. ‘left – левая граница диапазона индексов массива; ‘right – правая граница диапазона индексов массива; ‘low – нижняя граница диапазона индексов массива. ‘high – верхняя граница диапазона индексов массива; ‘range – диапазон индексов массива; ‘reverse_range – обращенный диапазон индексов массива; ‘length – ширина диапазона индексов массива. Сигналы и операторы типа std_ulogic и std_logic описаны в стандартном пакете STD_LOGIC_1164 и оказываются доступными для применения в проекте после подключения этого пакета к библиотекам проекта. 34 Лекция 6. Пакеты в VHDL В пакет объединяются декларации различных объектов и типов языка, связанных общим признаком. Затем декларации из пакета можно повторно использовать в различных частях проектов, ссылаясь на этот пакет. Многие пакеты стандартизированы, что упрощает разработку новых проектов. Пакет разделяется на два раздела: - Объявление пакета и - Тело пакета. Объявление пакета Синтаксис объявления пакета имеет следующий вид: \объявление пакета\::= package \идентификатор\ is {объявления в пакете} end [package][\идентификатор\]; Тело пакета Тело пакета приводится в паре с объявлением пакета, если в последнем объявлены подпрограммы или отложенные константы. Тело пакета имеет следующий синтаксис: \объявление пакета\::= package body \идентификатор\ is {объявления в теле пакета} end [package body][\идентификатор\]; Основной пакет, присоединяемый к проекту, имеет имя STD_LOGIC_1164. В этом пакете приведено описание 9-тизначных логических сигналов перечисляемого типа с именем std_ulogic. Рассмотрим подробнее типы логических сигналов, входящих в этот пакет. Список сигналов приведен ниже. 35 TYPE std_ulogic IS ( 'U', -- Uninitialized (неинициализированный сигнал), 'X', -- Forcing Unknown (неопределенный сигнал), '0', -- Forcing 0 (сигнал лог. "0"), '1', -- Forcing 1 (сигнал лог. "1"), Z', -- High Impedance (высокий импеданс), 'W', -- Weak Unknown (слабый неопределенный сигнал), 'L', -- Weak 0 (слабый сигнал лог. "0"), 'H', -- Weak 1 (слабый сигнал лог. "1"), '-' -- Don't care (произвольный сигнал) ); Символы 'X', '1' и '0' обозначают сильные сигналы. Сильным сигналам соответствуют следующие схемы: ‘1’ Ucc Ucc ‘X’ ‘0’ GND GND Логическому состоянию 'Z' (третье состояние или высокий импеданс) соответствует следующая схема: ‘X’ ‘Z’ ‘0’ 36 Схемы, соответствующие логическим состояниям слабых сигналов, приведены на следующих рисунках ‘1’ R ‘H’ ‘X’ ‘0’ R R1 ‘1’ R ‘L’ ‘W’ ‘W’ R2 ‘0’ Слабые сигналы имеют ограниченную мощность и поэтому при соединении электрических цепей слабого и сильного сигнала слабые сигналы подавляются. Приведем формальное описание на VHDL схемной реализации выходного каскада «открытый коллектор». Схема каскада «открытый коллектор» выглядит так: U cc R ‘0’ Out in Описание этой схемы на VHDL можно записать так: Out <= ‘0’ when in = ‘1’ else ‘H’; Заметим, что схема «открытый коллектор» обычно не реализуется в проектах на ПЛИС и поэтому находит ограниченное применение. Подтипом типа std_ulogic является 6-ти значные логические сигналы перечисляемого типа std_logic. В этом типе отсутствуют сигналы слабые сигналы 'W", 'L' и 'H'. Тип std_logic является "разрешенным" подтипом, что следует из его объявления в пакете std_logic_1164. subtype std_logic is resolved std_ulogic; 37 type std_logic_vector is array (natural range <> ) of std_logic; «Разрешающая» таблица преобразования типов данных приведена в пакете std_logic_1164 Таблица определяет, какой сигнал получится после совместного действия двух сигналов типа std_logic. Так, если приходят сигналы '0' и 'H', то в месте пересечения соответствующих столбца и строки получается значение результирующего сигнала '0'. Сигнал '0' сильный. Разрешающая таблица типа std_logic_1164 имеет следующий вид: -- ---------------------------------------------------------- |U X 0 1 Z W L H |-| -- --------------------------------------------------------('U', 'U‘,'U‘, 'U‘, 'U', 'U', 'U', 'U', 'U'), -- | U | ('U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'), -- | X | ('U', 'X', '0', 'X', '0', '0', '0', '0', 'X'), -- | 0 | ('U', 'X', 'X', '1', '1', '1', '1', '1', 'X'), -- | 1 | ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X'), -- | Z | ('U', 'X', '0', '1', 'W', 'W‘,'W‘,'W‘, 'X'), -- | W| ('U', 'X', '0', '1', 'L', 'W', 'L', 'W‘, 'X'), -- | L | ('U', 'X', '0', '1', 'H', 'W‘,'W‘,'H', 'X'), -- | H | ('U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X') -- | - | В пакете std_logic_1164 заново определены логические операторы and, or, nand, nor, xor, xnor и not для типов std_ulogic и std_logic. Пакет std_logic_1164 подключается с помощью следующих VHDL операторов library IEEE; use IEEE. std_logic_1164.all; 38 При создании проектов на VHDL с поведенческим описанием логики работы цифрового устройства возникает несовместимость типов std_logic и std_logic_vector пакета std_logic_1164 с типами integer и natural пакета Standard. Совместимость типов можно обеспечить путем подключения пакета Numeric_ctd, в котором определены два новых типа числовых данных с именами Unsigned и Signed, а также арифметические функции для них. Тип Unsigned представляет собой числа без знака в векторном двоичном (булевом) представлении, а тип Signed – числа со знаком. Для векторов Signed старший (левый) бит определяет знак числа. Отрицательные числа представляются в дополнительном коде. Типы Unsigned и Signed в пакете Numeric_STD определены следующим образом: type UNSIGNED is array (NATURAL range <>) of STD_LOGIC; type SIGNED is array (NATURAL range <>) of STD_LOGIC; Пакет Numeric_STD содержит описания следующих функций: • арифметические функции; • логические функции • функции сравнения; • функции сдвига и вращения; • функции изменения размерности; • функции преобразования типов; Функции преобразования типов в пакете Numeric_STD имеют следующий вид 39 Арифметические операции пакета Numeric_STD К арифметическим операциям относятся: abs (абсолютное значение), + (сложение), – (вычитание), * (умножение), / (деление, т.е. получение целой части частного), rem (получение остатка от деления), mod (деление по модулю). Для типов Unsigned и Signed определены следующие арифметические операции: UNSIGNED {+, –, *, /, rem, mod} UNSIGNED, rem, mod} SIGNED, SIGNED {+, –, *, /, включая операции преобразования типов над вектором и целым числом. UNSIGNED{+,–,*,/,rem, mod} NATURAL, SIGNED {+,–,*,/,rem, mod} INTEGER. Функции “–” и “abs” описаны только для типа SIGNED. Эти функции возвращают вектор, размерность которого совпадает с размерностью аргумента. Функция “–” возвращает число, взятое с противоположным знаком, Функция “abs” возвращает абсолютное значение числа (аргумента). Операции сложения и вычитания описаны в следующей таблице: 40 Арифметическая операция умножения определена в следующей таблице: Арифметическая операция деления определена в следующей таблице: 41 Примеры описания цифровых схем Мультиплексор 8 – 1 Рис. 1. Мультиплексор 8 – 1 --{entity {MUX_8_1} architecture {MUX_ARCH}} library IEEE; use IEEE.STD_LOGIC_1164.all; entity MUX_8_1 is port( A : in STD_LOGIC_VECTOR(7 downto 0); X : in STD_LOGIC_VECTOR(2 downto 0); Y : out STD_LOGIC ); end MUX_8_1; architecture MUX_ARCH of MUX_8_1 is begin MUX: process (X) begin case X is when "000" => Y <= A(0) after 5 ns; 42 when "001" => Y <= A(1) after 5 ns; when "010" => Y <= A(2) after 5 ns; when "011" => Y <= A(3) after 5 ns; when "100" => Y <= A(4) after 5 ns; when "101" => y <= A(5) after 5 ns; when "110" => Y <= A(6) after 5 ns; when "111" => Y <= A(7) after 5 ns; when others => Y <= A(0) after 5 ns; end case; end process; end MUX_ARCH; Дешифратор 3 х 8 Рис. 2. Дешифратор library IEEE; use IEEE.STD_LOGIC_1164.all; entity DEC_8 is port( X : in STD_LOGIC_VECTOR (2 downto 0); Y : out STD_LOGIC_VECTOR (7 downto 0) ); end DEC_8; architecture DEC_8_ARCH of DEC_8 is begin 43 process (X) begin case X is when "000" => Y <= "11111110" after 5 ns; when "001" => Y <= "11111101" after 5 ns; when "010" => Y <= "11111011" after 5 ns; when "011" => Y <= "11110111" after 5 ns; when "100" => Y <= "11101111" after 5 ns; when "101" => Y <= "11011111" after 5 ns; when "110" => Y <= "10111111" after 5 ns; when "111" => Y <= "01111111" after 5 ns; when others => Y <= "11111111"; end case; end process; end DEC_8_ARCH; Сумматор чисел с фиксированной точкой Число 1 Результат Число 2 ibrary IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; 44 entity adder_1 is port (X1, X2 : in std_logic_vector(7 downto 0); Y : out std_logic_vector(8 downto 0)); end entity; library IEEE; use IEEE.std_logic_unsigned.all; architecture adder_1_arch of adder_1 is begin process (X1, X2) begin Y <= ('0'&X1) + ('0'&X2); end process; end architecture; Сумматор чисел с фиксированной точкой Вход переноса Выход переполнения Число 1 Результат Число 2 Выход переноса library IEEE; use IEEE.std_logic_1164.all; entity adder_1 is 45 port ( CI : in std_logic; YV : out std_logic; YO : out std_logic; X1, X2 : in std_logic_vector(7 downto 0); Y : out std_logic_vector(7 downto 0)); end entity; library IEEE; use IEEE.std_logic_unsigned.all; architecture adder_1_arch of adder_1 is begin process (X1, X2, CI) variable TEMP_Y1 : std_logic_vector(7 downto 0); variable TEMP_Y2 : std_logic_vector(1 downto 0); begin TEMP_Y1:=('0' & X1(6 downto 0)) + ('0' & X2(6 downto 0)) + CI; TEMP_Y2:=('0' & X1(7)) + ('0' & X2(7)) + TEMP_Y1(7); Y <= TEMP_Y2(0) & TEMP_Y1(6 downto 0); YO <= TEMP_Y2(1); YV <= TEMP_Y2(1) xor TEMP_Y1(7); end process; end architecture; Сумматор содержит вход переноса (С1)), выход Переноса (Y0) и выход Переполнения (YV). Сумматор может работать с числами X1 и X2 со знаком или без знака. Значение на выходе переполнения (YV) имеет смысл только для чисел со знаком. 46 Умножитель чисел с фиксированной запятой library IEEE; use IEEE.std_logic_1164.all; entity multi_1 is port ( X1 : in std_logic_vector(7 downto 0); X2 : in std_logic_vector(7 downto 0); Y : out std_logic_vector(15 downto 0) ); end multi_1; library IEEE; use IEEE.std_logic_unsigned.all; architecture multi_1_arch of multi_1 is begin Y <= X1 * X2; end multi_1_arch; 47 Счетчик до 16 на триггерах (пример структурного описания проекта) library IEEE; use IEEE.STD_LOGIC_1164.all; entity D_tr is port( D : in STD_LOGIC; C : in STD_LOGIC; R : in STD_LOGIC; Q : out STD_LOGIC; Qbar : out STD_LOGIC ); end D_tr; architecture D_tr_A of D_tr is begin process(C, R) begin if (R ='0') then Q <= '0'; Qbar <= '1'; elsif (C'event and C = '1') then Q <= D after 10ns; Qbar <= not D after 10 ns; end if; end process; end D_tr_A; library IEEE; use IEEE.STD_LOGIC_1164.all; entity Count_1 is port( CLK : in STD_LOGIC; RR : in STD_LOGIC; Y0 : out STD_LOGIC; Y1 : out STD_LOGIC; Y2 : out STD_LOGIC; Y3 : out STD_LOGIC ); end Count_1; architecture Count_1_A of Count_1 is component D_tr port (D,C,R:in STD_LOGIC;Q,Qbar:out STD_LOGIC); 48 end component; signal E0,E1,E2,E3:STD_LOGIC; begin K0:D_tr port map (E0,CLK,RR,Y0,E0); K1:D_tr port map (E1,E0,RR,Y1,E1); K2:D_tr port map (E2,E1,RR,Y2,E2); K3:D_tr port map (E3,E2,RR,Y3,E3); end Count_1_A; E0 E1 E2 E3 Внешний порт CLK, RR, Y0, Y1, Y2, Y3. Порт компонента D, C, R, Q, Qbar. Внутренние сигналы E0, E1, E2, E3. Рис. 4. Счетчик до 16 на D триггерах. 49
«Моделирование цифровых схем на VHDL» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 493 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot