Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
3.1. Мультиплексоры
Мультиплексором называется цифровой переключатель (коммутатор),
который осуществляет передачу на выход данных, поступающих от одного из n
входных источников.
Input 0
Код на адресных входах определяет, какой из входов данных коммутируется на выход
Input 1
Output
Input N-1
Address inputs
(select)
Рис. 3.1. Объяснение работы мультиплексора
На рис.3.2 приведено условное обозначение мультиплексора (multiplexer).
D0 MUX
D1 D0, D1… Dn-1 – информационные входы мультиплексора,
А0 … Аs-1 - адресные входы мультиплексора.
Dn-1 Y s = log2 n - число адресных входов.
А0
A1
Аs-1
53
3.1.1. Мультиплексор 2:1
Мультиплексор 2:1 из двух входных источников данных выбирает один и
передает его данные на выход.
S
MUX
D0
D0 D0 0
D1
D1 Y Y
S D1 1
54
D0 MUX
D1
D2 Y
D3
A0
A1
En
D1
Y
D2
D3
А1
А0
Рис. 3.6. Логическая схема мультиплексора 4:1.
55
Пример 3.1. Структурное (Dataflow) описание мультиплексора 4:1 с
использованием логических операторов
module multiplexer4_1(y,d0,d1,d2,d3,a0,a1,en);
output y;
input en,d0,d1,d2,d3,a0,a1;
// continuos assignment
assign y=en&((d0&~a0&~a1)|d1&a0&~a1)|d2&~a0&a1)|
d3&a0&a1));
endmodule
Пример 3.4
Описание мультиплексора 4:1 со входом enable с использованием оператора
if-then.
Входные данные data представлены в виде 4-битного вектора, адресные
входы – в виде 2-битного вектора a.
56
Отличие данного описания от предыдущего – использование процедурного
блока always.
Если процедурный (или последовательный) блок содержит несколько
операторов, то они заключается между символами begin и end. Если
используется один оператор, то ключевые слова begin и end можно не
использовать.
Переменные, которым делаются присвоения в процедурном блоке, должны
быть описаны как регистровые (reg). Поэтому выход out определен как
регистр (reg). Такое назначение называется процедурным назначением
(procedural assignment).
Данные типа wire не могут быть назначены явно. Используется оператор
assign – такое назначение называется непрерывным назначением
(continuous assignment).
module multiplexer4_1(y,data,а,en);
input [0:3] data;
input [1:0] a;
input en;
output y;
reg y;
always @(data or a or en)
if (en)
if(a==2’b00) y=data[0];// procedural assignments
else if (a==2’b01)
y=data[1];
else if(a==2’b10)
y=data[2];
else y=data[3];
else y=1’b0;
endmodule
always @(sensitivity_list)
[begin]
[procedural assignments]
[if-else statements]
[case statements]
[while, repeat, and for loops]
[task and function calls]
[end]
57
∎
Пример 3.5
Описание мультиплексора 4:1 со входом enable с использованием оператора
case.
В данном описании (пример 3.5) использован оператор case. Условием
является конкатенация или объединение а1 и а0 в двухразрядный код.
Варианты выбора описаны как двухбитные двоичные числа: 2’b00, 2’b01,
2’b10, 2’b11. Завершает операцию выбора ключевое слово endcase.
∎
3.1.4. Тестовый модуль
Тестовый модуль (test bench module) представляет собой программу
моделирования заданного в основном модуле устройства.
Данный модуль обеспечивает подачу тестовых сигналов на основной модуль
(мультиплексор в данном случае). Он является модулем верхнего уровня
иерархии, поэтому в его описании отсутствует список портов.
Так как testbench должен обеспечить подачу сигналов на входы тестируемого
устройства, они должны быть декларированы, как регистровые (reg), а выходы
устройства должны быть декларированы как wire.
Эта величина сохраняется до тех пор, пока не сделано новое назначение.
Переменная типа цепь управляется каким-либо источником сигнала
(драйвером). Если драйвер имеет какое-нибудь значение, то и цепь принимает
это значение.
multiplexer4_1 mux (y, d0, d1, d2, d3, a0, a1,en);
58
В этой строке происходит обращение к тестируемому модулю. Список
портов (in order port list в данном случае) устанавливает соответствие между
сигналами тестового и тестируемого модулей. Порядок переменных в списке
портов должен соответствовать их порядку в тестовом модуле (сопоставление
портов по порядку).
(для примера 3.3)
module stimulus;
//Declare variables to be connected to inputs
reg en,d0,d1,d2,d3,a1,a0;
// Declare output wire
wire y;
// Instantiate the multiplexer
multiplexer4_1 mux (y,d0,d1,d2,d3,a0,a1,en);
// Stimulate the inputs
initial begin
// Set inputs
en=0; d0=0; d1=1; d2=1; d3=0;a1=0; a0=0;
#10 en=1; // choose d0
#10 a0=1; // choose d1
#10 a1=1; a0=0; //choose d2
#20 a0=1; //choose d3
#10 en=0;
#20 $finish //terminate the simulation
end
endmodule
59
3.1.5. Синтез логических функций с использованием
мультиплексоров
Мультиплексор является универсальным логическим элементом.
Пусть мультиплексор имеет 2 k информационных входов и k управляющих
входов. В зависимости от комбинации значений сигналов на адресных
(управляющих) входах в мультиплексоре осуществляется передача сигналов от
одного из информационных входов на выход мультиплексора.
Функция, реализуемая мультиплексором, на управляющие входы которого
Ak-1, Ak-2, …,A1,A0 подаются соответственно булевы переменные x k-1, xk-2, …x1,x0,
а на информационные входы переменные d0, d1, …. d2 k-1, выражается
следующим образом:
Y= d0x0x1 … xk-2 xk-1 + d1 x0x1 …xk-2xk-1 + … + d2k-1x0x1 ... xk-2xk-1
Подставляя вместо d0, d1 . . .d2k-1 различные комбинации 1 и 0, можно
получить СДНФ любой булевой функции от k аргументов.
Пример 3.6
Задана функция от трех аргументов (Табл.3.3):
Табл.3.3
x1 x2 x3 Y
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1
Пример 3.7
Реализация функции (табл. 3.4) на мультиплексоре 4:1.На адресные входы
мультиплексора 4-1 подаются переменные x1,x2, на информационные
входы – функции от x3, константы “0” и “1”.
Табл.3.4 x3 D0 MUX
x1 x2 x3 Y D1
0 0 0 1 D2 Y Y
0 0 1 0 D0=x3 “1” D3
0 1 0 0
x2 A0
0 1 1 1 D1=x3 x1 A1
1 0 0 0 “1” En
1 0 1 1 D2= x3
1 1 0 1
1 1 1 1 D3 = 1
Рис. 3.8. Реализация функции от трех
переменных на мультиплексоре
61
3.1.6. Расширение мультиплексоров
Иногда требуется построить схему мультиплексора, имеющего намного
большее число входов, чем серийно выпускаемые мультиплексоры. В этом
случае используют пирамидальные структуры мультиплексоров.
Рассмотрим построение мультиплексора 16:1 на основе мультиплексоров 4:1.
Потребуется 16/4=4 мультиплексора в первом ярусе и один мультиплексор во
втором ярусе.
D0, D1, … ,D15 – информационные входы мультиплексора, A3, A2, A1, A0 –
адресные входы мультиплексора. F – выход мультиплексора 16 :1.
Схема мультиплексора представлена на рис. 3.9. Два младших разряда адреса
A1 и A0 поступают на мультиплексoры первого яруса, a старшие разряды – на
мультиплексор второго яруса. Таблица 3.5 поясняет работу схемы.
Табл.3.5
А3 А2 F
0 0 MUX0 D0, D1,D2,D3
0 1 MUX1 D4, D5,D6,D7
1 0 MUX3 D8, D9, D10,D11
1 1 MUX4 D12,D13 D14,D15
62
D0 D0 MUX
D1 D1
D2 MUX0
D2 Y
D3 D3
А0 A0
А1 A1
D0 MUX
D4
D5 D1
D6 D2 MUX1
Y
D7 D3
A0 D0
A1 D1
D2 D3 F
Y
A0
D8 D0 MUX А2 A1
D9 D1 А3
D10 D2
D11 D3 Y
MUX2
A0
A1
D12 D0 MUX
D13 D1
D14 D2 MUX3
D15 D3 Y
A0
A1
3.2. Дешифраторы
Значительная часть информации хранится и обрабатывается в компьютерах в
закодированном виде.
Дешифратор (Decoder) – это логическая схема с несколькими входами и
несколькими выходами, которая преобразует кодированные входные сигналы в
кодированные выходные сигналы. Входной код обычно имеет меньшее число
разрядов, чем выходной код.
Схема, которая преобразует n-разрядный двоичный код в 2 n-разрядный
унарный код “1 из 2n”, называется полным дешифратором (n2n).
63
Дешифратор 24 со входом разрешения (Enable)
DC 0 y0
А0 0 1 y1
A1 1 2 y2
En 2 3 y3
y0
A1
A0 y1
En y2
y3
Рис. 3.11. Схема дешифратора 2x4
Пример описания дешифратора 24 на Verilog с использованием оператора
case
module dec2to4(in,en,y);
input [1:0] in;
input en;
output reg[0:3]y;
always @(in or en)
case ({en,in})
3’b100: y=4’b1000;
3’b101: y=4’b0100;
64
3’b110: y=4’b0010;
3’b111: y=4’b0001;
default: y=4’b0000;
endcase
endmodule
Пример 3.8
Описание декодера 24 с использованием оператора for
module dec2to4(in,en,y);
input [1:0] in;
input en;
output reg [0:3] y;
integer k;
always @(in or en)
for (k=0; k<=3; k=k+1)
if(in==k&&en==1)
y[k]=1;
else y[k]=0;
endmodule
Микросхема дешифратора (IC 74x138)
Микросхема является декодером 38 с тремя входами разрешения E1,E2,E3.
Табл. 3.8
Е1 Е2 Е3 A2 A1 A0 Y7_L Y6_L Y5_L Y4_L Y3_L Y2_L Y1_L Y0_L
0 x x x x x 1 1 1 1 1 1 1 1
x 1 x x x x 1 1 1 1 1 1 1 1
x x 1 x x x 1 1 1 1 1 1 1 1
1 0 0 0 0 0 1 1 1 1 1 1 1 0
1 0 0 0 0 1 1 1 1 1 1 1 0 1
1 0 0 0 1 0 1 1 1 1 1 0 1 1
1 0 0 0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 1 1 1 0 1 1 1 1 1
1 0 0 1 1 0 1 0 1 1 1 1 1 1
1 0 0 1 1 1 0 1 1 1 1 1 1 1
Активные уровни входов разрешения: E1– высокий, E2 и E3 – низкий.
Выходные сигналы имеют низкий активный уровень.
Условное обозначение микросхемы приведено на рис.3.12.
Таблица истинности микросхемы представлена в Табл.3.8.
Дешифратор реализует следующие функции:
Y0 = E1E2E3A2A1A0; Y1 = E1E2E3A2A1A0; . . .
. . . Y5 = E1E2E3A2A1A0; . . . Y7 = E1E2E3A2A1A0;
65
DC 0 Y0_L
А0 0 1 Y1_Lдля расширения декодеров – построения декодеров с бо
Входы E1,E2,E3 используются
2 Y2_L
А11 1
3 Y3_L
А2 2 4 Y4_L
5 Y5_L
Е1
6 Y6_L
Е2
7 Y7_L
Е3
DMX
Output 0
A0 Y0
Output 1 Y1
Input A1
Y2
Output N-1 In Y3
66 Y0
In
A0 Y1
A1
Y2
Y3
Рис. 3.16. Схема демультиплексора
3.3.2. Пример описания демультиплексора на Verilog
В данном примере невыбранные каналы (выходы) устанавливаются в
состояние z.
module demultiplexer1_to_4(out,in,s);
output reg[0:3]out;
input in;
input [1:0]s;
always @(s , in)
case (s) // Switch based on control signals
2'b00:out={in,3’bz};
2'b01:out={1’bz,in,2’bz};
2'b10:out={2’bz,in,1’bz};
2'b11:out={3’bz,in};
default:out =4’bz;
endcase
endmodule
3.4. Шифраторы
Полные дешифраторы являются преобразователями двоичного n-разрядного
кода в унитарный 2n-разрядный код, все разряды которого, за исключением
одного, равны нулю. Шифраторы выполняют обратное преобразование, т.е. на
вход шифратора подается унитарный код, а на выходе образуется
соответствующий двоичный код.
Обозначим входы шифратора I0,I1.. .Ii... Для шифратора должно выполняться
условие Ii&Ij =0. Если Ii =1, то на выходе шифратора должен быть двоичный код
числа i.
Если сигналы на вход шифратора поступают от независимых источников, то
условие Ii&Ij=0 для любых i и j невыполнимо. В этом случае каждому входу
назначается приоритет. Будем считать, что чем больше номер входа i, тем выше
приоритет входа. Шифратор должен выдавать на выход двоичный код номера i,
если на все входы Ij , имеющие больший приоритет, поданы нули. Такие
шифраторы называются приоритетными шифраторами.
67
3.4.1. Схемы шифраторов
На рис.3.17 представлены условное обозначение и таблица истинности
шифратора 4-2.
Табл. 3.9
I3 A1
I2
A0
I1
I0 G
(a) (б)
Рис. 3.17: (a) обозначение шифратора, (б) таблица истинности
Шифратор имеет четыре входа I3, I2, I1 ,I0 , два адресных выхода A1, A0 и
выход G (group select). Активный уровень входных и выходных сигналов
высокий. Вход I3 имеет наивысший приоритет.
Приоритетная схема преобразует входной код в унитарный (One-hot code) и
реализует следующие функции:
H3 = I3; H2= I3I2; H1= I3I2I1;
H3
I3 A1
H2
I2
H1 A0
I1
G
I0
Рис. 3.18. Схема приоритетного шифратора 4-2
Выходные функции шифратора: A1= H3 + H2; A0 = H3 + H1;
G = I3 + I2 + I1 + I0; Сигнал G – Group Select – активен, когда хотя бы на
одном из входов имеется единица.
Микросхема 74x148.
Микросхема представляет собой 8-входовой приоритетный шифратор.
Активные уровни входных и выходных сигналов этого шифратора низкие.
Шифратор имеет вход разрешения EI – Enable input ( активным является также
низкий уровень). GS – сигнал, указывающий на то, что хотя бы один вход
является активным. Сигнал EO имеет активный уровень, если имеется сигнал
разрешения и ни на одном из входов запросов нет сигнала разрешения. Этот
68
сигнал предназначен для подачи на вход менее приоритетного шифратора, когда
требуется построить схему приоритнoгo шифратора с числом входов, больше 8.
EI
I7 A2
I6 A1
I5 A0
I4
I3 GS
I2 EO
I1
I0
Пример 3.9
Построение схемы приоритетного 16-входового шифратора на микросхемах
74x148. Активные уровни входных сигналов In0In15 шифратора низкие.
Наивысшим приоритетом обладает сигнал на входе ~In15.
Для построения схемы потребуется две микросхемы 74x148.
В общем случае для построения приоритетного шифратора с N входами
потребуется N/8 микросхем 74x148.
Схема приведена на рис.3.20.Запросы с номерами In0In7 поступают на
нижний шифратор, запросы с номерами In8 In15 на верхний шифратор.
Если ни на одном из входов верхнего шифратора нет активного уровня,
тогда сигнал EO (enable output) разрешает работу нижнего шигратора.
На выходе схемы формируется 4-разрядный адрес приоритетного запроса.
Активные уровни сигналов на выходе(адреса) высокие.
69
В любой момент времени могут быть активными выходы А2-А0 только
одной микросхемы. Поэтому для формирования сигналов А2-А0 могут быть
использованы двухвходовые элементы И-НЕ. Для получения А3 нужно
инвертировать сигнал на выходе GS верхней микросхемы. Сигнал на
выходе RGS имеет активный уровень, если присутствует сигнал хотя бы на
одном выходе GS. ∎
EI
In15 I7 A2
In14 I6 A1
In13 I5 A0
In12 I4
A3
In11 I3 GS
In10 I2 EO
In9 I1
In8 I0
A2
EI
In7 I7 A2 A1
In6 I6 A1
In5 I5 A0
In4 I4
A0
In3 I3 GS
In2 I2 EO
In1 I1
In0 I0 RGS
module encoder4_1(din,aout,gs);
input [3:0] din;
output [1:0] aout;
70
reg [1:0] aout;
output gs;
assign gs = (din!=0);
always @(din)
casex (din)
4’b1xxx: aout =2’b11;
4’b01xx: aout = 2’b10;
4’b001x: aout = 2’b01;
default: aout = 2’b00;
endcase
end
end
endmodule //encoder4_1
Пример 3.11
Описание шифратора 8-3, подобного микросхеме 74x148 . В отличие от
данной микросхемы активные уровни всех входных и выходных сигналов
высокие.
Анализ входов начинается с младшего приоритета. Последний единичный
вход, обнаруженный при выполнении оператора for, будет иметь самый
высокий приоритет. Его номер будет присвоен переменной address.
module encoder_8to3(ei,in,address,eo,gs);
input ei;
input [7:0] in;
output reg[2:0] address;
output reg eo,gs;
integer i;
always @ (ei or in)
71
begin eo=1; gs=0; address=3'b0;
if(ei==0) eo =0;
else for(i=0;i<8;i=i+1)//check low priority first
begin if (in[i]==1)
begin gs=1;
eo=1;
address=i;
end
end
end
endmodule
1. Оператор for
for (initial_index; terminal_index; increment)
begin
statements
end
3.5. Kомпараторы
Компараторы (устройства сравнения) определяют отношения между двумя
словами. Сравнение двух двоичных слов с целью обнаружения их равенства –
это операция, широко применяемая в компьютерных системах и устройствах.
3.5.1. Сравнение слов на “равно”/”не равно”.
Пусть заданы два n-разрядных числа A = (a n-1 an-2 . . . a1 a0) и B = (bn-1 bn-2 . . . b1
b0). Схема равнозначности выполняет следующую функцию:
Y= = (an-1 = = bn-1)(an-2 = = bn-2) . . . (a1 = =b1)(a0 ==b0).
Проверяются на равнозначность все одноименные разряды чисел.
Конъюнкция равнозначностей представляет собой требуемую функцию.
Схема на элементах XNOR приведена на рис. 3.21.
a3
b3
а2
b2
а1
b1 Y=
Y
а0
b0
Y= = (a3 b3)( a2 b2)( a1 b1)( a0 b0) = (a3 b3)+( a2 b2)+( a1 b1)+( a0 b0).
73
a3
b3
а2
b2
а1
b1 Y=
Y
а0
b0
Рис. 3.22 . Компаратор на равно/не равно на элементах XOR
Описание на Verilog компаратора на ,
Потоковая форма (data flow) описания
module compare (compout, a,b);
parameter size = 32;
output compout;
input [size-1:0] a;
input [size-1:0] b;
assign compout = (a==b);
endmodule //compare
В данном примере использована декларация параметра parameter.
Параметрами в Verilog называются константы, используемые в программах
через объявленное имя. Параметром является число разрядов операндов – size.
а0
b0 YA<B
YA>B
Кроме входов данных A и B имеются также входы A>B in, A=Bin, A<Bin для
каскадного соединения нескольких таких микросхем с целью создания
компаратора с числом разрядов больше четырех.
С помощью входов наращивания разрядности микросхема может быть
запрограммирована на выполнение сравнения на и .
Схема 12-разрядного компаратора на основе ИС 74x85 приведена на рис.3.25.
В схеме использованы 3 компаратора CMP1, CMP2 и CMP3, на которые
поступают младшая, средняя и старшая тетрады чисел A и B. Если старшaя
тетрада числа A больше (или меньше) старшей тетрады числа B, то результаты
сравнения от IC CMP1 и CMP2 не учитываются. При равенстве старших тетрад
чисел A и B на входы расширения разрядности компараторов поступают выходы
CMP2. Если результатом сравнения средних тетрад также является равенство, то
результат сравнения определяется IC CMP1.
76
В приведенном ниже описании компаратор значений рассматривает
сравниваемые операнды как числа со знаком.
gin, lin, ein – входы расширения A>Bin, A<Bin, A=Bin;
gout, lout, eout – выходы A>B, A<B, A==B.
module comparator(a,b,gin,lin,ein,gout,lout,eout);
input [3:0] a,b;
input gin,lin,ein;
output gout,lout,eout;
reg signed gout,lout,eout;
always @(a or b or gin or lin or ein)
if (a==b)
begin gout=gin;lout=lin;eout=ein;end
else if (a> b)
begin gout=1’b1;lout=1’b0;eout=1’b0; end
else if (a< b)
begin gout=1’b0;lout=1’b1;eout=1’b0; end
else
begin gout=1’bx;lout=1’bx;eout=1’bx; end
endmodule
77
Рис. 3.26. Принцип работы буфера с тремя состояниями
Таблица истинности неинвертирующего буфера (Табл.3.13).
Табл. 3.13
En A Y
0 0 Hi-Z
0 1 Hi-Z
1 0 0
1 1 1
A Y A Y A Y
78
A 1-разрядная шина
DC B
S0
Data
S1
En C
S1,S0 3 0 1 2 3
En
Data D A B C D
Hi-Z Dead
time
79
3.6.2. Описание на Verilog однонаправленного буфера с тремя
состояниями
1. Использование процедурного присвоения
E1
E2
A1 Y1
A2 E1,
Y2 E2 – входы разрешения передачи
A3 информации со входов A1 … A8.
Y3
A4 Y4 разрешения нeт, то все выходы ИС находятся в состоянии Z.
Если
A5 Y5
A6 Y6
A7 Y7
A8 Y8
80
SRC0
sb0
SRC1
Bus
sb1
SRC2
sb3
SRC1
MX Bus
En
Dir
A B
Пример 3.11
Oписание 1-битного приемопередатчика на Verilog
module transciever_1(En, Dir, A,B);
input En, Dir;
inout A, B;
assign A=~En&Dir?B:1’bz;
assign B=~En&~Dir?A:1’bz;
endmodule
82
Для декларации двунаправленных портов A и B использовано
ключевое слово inout.
E1
DIR
A1 B1
A2 B2
A3 B3
A4 B4
A5 B5
A6 B6
A7 B7
A8 B8
Рис.3.35. Графическое изображение IC 74x245
ИС содержит 8 двунаправленных буферов с тремя состояниями
Пример 3.12
Описание 8-битного приемопередатчика на Verilog
module transciever_8(En,Dir,A,B);
input En,Dir;
inout [7:0] A, B;
assign A =~En&~Dir?B: 8’bz;
assign B=~En&Dir?A:8’bz;
endmodule
3.9. Задачи
3.1 Построить мультиплексор 16:1, используя мультиплексоры 4:1.
83
0 0
0 1
0
0
1
0
1 1
0
y
1
0 0
1 1
0
1
1 0
1 1
c
b
а
Рис. 3.36.
84
10 1 CD
DC 0
x3 21 7 20 2
20 1
33 3 21 4
2
45 2 22 6 Y
x2 21 3
57 5
4
6 8
22 5
x1 7 6
6
8 4
7
Рис. 3.37.
1 0 MUX
1
2
3
4
5 Y
0 6
7
X3 0
X2 1
X1 2
Рис. 3.38.
Рис. 3.39.
85