Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы конструирования электронных средств. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

15+(16-9-5)-10+12 17-(17-14)-(17-7)+12 2+10+6-13+2-6 9-(18-8-9)+(14-7) 11+(15-10)+(16-5-8) 19-8+6-2+3-15 14+(16-8-5)-10+11 16-(17-13)-(17-7)+10 2+10+6-14+3-6 10-(18-8-10)+(15-7) 10+(15-11)+(18-5-8) 22-8+6-2+4-15 16+(16-9-5)-10+15 30-(17-14)-(17-7)+15

4 Содержание отчета

4.1Цель работы.

4.2Алгоритм модуля на языке Verilog для каждого примера.

4.3Ответы в двоичной и десятичной форме для каждого примера.

4.4Вывод.

5 Контрольные вопросы

5.1Как объявляются массивы портов?

5.2Исходя из каких соображений выбирается разрядность шины порта?

5.3Как объявляются переменные?

5.4Исходя из каких соображений выбирается разрядность переменной?

5.5Как осуществляется запись арифметических операций?

5.6Какие арифметические операции доступны в языке Verilog?

5.7Приведите пример алгоритма вычисления результата для какой-либо формулы.

11

Лабораторная работа №3

Комбинационные схемы

1 Цель работы

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

2 Краткие теоретические сведения

2.1 Поведенческие блоки

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

Синтаксис для описания поведенческого модуля выглядит следующим образом:

always@(<аргумент>) <действие>

где always@( ) – процедурный блок;

<аргумент> – список чувствительности, список сигналов к которым чувствителен блок;

<действие> – выражение, которое выполняется при изменении сигналов в списке чувствительности.

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

Решим следующую задачу. Требуется организовать сумматор. Имеется две четырех битных шины «А» и «В». Требуется арифметически сложить шины и вывести результат на восьми битную выходную шину «Y».

12

module ADDER (A, B, Y);

output reg [7:0]Y; input wire [3:0]A; input wire [3:0]B;

always@(A or B) begin

Y=A+B;

end endmodule

2.2 Дешифратор Дешифратор является комбинационной схемой с несколькими входами и

выходами, преобразующие код, подаваемый на входы, в сигнал на одном из выходов. На выходе дешифратора появляется логическая единица, на остальных — логические нули, когда на входных шинах устанавливается двоичный код определённого числа, то есть дешифратор расшифровывает число в двоичном коде, представляя его логической единицей на определённом выходе. Число входов дешифратора равно количеству разрядов, поступающих двоичных чисел. Число выходов равно полному количеству различных двоичных чисел этой разрядности. Ниже представлен алгоритм, реализующий дешифратор на два входных разряда «Х».

module DECODER (X,Y);

output reg [3:0]Y; input wire [1:0] X;

always@(X) begin

Y[0]=~X[0] & ~X[1];

Y[1]=~X[0] & X[1];

Y[2]= X[0] & ~X[1];

Y[3]= X[0] & X[1];

end endmodule

13

2.3 Шифратор Дешифратор является комбинационным устройством выполняющее логи-

ческую функцию (операцию) – преобразование позиционного n-разрядного кода в m-разрядный двоичный код. При подаче сигнала на один из n входов (обязательно на один, не более) на выходе появляется двоичный код номера активного входа. Если количество входов настолько велико, что в шифраторе используются все возможные комбинации сигналов на выходе, то такой шифратор называется полным, если не все, то неполным. Число входов и выходов в полном шифраторе связано соотношением:

n=2m,

где n – число входов;

m – число выходов двоичных разрядов.

Ниже представлен алгоритм, реализующий шифратор на четыре входа «Х».

module CODER (X,Y);

output reg [1:0]Y; input wire [3:0]X;

always@(X) begin

Y[0]=( ~X[0]& ~X[1]& X[2]& ~X[3] ) | ( ~X[0]& ~X[1]& ~X[2]& X[3] ); Y[1]=( ~X[0]& X[1]& ~X[2]& ~X[3] ) | (~X[0]& ~X[1]& ~X[2]& X[3] );

end endmodule

2.4 Мультиплексор Мультиплексор является комбинационным устройством, которое позволя-

ет подключать несколько входов к одному выходу. Сигналы, подаваемые на адресные входы, определяют, какой конкретно информационный канал подключен к выходу. Ниже представлен алгоритм, реализующий мультиплексор на четыре входа «Х» с двухразрядным адресным входом «А».

14

module MULTIPLEXER (A,X,Y);

output reg Y; input wire [3:0]X; input wire [1:0]A;

always@(X) begin

if(A==0)Y=X[0];

if(A==1)Y=X[1];

if(A==2)Y=X[2];

if(A==3)Y=X[3];

end endmodule

2.5 Преобразователь кода в код Преобразователь кода в код служит для преобразования одной кодовой по-

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

Семи сегментный индикатор является знакосинтезирующим индикатором и предназначен для индикации арабских чисел от 0 до 9. Индикатор конструктивно состоит из 7 подсвечивающийся или отражающих сегментов. Расположение и название сегментов приведены на рисунке 2.1.

Рис. 2.1. Расположение и название сегментов семи сегментного индикатора

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

15

Табл. 3.1. Таблица истинности для преобразователя двоичного кода в код управления семи сегментным индикатором с общим анодом

Х3

Х2

Х1

Х0

A

B

C

D

E

F

G

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

1

1

0

0

1

1

1

1

2

0

0

1

0

0

0

1

0

0

1

0

3

0

0

1

1

0

0

