Document 173437

advertisement
Московский ордена Ленина, ордена Октябрьской Революции
и ордена Трудового Красного Знамени.
ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им. Н. Э. БАУМАНА
Факультет: Информатики и систем управления
Кафедра: Проектирование и технология производства электронной аппаратуры (ИУ4)
______________________________________________________________________________
Контрольное задание
Двоично-десятичный 3-х разрядный сумматор
По курсу:
Схемотехника ЭВС, комплексы и сети
Студент: Прилепский Р.А.
(фамилия, инициалы)
Руководитель:
дата сдачи
ИУ4-103
(индекс группы)
Шпиев В.А.
(фамилия, инициалы)
отметка о защите
Москва
2012
1.Задача:
Разработать двоично-десятичный 3-х разрядный сумматор. Привести ВД.
2. Принципы построения двоично-десятичного сумматора
На вход схемы подаются два трехзначных числа (к примеру, 167 и 353)
в двоично-десятичном виде (0001 0110 0111 и 0011 0101 0011,
соответственно), а на выходе схемы должна формироваться сумма этих двух
чисел (167+353=520), так же в двоично-десятичном виде (0101 0010 0000).
3 Реализация проекта при помощи графического редактора схем.
Схема для суммирования двух однознаковых чисел (от 0 до 9) показана
на рисунке 3.1. Схема электрическая принципиальная была реализована в
графическом редакторе ISE (version 13.3).
Рисунок 3.1 – Схема сумматора в графической среде САПР
Для суммирования двух трёхзначных чисел схема была расширена и
представлена на рисунке 3.2 .
2
Рисунок 3.2 - Схема двоично-десятичного 3-х разрядного сумматора в
графической среде САПР
4 Схемотехническое описание собранной схемы.
Схема работает следующим образом. На вход первого сумматора
поступает два 3-х разрядных числа. На первом каскаде сумматора
происходит сложение младших разрядов числа (единиц) и формирование
переноса, который подается на следующий каскад и учитывается при
сложении средних разрядов числа (десятков). На втором каскаде также
3
формируется сигнал переноса, который учитывается при сложении сотен.
Если результирующая сумма превышает 999 то формируется сигнал Th,
который символизирует тысячный разряд. К примеру, на вход схемы
подаются два трехзначных числа 167 и 353 в двоично-десятичном виде (0001
0110 0111 и 0011 0101 0011, соответственно), то на выходе схемы
формируется сумма этих двух чисел (167+353=520), так же в двоичнодесятичном виде (0101 0010 0000).
5 Моделирование собранной схемы.
Для моделирования собранной схемы нужно создать так называемый
испытательный стенд, или TestBench, суть которого в том, что он будет
подавать на блок, который мы создали путём использования графического
редактора или кода VHDL, определенные сигналы, позволяющие проверить
его работу посредством анализа получающихся временных диаграмм.
Листинг тестовой программы представлен ниже:
Листинг 5.1.
-- Vhdl test bench created from schematic C:\Xilinx\Xilinx_project\KZ\KZ.sch - Thu
May 10 23:34:14 2012
--- Notes:
-- 1) This testbench template has been automatically generated using types
-- std_logic and std_logic_vector for the ports of the unit under test.
-- Xilinx recommends that these types always be used for the top-level
-- I/O of a design in order to guarantee that the testbench will bind
-- correctly to the timing (post-route) simulation model.
-- 2) To use this template as your testbench, change the filename to any
-- name of your choice with the extension .vhd, and use the "Source->Add"
-- menu in Project Navigator to import the testbench. Then
-- edit the user defined section below, adding code to generate the
-- stimulus for your design.
-LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY KZ_KZ_sch_tb IS
END KZ_KZ_sch_tb;
ARCHITECTURE behavioral OF KZ_KZ_sch_tb IS
COMPONENT KZ
PORT(
A0
A1
:
A2
:
A3
B0
:
:
IN
IN
:
IN
IN
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
IN
STD_LOGIC;
STD_LOGIC;
4
B1
:
IN
STD_LOGIC;
B2
:
IN
STD_LOGIC;
B3
:
IN
STD_LOGIC;
S1_2
:
OUT STD_LOGIC;
S1_1
:
OUT STD_LOGIC;
S1_0
:
OUT STD_LOGIC;
Dec
:
OUT STD_LOGIC;
S1_3
:
OUT STD_LOGIC;
C0
:
IN
STD_LOGIC;
C1
:
IN
STD_LOGIC;
C2
:
IN
STD_LOGIC;
D0
:
IN
STD_LOGIC;
D1
:
IN
STD_LOGIC;
D2
:
IN
STD_LOGIC;
S2_2
:
OUT STD_LOGIC;
S2_1
:
OUT STD_LOGIC;
S2_0
:
OUT STD_LOGIC;
hun
:
OUT STD_LOGIC;
S2_3
:
OUT STD_LOGIC;
C3
:
IN
STD_LOGIC;
D3
:
IN
STD_LOGIC;
E0
:
IN
STD_LOGIC;
E1
:
IN
STD_LOGIC;
E2
:
IN
STD_LOGIC;
F0
:
IN
STD_LOGIC;
F1
:
IN
STD_LOGIC;
F2
:
IN
STD_LOGIC;
S3_2
:
OUT STD_LOGIC;
S3_1
:
OUT STD_LOGIC;
S3_0
:
OUT STD_LOGIC;
th :
OUT STD_LOGIC;
S3_3
:
OUT STD_LOGIC;
E3
:
IN
STD_LOGIC;
F3
:
IN
STD_LOGIC);
END COMPONENT;
SIGNAL A0
SIGNAL A1
SIGNAL A2
SIGNAL A3
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SIGNAL C0
SIGNAL C1
SIGNAL C2
SIGNAL C3
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SIGNAL E0
SIGNAL E1
SIGNAL E2
SIGNAL E3
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SIGNAL B0 :
SIGNAL B1 :
STD_LOGIC;
STD_LOGIC;
5
SIGNAL B2 :
SIGNAL B3 :
STD_LOGIC;
STD_LOGIC;
SIGNAL D0
SIGNAL D1
SIGNAL D2
SIGNAL D3
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SIGNAL F0
SIGNAL F1
SIGNAL F2
SIGNAL F3
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SIGNAL S1_0
SIGNAL S1_1
SIGNAL S1_2
SIGNAL S1_3
-- SIGNAL Dec
SIGNAL S2_0
SIGNAL S2_1
SIGNAL S2_2
SIGNAL S2_3
-- SIGNAL hun
SIGNAL S3_0
SIGNAL S3_1
SIGNAL S3_2
SIGNAL S3_3
SIGNAL th :
:
:
:
:
:
:
:
:
:
:
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
BEGIN
UUT: KZ PORT MAP(
A0 => A0,
A1 => A1,
A2 => A2,
B0 => B0,
B1 => B1,
B2 => B2,
S1_2 => S1_2,
S1_1 => S1_1,
S1_0 => S1_0,
-Dec => Dec,
S1_3 => S1_3,
A3 => A3,
B3 => B3,
C0 => C0,
C1 => C1,
C2 => C2,
D0 => D0,
D1 => D1,
D2 => D2,
6
S2_2 => S2_2,
S2_1 => S2_1,
S2_0 => S2_0,
hun => hun,
S2_3 => S2_3,
C3 => C3,
D3 => D3,
E0 => E0,
E1 => E1,
E2 => E2,
F0 => F0,
F1 => F1,
F2 => F2,
S3_2 => S3_2,
S3_1 => S3_1,
S3_0 => S3_0,
th => th,
S3_3 => S3_3,
E3 => E3,
F3 => F3
--
);
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
-- 0+0=0
-- Первое трёхзначное слогаемое
-- 000
A0<='0';
A1<='0';
A2<='0';
A3<='0';
C0<='0';
C1<='0';
C2<='0';
C3<='0';
E0<='0';
E1<='0';
E2<='0';
E3<='0';
-- Второе трёхзначное слогаемое
--000
B0<='0';
B1<='0';
B2<='0';
B3<='0';
D0<='0';
D1<='0';
D2<='0';
7
D3<='0';
F0<='0';
F1<='0';
F2<='0';
F3<='0';
wait for 10 ns;
-- 9+9=18
-- Первое трёхзначное слогаемое
--009
A0<='1';
A1<='0';
A2<='0';
A3<='1';
C0<='0';
C1<='0';
C2<='0';
C3<='0';
E0<='0';
E1<='0';
E2<='0';
E3<='0';
-- Второе трёхзначное слогаемое
--009
B0<='1';
B1<='0';
B2<='0';
B3<='1';
D0<='0';
D1<='0';
D2<='0';
D3<='0';
F0<='0';
F1<='0';
F2<='0';
F3<='0';
wait for 10 ns;
-- 21+43=64
-- Первое трёхзначное слогаемое
--021
A0<='1';
A1<='0';
A2<='0';
A3<='0';
8
C0<='0';
C1<='1';
C2<='0';
C3<='0';
E0<='0';
E1<='0';
E2<='0';
E3<='0';
-- Второе трёхзначное слогаемое
--043
B0<='1';
B1<='1';
B2<='0';
B3<='0';
D0<='0';
D1<='0';
D2<='1';
D3<='0';
F0<='0';
F1<='0';
F2<='0';
F3<='0';
wait for 10 ns;
-- 167+353=520
-- Первое трёхзначное слогаемое
-- 167
A0<='1';
A1<='1';
A2<='1';
A3<='0';
C0<='0';
C1<='1';
C2<='1';
C3<='0';
E0<='1';
E1<='0';
E2<='0';
E3<='0';
-- Второе трёхзначное слогаемое
--353
B0<='1';
B1<='1';
B2<='0';
9
B3<='0';
D0<='1';
D1<='0';
D2<='1';
D3<='0';
F0<='1';
F1<='1';
F2<='0';
F3<='0';
wait for 10 ns;
-- 999+999=1998
-- Первое трёхзначное слогаемое
-- 999
A0<='1';
A1<='0';
A2<='0';
A3<='1';
C0<='1';
C1<='0';
C2<='0';
C3<='1';
E0<='1';
E1<='0';
E2<='0';
E3<='1';
-- Второе трёхзначное слогаемое
-- 999
B0<='1';
B1<='0';
B2<='0';
B3<='1';
D0<='1';
D1<='0';
D2<='0';
D3<='1';
F0<='1';
F1<='0';
F2<='0';
F3<='1';
WAIT; -- will wait forever
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
10
Теперь в окне Simulations выбираем значение Behavorial. Выбираем
наш файл main_scheme_tb в окне Hierarchy и в окне Procsesses дважды
щелкаем по надписи Behavioral Check Syntax и после по Simulate
Behavorial Model.
В результате этих действий загрузится среда ISim.
В результате моделирования получили временную диаграмму, как на
рисунке 5.1, из которой ясно видно работу нашего проекта.
Рисунок 5.1 – Временная диаграмма работы собранного сумматора
(общий вид)
Исходя из файла тестовых воздействий в первый момент времени на
сумматора подаются числа 0 и 0 (А=0000 С=0000 E=0000 и В=0000 D=0000
F=0000) на выходе получается число 0000 (S1=0000 S2=0000 S3=0000 и
Th=0).
11
В следующий момент времени на сумматора подаются числа 9 и 9
(А=1001 С=0000 E=0000 и В=1001 D=0000 F=0000) на выходе получается
число 18 (S1=1001 S2=0001 S3=0000 и Th=0, т.е. 18). Моделирование данной
комбинации показано на рисунке 5.2.
Рисунок 5.2 – Временная диаграмма работы собранного сумматора
(9+9=18)
12
В следующий момент времени на сумматора подаются числа 21 и 43
(А=0001 С=0010 E=0000 и В=0011 D=0100 F=0000) на выходе получается
число 64 (S1=0100 S2=0110 S3=0000 и Th=0, т.е. 64). Моделирование данной
комбинации показано на рисунке 5.3.
Рисунок 5.3 – Временная диаграмма работы собранного сумматора
(21+43=64)
В следующий момент времени на сумматора подаются числа 167 и 353
(А=0111 С=0100 E=0001 и В=0011 D=0101 F=0011) на выходе получается
число 520 (S1=0000 S2=0010 S3=0101 и Th=0, т.е. 520). Моделирование
данной комбинации показано на рисунке 5.4.
13
Рисунок 5.4 – Временная диаграмма работы собранного сумматора
(167+353=520)
В следующий момент времени на сумматора подаются максимально
возможные входные числа 999 и 999
(А=1001 С=1001 E=1001 и В=1001
D=1001 F=1001) на выходе получается число 1998 (S1=1000 S2=1001
S3=1001 и Th=1, т.е. 1998). Моделирование данной комбинации показано на
рисунке 5.5.
14
Рисунок 5.5 – Временная диаграмма работы собранного сумматора
(999+999=1998)
Выводы
Из временной диаграммы, полученной в результате моделирования
схемы main_scheme можно сделать вывод, что собранная схема двоичнодесятичного сумматора работает корректно.
15
Download