Музыкальный синтезатор
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 5
1 ОБЗОР СОСТОЯНИЯ ВОПРОСА 7
2 ВЫБОР АППАРАТНЫХ СРЕДСТВ 8
3 ПРОГРАММИРОВАНИЕ
И ОПИСАНИЕ АППАРАТНО-
3.1 Структура комплекса 9
3.2 Описание модулей и их реализация 10
4 ТЕСТИРОВАНИЕ 16
ЗАКЛЮЧЕНИЕ 19
СПИСОК ЛИТЕРАТУРЫ 20
ПРИЛОЖЕНИЕ А 21
ВВЕДЕНИЕ
Современный этап развития цифровой техники характеризуется широким
применением программно-аппаратных комплексов, которые строятся по принципу «система на кристалле». При этом в качестве элементной базы для реализации таких систем все чаще используются программируемые логические интегральные схемы (ПЛИС)
ПЛИС позволяют реализовать
в своем составе практически
любое цифровое устройство от простейших
триггеров до цифровых фильтров. процессоров,
контроллеров и синтезаторов. Микросхемы
ПЛИС хороши тем, что позволяют
В настоящее время наиболее распространенные серии ПЛИС имеют
следующую архитектуру:
- CPLB (Complex Programmable Logic Device), устройства, использующие для хранения конфигурации энергонезависимую память;
- FPGA (Field Programmable Gate Array), устройства, использующие для хранения конфигурации энергозависимую память, которая требует инициализации после включения питания .
ПЛИС CPLD относятся к устройствам начального уровня и предназначены для реализации устройств небольшого логического объема.
По сравнению с архитектурой CPLD, ПЛИС FPGA содержат намного большее число меньших по размерам отдельных логических блоков и имеют развитую распределенную структуру внутренних соединений, которая занимает почти весь кристалл . Помимо большего объема логических ресурсов, современные ПЛИС FPGA отличаются наличием аппаратно выделенных ресурсов для решения типичных задач цифровой обработки сигналов и используются для построения более сложных устройств.
Целью курсовой работы является разработать проект “Музыкальный синтезатор” используя ПЛИС фирмы Xilinx в среде проектирования XilinxISE.
Для программирования логики
работы синтезатора использовался
язык VHDL ((Very high speed integrated circuits) Hardware Description
Язык VHDL - это международный стандарт в области автоматизации проектирования цифровых систем.Средствами языка VHDL возможно проектирование на различных уровнях абстракции (поведенческом или алгоритмическом, регистровых передач, структурном), в соответствии с техническим заданием и предпочтениями разработчика. Заложена возможность иерархического проектирования, максимально реализующая себя в экстремально больших проектах с участием большой группы разработчиков. Представляется возможным выделить следующие три составные части языка: алгоритмическую — основанную на языках Ada и Pascal и придающую языку VHDL свойства языков программирования; проблемно ориентированную — в сущности и обращающую VHDL в язык описания аппаратуры; и объектно-ориентированную, интенсивно развиваемую в последнее время.
VHDL является входным языком многих современных систем автоматизированного проектирования (САПР), программируемых логических интегральных схем.VHDL предназначен для точного описания проектируемых систем и их моделирования на начальных этапах проектирования.
1 ОБЗОР СОСТОЯНИЯ ВОПРОСА
Музыкальный синтезатор — музыкальный
инструмент синтезирующий звук при помощи одного или нескольких генераторов звуковы
Выход звукового сигнала достигается за счёт изменения свойств электрического сигнала (в аналоговых синтезаторах) или же методом настройки параметров центрального процессора (в цифровых синтезаторах). Синтезатор, выполненный в виде корпуса с клавиатурой, называется клавишным синтезатором. В случае, если клавишный синтезатор оборудован встроенным секвенсором, он называется рабочей станцией. Синтезатор в виде компьютерной программы, использующей универсальную звуковую плату для озвучивания и стандартные средства ввода-вывода (компьютерные клавиатуру, мышь, монитор, а также, возможно, MIDI-клавиатуру), называется программным синтезатором.
В ходе курсового проекта был разработан простейший музыкальный синтезатор оборудованный семью входами, каждый из который соответствует определенной ноте и одним выходом который подключен к динамику.
Принцип работы данного пешеходного перехода достаточно прост. При нажатии на клавишу генерируется частота соответствующей музыкальной ноте, сигнал на выходе поступает динамику с помощью которого можно прослушать нашу ноту.
Целью курсового проекта является разработка АПВС для осуществления работы музыкального синтезатора.
Исходные данные проекта:
- при нажатии на клавишу генерируется сигнал с частотой соответствующей музыкальной ноте;
- частота тактового сигнала 1 МГц.
2 ВЫБОР АППАРАТНЫХ СРЕДСТВ
Для реализации поставленной задачи была выбрана ПЛИС EPM1270F256I5N семейства MAX® II CPLDs. ПЛИС серии MAX® II содержат от 240 до 2210 логических элементов и от 128 до 2210 макроэлементов, а также имеют энергонезависимую память с минимальным объемом 8Кбит. Устройства серии MAX® II обеспечивают высокую производительность и надежную работу в сравнении с другими архитектурами CPLD.
Основой CPLD является матрица макроячеек, в которой реализованы логические соединения вентилей или более сложные логические операции. Блоки макроячеек объединены программируемой коммутационной матрицей с последующим выходом на входы (выходы) схемы.
Особенности:
- Низкая стоимость,CPLD малой мощности;
- Мгновенное действие,энергонезависимая архитектура;
- Ток в режиме ожидания до 25мкА;
- Быстрая задержка распространения;
- UFM блок до 8Кбит для долговременного хранения данных;
- Мультивольтовое ядро, позволяющее питать устройство от 3.3V/2.5V или 1.8V;
- поддержка мультивольтового интерфейса ввода/вывода рассчитанного на логические уровни 3.3V, 2.5V, 1.8V и 1.5V;
- Триггеры Шмитта позволяют ограничить уровень входного шума;
- Входы/выходы полностью соответствуют периферийным компонентам;
- ISP схема соответствует стандарту IEEE Std. 1532.
В таблице 1 приведены основные характеристики ПЛИС EPM1270F256I5N.
|
Наименование |
Тип памяти |
Частота |
Число макроячеек |
Число вводов/ выводов |
Количество логических блоков/ элементов |
EPM1270F256I5N |
FLASH |
1.8797GHz |
980 |
212 |
1270 |
Таблица 1 – Основные характеристики ПЛИС EPM1270F256I5N.
3 ПРОГРАММИРОВАНИЕ
И ОПИСАНИЕ АППАРАТНО- ПРОГРАММНОГО
КОМПЛЕКСА
3.1 Структура комплекса
Созданный проект состоит из четырех модулей, как показано на рисунке 3.1:
- Main.vhd — главный модуль;
- CLK_1MGz.vhd — модуль тактового генератора;
- Music.vhd — модуль синтеза нот;
- test.vhd— тестовый модуль.
Рисунок 3.1– Модули проекта
Упрощенная структурная схема разработанной системы представлена на рисунке 3.2.
Рисунок 3.2 – Упрощенная структурная схема
3.2 Описание модулей и их реализация
Главным модулем приложения является Main. Описание объекта моделирования:
entity Main is
PORT ( clk_cnt, button_do, button_re, button_mi, button_fa, button_sol, button_lia, button_si : in STD_LOGIC;
dinamik: out STD_LOGIC );
end Main;
Назначение сигналов:
- clk_cnt – тактовый сигнал;
- button_do –кнопка синтеза ноты до;
- button_re – кнопка синтеза ноты ре;
- button_mi – кнопка синтеза ноты ми;
- button_fa – кнопка синтеза ноты фа;
- button_sol – кнопка синтеза ноты соль;
- button_lia – кнопка синтеза ноты ля;
- button_si – кнопка синтеза ноты си;
- dinamik – динамик для воспроизведения звука.
Далее идет описание модуля Music в котором происходит синтез всех нот.
Процесс смены нажатии кнопки ноты:
architecture Behavioral of Music is
begin
proc_state: process (clk_cnt,button_do, button_re, button_mi, button_fa, button_sol, button_lia, button_si)
variable count_Gz : integer range 0 to 3832;
begin
if (clk_cnt'event and clk_cnt='1' ) then
if (button_do='1') then
count_Gz := count_Gz + 1;
if (count_Gz<3850) then
dinamik <= '0';
end if;
if (count_Gz>=3850) then
dinamik <= '1';
if (count_Gz>5775) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_re='1') then
count_Gz := count_Gz + 1;
if (count_Gz<3412) then
dinamik <= '0';
end if;
if (count_Gz>=3412) then
dinamik <= '1';
if(count_Gz>5518) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if (button_mi='1') then
count_Gz := count_Gz + 1;
if (count_Gz<3039) then
dinamik <= '0';
end if;
if (count_Gz>=3039) then
dinamik <= '1';
if(count_Gz>4558) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_fa='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2865) then
dinamik <= '0';
end if;
if (count_Gz>=2865) then
dinamik <= '1';
if(count_Gz>4297) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_sol='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2551) then
dinamik <= '0';
end if;
if (count_Gz>=2551) then
dinamik <= '1';
if(count_Gz>3826) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_lia='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2272) then
dinamik <= '0';
end if;
if (count_Gz>=2272) then
dinamik <= '1';
if(count_Gz>3404) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_si='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2028) then
dinamik <= '0';
end if;
if (count_Gz>=2028) then
dinamik <= '1';
if(count_Gz>3042) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
end if;
end process;
В модуле CLK_1MGz создается тактовый генератор с частотой 1МГц:
architecture Behavioral of CLK_1MGz is
begin
process(clk)
variable cnt: integer range 0 to 1000;
begin
if (clk 'event and clk='1') then
if(cnt>=500) then
clk_out<='1';
else
clk_out<='0';
end if;
if(cnt=1000) then
cnt:=0;
else
cnt:=cnt+1;
end if;
end if;
end process;
Тестовый модуль — Test. Сначала декларируется тестируемый компонент:
COMPONENT Main
PORT(
clk_cnt : IN std_logic;
button_do : IN std_logic;
button_re : IN std_logic;
button_mi : IN std_logic;
button_fa : IN std_logic;
button_sol : IN std_logic;
button_lia : IN std_logic;
button_si : IN std_logic;
dinamik : OUT std_logic );
END COMPONENT;
После чего устанавливаем связи данного компонента с сигналами объекта:
uut: Main PORT MAP (
clk_cnt => clk_cnt,
button_do => button_do,
button_re => button_re,
button_mi => button_mi,
button_fa => button_fa,
button_sol => button_sol,
button_lia => button_lia,
button_si => button_si,
dinamik => dinamik );
Далее идет описани епроцессов:
Процесс подающий тактовый сигнал:
clk_cnt_process :process
begin
clk_cnt <= '0';
wait for clk_cnt_period/2;
clk_cnt <= '1';
wait for clk_cnt_period/2;
end process;
Процесс симулирующий нажатие кнопки синтезатора:
stim_proc: process
begin
wait for 10 ms;
button_do<='1';
wait for 50 ms;
button_do<='0';
wait for 10 ms;
button_si<='1';
wait for 50 ms;
button_si<='0';
wait for 10 ms;
button_mi<='1';
wait for 50 ms;
button_mi<='0';
wait for 10 ms;
button_sol<='1';
wait for 50 ms;
button_sol<='0';
wait;
end process;
4 ТЕСТИРОВАНИЕ
Для выявления ошибок было проведено тестирование на компьютере со следующей конфигурацией:
Intel CoreDuo CPU T6400 2.0 GHz, ОС Windows 7 x64.
Для моделирования работы
системы использовался
Рисунок 4.1 – Временная диаграмма
Опишем действия, показанные на временной диаграмме.
В тестовом модуле задаётся тактовая частота (1МГц). Запуск тактового генератора показан на рисунке 4.2.
Рисунок 4.2 – Запуск тактового генератора
Симулируем нажатие кнопки, как показано на рисунке 4.3
Рисунок 4.3 – Нажатие кнопки
Выполняется подача сигнала на динамик, как показано на рисунке 4.4.
Рисунок 4.4 – Подача сигнала на динамик
Выполняется смена нажатии клавиши с ноты до на си, как показано на рисунке 4.5.
Рисунок 4.5 – Смена сигналов
После нажатия кнопки си, генерируется сигнал на динамик, как показано на рисунке 4.6
Рисунок 4.6 – Генерация сигнала на динамике
В ходе полного тестирования никаких ошибок выявлено не было. Все ожидаемые результаты подтвердились.
Разработанное приложение успешно прошло тестирование и полностью готово для эксплуатации.
ЗАКЛЮЧЕНИЕ
Результатом выполненного курсового проекта является система «Музыкальный синтезатор».
Выполнение данного курсового проекта способствовало получению практических навыков в технологии разработки аппаратно-программных вычислительных систем, а также был приобретен опыт работы с языком программирования VHDL и средой разработки IntegratedSynthesisEnvironment (ISE).
Данная система
пригодна в использования для любого музыкального
синтезатора, который будет построен с
использованием соответствующей микросхемы.
Данная система не нуждается в кардинальном
изменении логики, единственным ее недостатком
является отсутствия одновременного нажатия
двух или более клавиш, что только тогда
повлечет в изменение логики программы.
СПИСОК ЛИТЕРАТУРЫ
1) Бибило Пётр Николаевич. Основы языка VHDL. Изд. 3-е, доп. – М.: Издательство ЛКИ, 2007. – 328с.
2) Максфилд К. Проектирование на ПЛИС. Курс молодого бойца. – М.: Издательский дом «Дзюдека-ХХ» , 2007. – 408с.
3) Сергиенко А. М. VHDL для проектирования вычислительных устройств, К.: ЧП «Корнейчук», ООО «ТИД «ДС»», 2003. – 208 с.
4) Интернет ресурс [http://www.abtronics.ru].
5) Интернет ресурс
[http://ru.wikipedia.org/wiki/
ПРИЛОЖЕНИЕ А
ЛИСТИНГ ПРОГРАММЫ
Модуль Main.vhd:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.ALL;
entity Main is
PORT ( clk_cnt, button_do, button_re, button_mi, button_fa, button_sol, button_lia, button_si : in STD_LOGIC;
dinamik: out STD_LOGIC );
end Main;
architecture Behavioral of Main is
component CLK_1MGz
PORT (clk: in std_logic;
clk_out: out std_logic);
end component;
component Music
PORT ( clk_cnt: in STD_LOGIC;
button_do, button_re, button_mi, button_fa, button_sol, button_lia, button_si : in STD_LOGIC;
dinamik: out STD_LOGIC );
end component;
signal s:std_logic;
begin
u:CLK_1MGz port map(clk=>clk_cnt,clk_out=>s);
u1:Music port map(clk_cnt=>clk_cnt, button_do=>button_do, button_re=>button_re, button_mi=>button_mi, button_fa=>button_fa, button_sol=>button_sol, button_lia=>button_lia, button_si=>button_si, dinamik=>dinamik);
end Behavioral;
Модуль Music.vhdl:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.ALL;
entity Music is
port(clk_cnt: in STD_LOGIC;
button_do: in STD_LOGIC := '0';
button_re: in STD_LOGIC := '0';
button_mi: in STD_LOGIC := '0';
button_fa: in STD_LOGIC := '0';
button_sol: in STD_LOGIC := '0';
button_lia: in STD_LOGIC := '0';
button_si: in STD_LOGIC := '0';
dinamik: out STD_LOGIC := '0');
end Music;
architecture Behavioral of Music is
begin
proc_state: process (clk_cnt,button_do, button_re, button_mi, button_fa, button_sol, button_lia, button_si)
variable count_Gz : integer range 0 to 3832;
begin
if (clk_cnt'event and clk_cnt='1' ) then
if (button_do='1') then
count_Gz := count_Gz + 1;
if (count_Gz<3850) then
dinamik <= '0';
end if;
if (count_Gz>=3850) then
dinamik <= '1';
if (count_Gz>5775) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_re='1') then
count_Gz := count_Gz + 1;
if (count_Gz<3412) then
dinamik <= '0';
end if;
if (count_Gz>=3412) then
dinamik <= '1';
if(count_Gz>5518) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if (button_mi='1') then
count_Gz := count_Gz + 1;
if (count_Gz<3039) then
dinamik <= '0';
end if;
if (count_Gz>=3039) then
dinamik <= '1';
if(count_Gz>4558) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_fa='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2865) then
dinamik <= '0';
end if;
if (count_Gz>=2865) then
dinamik <= '1';
if(count_Gz>4297) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_sol='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2551) then
dinamik <= '0';
end if;
if (count_Gz>=2551) then
dinamik <= '1';
if(count_Gz>3826) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_lia='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2272) then
dinamik <= '0';
end if;
if (count_Gz>=2272) then
dinamik <= '1';
if(count_Gz>3404) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
if ( button_si='1') then
count_Gz := count_Gz + 1;
if (count_Gz<2028) then
dinamik <= '0';
end if;
if (count_Gz>=2028) then
dinamik <= '1';
if(count_Gz>3042) then
count_Gz:=0;
dinamik <= '0';
end if;
end if;
end if;
end if;
end process;
end Behavioral;
Модуль CLK_1MGz.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.ALL;
entity CLK_1MGz is
PORT (clk: in std_logic;
clk_out: out std_logic);
end CLK_1MGz;
architecture Behavioral of CLK_1MGz is
begin
process(clk)
variable cnt: integer range 0 to 1000;
begin
if (clk 'event and clk='1') then
if(cnt>=500) then
clk_out<='1';
else
clk_out<='0';
end if;
if(cnt=1000) then
cnt:=0;
else
cnt:=cnt+1;
end if;
end if;
end process;
end Behavioral;
Модуль test.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY test IS
END test;
ARCHITECTURE behavior OF test IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT Main
PORT(
clk_cnt : IN std_logic;
button_do : IN std_logic;
button_re : IN std_logic;
button_mi : IN std_logic;
button_fa : IN std_logic;
button_sol : IN std_logic;
button_lia : IN std_logic;
button_si : IN std_logic;
dinamik : OUT std_logic
);
END COMPONENT;
--Inputs
signal clk_cnt : std_logic := '0';
signal button_do : std_logic := '0';
signal button_re : std_logic := '0';
signal button_mi : std_logic := '0';
signal button_fa : std_logic := '0';
signal button_sol : std_logic := '0';
signal button_lia : std_logic := '0';
signal button_si : std_logic := '0';
--Outputs
signal dinamik : std_logic;
-- Clock period definitions
constant clk_cnt_period : time := 1000 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: Main PORT MAP (
clk_cnt => clk_cnt,
button_do => button_do,
button_re => button_re,
button_mi => button_mi,
button_fa => button_fa,
button_sol => button_sol,
button_lia => button_lia,
button_si => button_si,
dinamik => dinamik
);
-- Clock process definitions
clk_cnt_process :process
begin
clk_cnt <= '0';
wait for clk_cnt_period/2;
clk_cnt <= '1';
wait for clk_cnt_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
wait for 10 ms;
button_do<='1';
wait for 50 ms;
button_do<='0';
wait for 10 ms;
button_si<='1';
wait for 50 ms;
button_si<='0';
wait for 10 ms;
button_mi<='1';
wait for 50 ms;
button_mi<='0';
wait for 10 ms;
button_sol<='1';
wait for 50 ms;
button_sol<='0';
wait;
end process;
END;

- Музыка на уроке иностранного языка
- Музыка США
- Музыка эпохи Средневековья
- Мука
- Мука пшеничная. Характеристика продукта
- Мука пшеничная хлебопекарная первого сорта
- Мукомольное дело
- Музыкальные портреты горожан в опере М. Матинского – В. Пашкевича «Санктпетербургский гостиный двор»
- Музыкальные развлечения, основанные на народных традициях как форма организации музыкально-художественной деятельности детей среднего д
- Музыкальные способности
- Музыкальный PR
- Музыкальный альтернативный интернет-портал Xalva.by
- Музыкальный материал на уроках английского языка
- Музыкальный ритм,память,мышление у детей младшего школьного возраста