0

0

1

1

0

4

0

1

0

0

1

0

0

1

1

0

0

5

0

1

0

1

0

1

0

0

1

0

0

6

0

1

1

0

0

1

0

0

0

0

0

7

0

1

1

1

0

0

0

1

1

1

1

8

1

0

0

0

0

0

0

0

0

0

0

9

1

0

0

1

0

0

0

0

1

0

0

Ниже приведен алгоритм, который преобразовывает двоичный код, поступающий на шину «Х», в код для управления семи сегментным индикатором, снимаемым с шины «Y».

module CODER (X,Y);

output reg [6:0]Y; input wire [3:0]X;

always@(X) begin

if(X==0)Y=7'b1000000;

if(X==1)Y=7'b1111001;

if(X==2)Y=7'b0100100;

if(X==3)Y=7'b0110000;

if(X==4)Y=7'b0011001;

if(X==5)Y=7'b0010010;

if(X==6)Y=7'b0000010;

if(X==7)Y=7'b1111000;

if(X==8)Y=7'b0000000;

if(X==9)Y=7'b0010000;

end endmodule

3 Задание к работе

Произведите исследование описанных логических устройств. В качестве входных воздействий используйте движковые переключатели стенда. В каче-

16

стве индикаторов выходных шин используйте светодиоды стенда. Логику работы каждого устройства опишите в виде таблицы истинности.

4 Содержание отчета

4.1Цель работы.

4.2Алгоритм модуля на языке Verilog для каждого устройства.

4.3Таблицы истинности для каждого комбинационного устройства.

4.4Вывод.

5 Контрольные вопросы

5.1Дайте определение процедурного блока always.

5.2Для чего нужны поведенческие блоки?

5.3Дайте определение дешифратора.

5.4Приведите таблицу истинности дешифратора.

5.4Дайте определение шифратора.

5.5Приведите таблицу истинности шифратора.

5.6Дайте определение мультиплексора.

5.7Приведите таблицу истинности мультиплексора.

5.8Дайте определение преобразователя кода в код.

5.9Приведите таблицу истинности преобразователя кода в код для семи сегментного индикатора с общим анодом.

5.10Приведите таблицу истинности преобразователя кода в код для семи сегментного индикатора с общим катодом.

5.11Приведите алгоритм на языке Verilog реализующий работу дешифра-

тора.

5.12Приведите алгоритм на языке Verilog реализующий работу шифрато-

ра.

5.13Приведите алгоритм на языке Verilog реализующий работу мульти-

плексора.

5.14Приведите алгоритм на языке Verilog реализующий работу преобразователя двоичного кода в код для управления семи сегментным индикатором с общим анодом.

5.15Как производится формирование арабских чисел на семи сегментном индикаторе?

17

Лабораторная работа №4

Счетчик делитель

1 Цель работы

Целью работы является изучение принципов построения счетчиков делителей.

2 Краткие теоретические сведения

2.1 Счетчики делители Счетчик делитель предназначен для выработки выходного сигала в целое

количество раз меньше, чем частота входного сигнала. То есть счетчик делитель осуществляет деление входного сигнала в целое число раз. Реализация счетчиков осуществляется с помощью процедурных блоков always. Пусть стоит задача реализовать делитель с коэффициентом деления 4. При этом входной сигнал, который нужно разделить, подается на входную линию «Х», а выходной снимается с линии «Y». Тогда алгоритм будет выглядеть следующим образом:

reg [2:0]i=0;

always@(posedge X) begin

if(i>3) begin i=0; Y=~Y; end

else i=i+1;

end

Аргументом процедурного блока в данном случае служит posedge X, что обозначает выполнение действий в процедурном блоке только при изменении входного сигнала «Х» с логического нуля в логическую единицу. С каждым периодом тактового сигнала «Х» значение переменной i будет возрастать на единицу. При превышении значения больше 3 данная переменная сбросится в ноль, а в выходной порт «Y» запишется проинвертированное предыдущее значение порта «Y». Таким образом реализуется делитель на 4.

18

3 Задание к работе

Создайте алгоритм делителя, формирующего меандр с частотой в 1 Гц. Сформированный сигнал выведите на светодиод. В качестве тактового генератора используйте тактовый генератор стенда на 16 МГц. Следует отметить, что тактовый сигнал 16 МГц подается на 16 вывод ПЛИС. При этом запуск генерации происходит только при подаче на 91 вывод ПЛИС логической единицы.

4 Содержание отчета

4.1Цель работы.

4.2Алгоритм модуля на языке Verilog для реализации делителя, формирующего меандр с частотой в 1 Гц.

4.3Вывод.

5 Контрольные вопросы

5.1Дайте определение процедурного блока always.

5.2Опишите общий принцип построения делителей на языке Verilog.

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

5.4Из каких соображений выбирается разрядность переменной делителя?

19

Лабораторная работа №5 Таймер счетчик

1 Цель работы

Целью работы является изучение принципов построения счетных устройств.

2 Краткие теоретические сведения

2.1 Счетчик импульсов Счетчик импульсов является устройством, подсчитывающим количество

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

Пусть у нас есть переменная счетчик i, которая меняет своё значение с каждым новым импульсом от 0 до 99. Для отображения каждого разряда данного числа в нужном разряде семи сегментного индикатора требуется разбить переменную i на две переменные. Одна переменная должна хранить единицы числа i, вторая переменная должна хранить десятки числа i. Для это прибегнем к следующему способу и запишем:

a=i/10;

b=i%10.

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

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]