Проектирование вычислителя y=tan(x)
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ХАРЬКОВСКИЙ
НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ
Кафедра
АПВТ
Пояснительная
записка к курсовой работе
«Проектирование
вычислителя y=tan(x)»
по
курсу «Специализированные компьютерные системы»
Выполнил: ст. гр.
КИ-07-8 Евтифеев А. Г.
Проверил: Обризан
В. И
Харьков
2011
Оглавление
РЕФЕРАТ
ВВЕДЕНИЕ
.
Постановка задачи
.1Обобщенная
структура специализированного вычислителя
.2
Численный метод
.3Характеристика
функции y=tan(x)
.4
Специализированный вычислитель y=tan(x)
.5
Описания языкаVHDL
.6
Кристалл Xilinx Spartan
.6.1
Характеристика платы Spartan-3E
.Выбранный
вариант технического решения
.1
Техническое решение
.2
C++ реализация
.3
Граф-схема алгоритма
.
Граф-схема алгоритма для реализации программы на VHDL
.
Модель на языке VHDL
.1
Временная диаграмма работы вычислителя
.2
RTL-схема проекта
Выводы
Список
литературы
ПРИЛОЖЕНИЕ
А.
Программная реализация функции y=tan(x) на языке С++
Б.
Программная реализация функции y=tan(x) на языке VHDL
РЕФЕРАТ
Цель работы - проектирование вычислителя
y=tan(x), а также освоение методов автоматизированного проектирования и
совершенствование навыков программирования на языке VHDL.
В работе использовалась отладочная плата серии
Spartan-3E Starter Kit имеющей возможности цифровой обработки сигналов. ЦАП не
входит в состав ПЛИС и вынесен отдельно, его входы подключены к порту B.
В ходе проектирования были использованы не все
ресурсы ПЛИС, поэтому имеется возможность совершенствования устройства. К
примеру, можно построить алгоритм цифровой обработки нескольких вычислителей,
используя для каждого сигнала свой канал “блок” и программу вычислений.
Программа, написанная на языке VHDL, является
универсальной для всех ПЛИС фирмы Xilinx. Необходимо лишь сконфигурировать порты
и учесть спецификацию специальных регистров в соответствии с документацией на
требуемую модель.
Благодаря современным технологиям разработчик
арифметических устройств может в кратчайшие сроки составлять
высокопроизводительные вычислительные системы с дальнейшим доведением их до
производства и внедрения в различных учреждениях.
Наличие большого выбора недорогих
высокопроизводительных демонстрационных плат зарубежного производства на рынке
Украины позволяет студенту и проектировщику реализовывать свои схемы и
алгоритмы в виде технически готового устройства.
ВВЕДЕНИЕ
Специализированные вычислительные устройства
решают различные математические операции с последующей цифровой обработкой
значений.
Реализация вычислителя на ПЛИС - это
арифметическая реализация математической задачи на плате в реальном масштабе
времени.
В случае цифровой обработки различные алгоритмы
вычислений могут реализовываться аппаратно, программно и программно-аппаратно.
Основной принцип замены аппаратных средств
программными заключается в том, что программы, реализуемые микропроцессорной
системой, могут заменить аппаратные средства, которые воспринимают, хранят,
обрабатывают и выдают цифровую информацию. Аппаратные и программные средства
оказываются взаимозаменяемыми и соотношения между ними определяются, главным
образом, экономическими факторами.
Аппаратная реализация труднее поддается
модификации, а программная - отличается гибкостью. Самое существенное
ограничение замены аппаратных средств программными - это быстродействие. Производительность
специализированного устройства, выполняющего некоторую функцию, всегда выше
производительности устройств, реализующих ту же функцию программно.
В настоящее время реализация специализированных
вычислителей, обеспечивающих выполнение заданного алгоритма за отрезок времени,
исчисляемый долями и единицами микросекунд, возможна лишь на устройствах с
жесткой или программируемой логикой.
В этом случае эффективный подход к обеспечению
обработки в реальном масштабе времени - это создание специализированных средств
вычисления на основе БИС и СБИС. В настоящее время появились специализированные
микросхемы сложения, вычитания, умножения и деления многоразрядных чисел,
представленных в различных форматах.
В данном курсовом проекте вычислитель y=tan(x)
реализован программно на языке Си++ и аппаратно с помощью языка описания
аппаратуры VHDL на плате XilinxSpartan3E.
1. Постановка задачи
.1 Обобщенная структура специализированного
вычислителя
В состав специализированного вычислителя входят
управляющий автомат(УА) и операционный автомат(ОА). Данная структурная схема
показана на рис. 1.
Рис. 1 Структурная схема вычислителя
Управляющий автомат построен в виде
программируемого устройства, а операционный автомат реализует заданный
пользователем алгоритм обработки вычисления тангенс числа.
Очевидно, что качество выполнения, заданного
алгоритма вычисления тангенса числа, всецело определяется преобразованием
десятичных значений в двоичные и наоборот, а также точными характеристиками
всех трех устройств, входящих в специализированный вычислитель.
При этом количество операций ввода-вывода мало
по сравнению с количеством арифметических и логических операций. По этой
причине основная нагрузка ложится на операционный автомат.
.2 Численный метод
Среди этапов вычислительного эксперимента
выделяют этап решения математической задачи с помощью численного метода. Под
численным методом понимается такая интерпретация математической модели
(дискретная модель), которая доступна для реализации на ЭВМ и сводится к
выполнению конечного числа арифметических действий над числами. Этапы
численного метода представлены на рис. 2[123]
Рис.2 Этапы вычислительного
эксперимента
Общим для всех численных методов
является:
сведение математической задачи к
конечномерной (чаще всего путем дискретизации исходной математической модели);
Результатом реализации численного
метода является число или таблица чисел;
Реализуемость численного метода,
т.е. построение вычислительного алгоритма как последовательности конечного
числа операций для получения результата и ориентация этого алгоритма на
возможности ЭВМ;
Множественность, т.е. возможность
решения одной и той же задачи различными методами;
Непрерывное развитие и
совершенствование численных методов;
При использовании численного метода
для решения поставленной задачи необходимо различать свойства самой задачи и
свойства вычислительного алгоритма, предназначенного для ее решения. Как
правило, для каждой математической задачи, прежде всего, принято рассматривать
вопрос о ее корректности. Чтобы численно решить задачу y=tan(x), надо быть
уверенным, что искомое решение существует. Решение зависит от входных данных,
потому рассмотрим характеристики функции y=tan(x)
1.3 Характеристика функции y=tan(x)
Рис. 3
График функции y=tan(x) Область определения функции - множество всех
действительных чисел, кроме Множество значений функции - вся
числовая прямая, т.е. тангенс - функция неограниченная. Функция нечетная: tan(−x)=−tan(x)
для всех х из области определения. График функции симметричен относительно оси
OY.
Функция
периодическая с наименьшим положительным периодом π, т.е. tan(x+π·k) = tan
x, k ∈ Z для всех
х из области определения.
.4 Специализированный вычислитель y=tan(x)
Вычисление специализированного вычислителя
y=tan(x) основано на разложении ряда Тейлора с использованием чисел Бернулли. В
данном алгоритме вычисления преимуществом является точность вычислений в
заданном интервале значений.
Ряд Те́йлора -
разложение функции
<#"576912.files/image009.gif">
Числа Бернулли находят по формуле:
, для всех |x| <, где B2n -
четные Числа Бернулли
.5 Описания языка VHDL
Язык VHDL (англ.
<#"576912.files/image013.gif">Рис.4.Цифровое устройство и его
модель
Как и в языках программирования,
язык VHDL имеет свои правила, в том числе правила описания имен переменных,
объектов, типов данных и других параметров.
Правила языка VHDL регулируются
международным стандартом IEEE Std 1076-2002 IEEE Standard VHDL Language
Reference Manual. Ему соответствует отечественный стандарт ГОСТ Р 50754-95 Язык
описания аппаратуры цифровых систем VНDL.
1.6 Кристалл Xilinx Spartan
- серия программируемых микросхем с встроенной
RAM фирмы Xilinx. Она в себя включает несколько разновидностей:
Семейство Spartan
<#"576912.files/image014.gif">
Рис. 3 - Внешний вид платы
XilinxSpartan-3E [ ]
блок загрузки конфигурационных
данных;
схема управления конфигурированием
ПЛИС;
вспомогательная ПЛИС CPLDXC2C64A
семейства CoolRunner-2;
последовательное ППЗУ EEPRPOM,
поддерживающее криптографический алгоритм SHA-1;
блок синхронизации, предназначенный
для формирования внешних (по отношению к ПЛИС) тактовых сигналов;
внешнее высокоскоростное ОЗУ;
узел двухканального
аналого-цифрового преобразователя (АЦП);
узел четырехканального
цифро-аналогового преобразователя (ЦАП);
модуль параллельной NORFlash-памяти
емкостью 16Мбайт (128 Мбит)
Рис.4 Структурное представление архитектурного
модуля XilinxSpartan-3E
модуль последовательной Flash-памяти объемом 16
Мбит с интерфейсом SPI;
схем формирования и контроля питающих
напряжений;
блок светодиодных индикаторов;
двухстрочный шестнадцатизначный
жидкокристаллический дисплей;
блок ползунковых переключателей;
блок кнопочных переключателей, с совмещенным
поворотным переключателем;
схема преобразования уровней сигналов интерфейса
RS-232;
модуль физического уровня интерфейса10/100
Ethernet PHY;
стандартные разъемы интерфейсов RS-232,PS/2, VGA
и Ethernet;
четыре разъема расширения.
Тип кристалла семейства Spartan-3E,
используемого в качестве основной ПЛИС рассматриваемого инструментального
модуля, в значительной степени определяет функциональные возможности
последнего.
Стартовый набор на базе ПЛИС Spartan-3E
представляет собой полнофункциональное решение, с помощью которого разработчики
получают доступ ко всем возможностям семейства Spartan-3E. Набор включает в
себя плату, источник питания, программное обеспечение и USB-кабель.
Основные характеристики Spartan-3E.
Используемые микросхемы Xilinx:
XC3S500E-4FG320C
Spartan-3EC64A-5VQ44C CoolRunner-II
ППЗУ
PlatformFlash XCF04S-VO20C
Синхронизация:
50МГц кварцевый генератор синхроимпульсов
Память на плате:
128 MbitParallelFlash
Mbit SPI Flash
MByte DDR SDRAM
Коннекторы, интерфейсы и периферия:
порт Ethernet 10/100 Phyвидео выход DB15USB-порт
два последовательных порта RS-232 на 9
контактов/2
х канальный ЦАП
х канальный АЦП
двустрочный ЖК индикатор
тумблеры, кнопки, переключатели, светодиоды,
дополнительные коннекторы
. Выбранный вариант технического решения
.1 Техническое решение
Вычисление y=tan(x)с помощью ряда Тейлора.
Вычисление y=tan(x) сводится к
вычислению элементов ряда Тейлора и значение tan(x) вычисляется с большей
точность при вычислении большего количества значений ряда Тейлора:
Первая итерация
Вторая итерация
;
Третья итерация
Четвертая итерация
Шестая итерация
Седьмая итерация
Восьмая итерация
Девятая итерация
Десятая итерация
Одиннадцатая итерация
Двенадцатая итерация
.2 C++ реализация
С++ реализация вычисления y=tan(x) основана на
функции void main() и функции double tailor, а также на посчитанных значениях
элементов ряда Тейлора, где значения подсчитаны первые 12 значений с точностью
13 знаков после запятой. В функции void main() программа выводит приглашение ввести
значение x в интервале от -1.3 до 1.3. Точность значений зависит от самой
функции tan(x), в которой значения близкие к -1.3 или к 1.3 на графике начинают
уходить в вверх или вниз, практически приближаясь к асимптоте. Потом программа
на основе полученного значенияx, вносит его в функцию double tailor(x), где
подставляет значение x в ряд Тейлора, которое вычисляется в цикле, в котором,
при каждой итерации складываются вычисленные значения ряда Тейлора и умножаются
на соответствующее заданное пользователем значение x в степени, которая в 2
раза больше порядкового номера x в ряде Тейлора и от этого значения отнимаем 1.
Код программы вычисления tan(x) на языке С++
Подключение библиотек:
#include <iostream>
С помощью директивы препроцессора #include мы
можем подключить библиотеку, что нам и необходимо. В данной программе нам
потребуется выводить данные и вводить данные, для этого мы будем использовать
библиотеку “iostream”, которая является двунаправленной библиотекой
ввода/вывода и с помощью оператора “cin>>” - мы вводим данные в
программу, а с помощью оператора “cout<<” - выводим данные.
#include <conio.h>
С помощью библиотеки conio.h мы можем
использовать функцию getch(), которая выполняет функцию паузы после выполнения
программы.
#include “math.h”
С помощью библиотеки math.h мы можем
использовать математические библиотеки, что мы и делаем. namespace std;
Здесь мы подключаем пространство имен std, чтобы
могли использовать стандартные функции ввода и вывода информации без
постоянного обращения к пространству имен std.
int N=13;
Здесь происходит объявление константы N равной
13.znach[N]={
/*1*/1.0000000000000,
/*2*/0.3333333333333,
/*3*/0.1333333333333,
/*4*/0.0539682539682,
/*5*/0.0218694885361,
/*6*/0.0088632355299,
/*7*/0.0035921280365,
/*8*/0.0014558343837,
/*9*/0.0005900274409,
/*10*/0.0002391291142,
/*11*/0.0000969153795,
/*12*/0.0000392783238
};
Происходит объявление 12 элементов массива и с
помощью комментариев были пронумерованы.
double teylor(double x)
{result=0.0;Tx=x, kvx=x*x;(int
i=0;i<N;i++)
{+=znach[i] * Tx;*=kvx;
}
Объявлена функция teylor типа double, которая
выполняет суммирования умножение в цикле for первых 12 значений в ряде Тейлора
для определения значения тангенс. result;
Выполняется возвращение значений работы функции.
}
main()
Происходит объявление главной функции main().
{<<"Please input number
in the range of (-pi/2.4 to pi/2.4) or of (-1.3 to 1.3):";
Происходит приглашение ввести число, тангенс
которого необходимо найтиx;
Объявления вещественного значения x.>>x;
Происходит процесс запроса значения, тангенс
которого необходимо найти..precision(20);
Требование выводить значение с точностью до 20
знаков после запятой.
cout<<"Tan("<<x<<")="<<tan(x)<<"
My_function: "<<teylor(x)<<endl;
Процесс вывода значений();
Выполнение паузы.
}
.3 Граф-схема алгоритма
Для реализации программы используется
граф-схема, приведённая на рис. 5. Граф-схема алгоритма размечена для автомата
Мура, имеет три состояния: а0, а1, а2. Первое состояние а0 - это начало работы
программы и проверка выполнения изначальных условий; а1 - это второе состояние
программы, на котором проверяется условия; а2 - это третье состояние программы,
на котором выполняется сложение 12 первых значений ряда Тейлора и умножение
каждого значения на соответствующее значение x с заданной степенью и множителем
до выполнения условия цикла и постоянно проверяется не выполнены ли все
итерации.
Рис. 5 Граф-схема алгоритма
реализации программы на языке С++
На данной граф-схеме показана
последовательность проведения процедур и операций при реализации алгоритма
вычисления функции .
Основываясь на данной граф-схеме, можно также выделить этапы работы программы
на языке VHDL, что и было сделано и эти этапы были отмечены
3. Граф-схема алгоритма для реализации программы
на VHDL
Рис. 6 Граф переходов автомата Мура
На данном графе переходов видно, что
в автомате присутствует
состояния работы автомата и цикл с
условием i<N, где N -это количество итераций алгоритма. На всех стадиях
проекта проверяется условие i<N, если оно не выполняется, то выполнение
итерации заканчивается.
.1 Временная диаграмма работы вычислителя
На данной временной диаграмме (Рис.7) работы
программы на VHDL можно увидеть в какой момент времени происходит выполнение и
реализация элемента нашей платы, а также можно увидеть значения, которые он
принимает и как эти значения могут изменятся в процессе работы устройства,
влияя на работу других элементов устройства.
Рис.7 Waveform VHDL
.2 RTL-схема проекта
вычислитель функция программа
Схематическое представление входов и выходов
проекта представлено на Рис. 8
Рис. 8 RTL-схема проекта
Выводы
Для проектирования устройства вычислителя
тригонометрических функций, как правило, применяют численные методы.
Вычисление специализированного вычислителя
y=tan(x) основано на разложении ряда Тейлора с использованием чисел Бернулли.
Описания модели цифрового устройства вычислителя
проводят с помощью языка описания аппаратуры VHDL.
Реализацию проекта проводили на Spartan 3Е,
которая относится к серии программируемых микросхем с встроенной RAM фирмы
Xilinx.
Для реализации программы на языке С++ мы
использовали разработанную граф-схему алгоритма С++.
Представлено техническое решение программы с
подробным математическим решением и реализацией.
Для реализации проекта разработана граф-схема
алгоритма программы на VHDL.
Правильность работы программы была проверена на
Waveform в VHDL, RTL-схеме и подтверждена.
Список литературы
Кузелин
М.О., Кнышев Д.А., Зотов В.Ю. Современные семейства ПЛИС фирмы Xilinx:
Справочное пособие. М.: Горячая линия - Телеком. 2004.
Зотов
В. Разработка встраиваемых микропроцессорных систем на основе ядра Spartan,
реализуемых в ПЛИС семейств FPGA фирмы Xilinx, с помощью «мастера» Base System
Builder Wizard //Компоненты и технологии. 2005 №3,4
Зотов
В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР
WebPackISEМ.: Горячая линия - Телеком. 2003.
Зотов
В. Новый инструментальный комплект Spartan-3E Starter Kit для практического
освоения методов проектирования встраиваемых микропроцессорных систем на основе
ПЛИС семейства FPGA фирмы Xilinx
Зотов
В. Инструментальный комплект Spartan-3 StarterKit для практического освоения
методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС
семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005. № 7.
Кузелин
М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx.
Справочное пособие. М.: Горячая линия-Телеком. 2004.
Зотов
В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack
ISE. М.: Горячая линия-Телеком. 2003
Зотов
В. EmbeddedDevelopmentKit - система проектирования встраиваемых
микропроцессорных систем на основе ПЛИС серий FPGA фирмы Xilinx // Компоненты и
технологии. 2004. № 4.E FPGA Family: Complete
Data Sheet.КОМПОНЕНТЫ И
ТЕХНОЛОГИИ
• № 10 '2006
ПРИЛОЖЕНИЕ
А. Программная реализация функции y=tan(x) на
языке С++
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include "math.h"namespace
std;N=13;
double znach[N]={
/*1*/1.0000000000000,
/*2*/0.3333333333333,
/*3*/0.1333333333333,
/*4*/0.0539682539682,
/*5*/0.0218694885361,
/*6*/0.0088632355299,
/*7*/0.0035921280365,
/*8*/0.0014558343837,
/*9*/0.0005900274409,
/*10*/0.0002391291142,
/*11*/0.0000969153795,
/*12*/0.0000392783238
};
double teylor(double x)
{result=0.0;Tx=x,kvx=x*x;(int
i=0;i<N;i++)
{+=znach[i] * Tx;*=kvx;
}result;
}
void main()
{<<"Please input number
in the range of (-pi/2.4 to pi/2.4) or of (-1.3 to
1.3):";x;>>x;.precision(20);<<"Tan("<<x<<")="<<tan(x)<<"
My_function: "<<teylor(x)<<endl;
getch();
}
Б. Программная реализация функции y=tan(x) на
языке VHDL
Library ieee;ieee.std_logic_1164.all;.std_logic_arith.all;.std_logic_signed.all;
tan is(: in STD_LOGIC_VECTOR(31
downto 0);: in STD_LOGIC;: in STD_LOGIC;: in STD_LOGIC;: out
STD_LOGIC_VECTOR(31 downto 0);: out STD_LOGIC);;
beh of tan is
N : positive := 12;
state_type is (a_0, a_1, a_2);
state, next_state: state_type;
_array isarray (0 to N-1) of
STD_LOGIC_VECTOR (31 downto 0);
: my_array :=
(
"00001000000000000000000000000000",
"00000010101010101010101010101010",
"00000001000100010001000100010001",
"00000000011011101000011011101000",
"00000000000100100010011011100011",
"00000000000001110101101101001111",
"00000000000000101111101101000110",
"00000000000000010011010101011000",
"00000000000000000111110101011111",
"00000000000000000011001011001111",
"00000000000000000001010010010111"
);result, kvx, tx :
STD_LOGIC_VECTOR(31 downto 0);i : natural;
<= result;
(reset, clock)reset = '1' then<=
a_0;rising_edge(clock) then<= next_state;if;if;process;
(state, start, i)(state) isa_0
=>(start = '1') then_state<= a_1;_state<= a_0;if;a_1 =>i < N
then_state<= a_2;_state<= a_0;if;a_2 =>i < N then_state<=
a_2;_state<= a_0; if;others =>_state<= a_0;case;process;
<= '1' whenstate = a_0 else '0';
(clock, reset, state)temp : STD_LOGIC_VECTOR(63
downto 0);reset = '1' then<= (others=>'0');<= (others=>'0');<=
(others=>'0');<= 0;falling_edge(clock) then(state)isa_1 =><=
(others => '0');
temp := x * x;<= temp(58 downto
27);<= x;<= 0;a_2 =>:= constants(i) * tx;<= result + temp(58 downto
27);:= tx * kvx;<= temp(58 downto 27);<= i + 1;others =>;case;if;if;
end process;
end;