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

Lek2013 / lek3

.doc
Скачиваний:
50
Добавлен:
31.05.2015
Размер:
1.35 Mб
Скачать

Лекция 3

Комбинационная логика

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

Пример описания комбинационной логики:

Пусть есть схема:

Здесь комментарий выделен двумя тире --

Данный пример синтезирует схему

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity gates is

port (a, b: in STD_LOGIC_VECTOR (3 downto 0);

y1, y2, y3, y4,y5: out STD_LOGIC_VECTOR (3 downto 0));

end;

architecture synth of gates is

begin

— —шина 4 bit

y1<= a and b;

y2 <= a or b;

y3 <= a xor b;

y4 <= a nand b;

y5 <= a nor b;

end;

Мультиплексоры

Мультиплексор представляет из себя сему с 2^n шинами данных и n управляющими линиями и одной выходной шиной. Задача мультиплексора в зависимости от адреса на управляющих линиях коммутировать соответствующую входную шину на выход.

Пример n=1:

Описание данного мультиплексора на VHDL

library IEEE; use IEEE.STD_LOGIC_1164.all;

entity mux2 is

port (d0, d1: in STD_LOGIC_VECTOR (3 downto 0);

s: in STD_LOGIC;

y: out STD_LOGIC_VECTOR (3 downto 0));

end;

architecture synth of mux2 is

begin

y <= d0 when s = ‘0’ else d1;

end;

Когда на управляющий вход мультиплексора подан логический ноль то выходная 4-х битная шина соединяется с входной шиной D0, иначе со входной шиной D1.

П

00

D0

D1

ример n=2

О

01

Y

бозначение на схеме:

D2

d

10

11

D3

d

l

S

ibrary IEEE; use IEEE.STD_LOGIC_1164.all;

entity mux4 is

port (d0, d1,d2, d3: in STD_LOGIC_VECTOR (3 downto 0);

s: in STD_LOGIC_VECTOR (1 downto 0);

y: out STD_LOGIC_VECTOR (3 downto 0));

end;

architecture synt of mux4 is

begin

y <= d0 when s = “00” else

d1 when s= “01” else

d2 when s = “10” else

d3;

end;

Дешифратор (англ. Decoder)

Декодер получает на входе n-разрядное число и использует его для того чтобы, установить на одном из выходов логическую единицу. Декодер с n-входами имеет 2^n выходов.

Обозначение на схеме:

Пример релизации дешифратора в отдельной микросхеме: 74HC42

Пример использования декодера:

Пусть надо объединить 8 микросхем памяти. Тогда 3 старших бита адреса можно подать на декодер, а выходы декодера на входы разрешения работы микросхем.

Пример описания декодера 3:8

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity Decoder3_8 is

Port ( A : in STD_LOGIC_VECTOR (2 downto 0);

F : out STD_LOGIC_VECTOR (7 downto 0));

end Decoder3_8;

architecture Synth of m1 is

begin

F<=x"01" after 100ns when A="000" else

x"02" after 100ns when A="001" else

x"04" after 100ns when A="010" else

x"08" after 100ns when A="011" else

x"10" after 100ns when A="100" else

x"20" after 100ns when A="101" else

x"40" after 100ns when A="110" else

x"80" after 100ns;end Synth;

Компараторы

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

Обозначение на схеме:

Схема 4-х битового компаратора

Поведенческое описание компаратора:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity Comparator is

Port ( A : in STD_LOGIC_VECTOR (3 downto 0);

B : in STD_LOGIC_VECTOR (3 downto 0);

Y : out STD_LOGIC);

end Comparator;

architecture Synth of Comparator is

begin

Y <='1' when A=B else '0';

end Synth;

Поведенческое и структурное описание на VHDL

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

Кроме поведенческого стиля существует структурный – при котором код на VHDL описывает из каких элементов и из каких связей состоит схема.

Пример описания компаратора в поведенческом стиле (см. схема выше):

  1. Сначала требуется выделить составные части схемы

Для примера Это будет двухвходовый элемент исключающий или с инверсией и 4-х входовый логический элемент И.

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

Файл NXOR2.vhd

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity NXOR2 is

Port ( i1 : in STD_LOGIC;

i2 : in STD_LOGIC;

y : out STD_LOGIC);

end NXOR2;

architecture Beh of NXOR2 is

begin

y<= not ( i1 xor i2);

end Beh;

//*************************************************

файл AND4.VHD

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity AND4 is

Port ( i1,i2,i3,i4 : in STD_LOGIC;

y : out STD_LOGIC);

end AND4;

architecture Beh of AND4 is

begin

y<= i1 and i2 and i3 and i4 after 10ns;

end Beh;

  1. На втором этапе следует объединить все составные элементы схемы.

Для этого требуется пронумеровать внутренние соединения и составные блоки.

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

Файл main.vhd

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity main is

Port ( A0,A1,A2,A3 : in STD_LOGIC;

B0,B1,B2,B3 : in STD_LOGIC;

EQ : out STD_LOGIC);

end main;

architecture Struct of main is

--//внешний интерфейс составных компонент схемы

COMPONENT NXOR2

PORT(

i1,i2 : IN std_logic;

y : OUT std_logic

);

END COMPONENT;

COMPONENT AND4

PORT(

i1,i2,i3,i4 : IN std_logic;

y : OUT std_logic

);

END COMPONENT;

signal s0,s1,s2,s3 : STD_LOGIC;

begin

--соединение блоков

u0: NXOR2 PORT MAP(i1 =>A0 ,i2 =>B0 ,y => s0 );

u1: NXOR2 PORT MAP(i1 =>A1 ,i2 =>B1 ,y => s1 );

u2: NXOR2 PORT MAP(i1 =>A2 ,i2 =>B2 ,y => s2 );

u3: NXOR2 PORT MAP(i1 =>A3 ,i2 =>B3 ,y => s3 );

u4: AND4 PORT MAP(i1 => s0,i2 => s1,i3 =>s2 ,i4 => s3,y => EQ);

end Struct;

Достоинства структурного стиля описания:

отдельный блок можно описать в файле после чего его повторно использовать в новых проектах. Данный подход оправдан для сложных цифровых блоков (например процессорного ядра).

Недостаток структурного стиля описания:

Большая громоздкость кода по сравнению с поведенческим стилем.

Пример реализации на Verilog:

Файл nxor2.v

`timescale 1ns / 1ps

module nxor2(

input i1,

input i2,

output y

);

assign #20 y= i1 ~^ i2;

endmodule

Файл nand4.v

`timescale 1ns / 1ps

module and4(

input i1,

input i2,

input i3,

input i4,

output y

);

assign #10 y= i1 & i2 & i3 & i4;

endmodule

Файл Мain.v

`timescale 1ns / 1ps

module main(

input A0,

input A1,

input A2,

input A3,

input B0,

input B1,

input B2,

input B3,

output EQ );

wire s0,s1,s2,s3;

nxor2 u0(

.i1(A0),

.i2(B0),

.y(s0));

nxor2 u1(

.i1(A1),

.i2(B1),

.y(s1));

nxor2 u2(

.i1(A2),

.i2(B2),

.y(s2));

nxor2 u3(

.i1(A3),

.i2(B3),

.y(s3));

and4 u4(

.i1(s0),

.i2(s1),

.i3(s2),

.i4(s3),

.y(EQ));

endmodule

10

Соседние файлы в папке Lek2013