Музыкальный синтезатор

Автор: Пользователь скрыл имя, 28 Марта 2013 в 12:13, курсовая работа

Описание работы

Целью курсовой работы является разработать проект “Музыкальный синтезатор” используя ПЛИС фирмы Xilinx в среде проектирования XilinxISE.
Для программирования логики работы синтезатора использовался язык VHDL ((Very high speed integrated circuits) Hardware Description Language).
Язык VHDL - это международный стандарт в области автоматизации проектирования цифровых систем.Средствами языка VHDL возможно проектирование на различных уровнях абстракции (поведенческом или алгоритмическом, регистровых передач, структурном), в соответствии с техническим заданием и предпочтениями разработчика

Содержание

ВВЕДЕНИЕ 5
1 ОБЗОР СОСТОЯНИЯ ВОПРОСА 7
2 ВЫБОР АППАРАТНЫХ СРЕДСТВ 8
3 ПРОГРАММИРОВАНИЕ И ОПИСАНИЕ АППАРАТНО-ПРОГРАММНОГО КОМПЛЕКСА 9
3.1 Структура комплекса 9
3.2 Описание модулей и их реализация 10
4 ТЕСТИРОВАНИЕ 16
ЗАКЛЮЧЕНИЕ 19
СПИСОК ЛИТЕРАТУРЫ 20

Работа содержит 1 файл

Записка.docx

— 134.96 Кб (Скачать)

         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.

Для моделирования работы системы использовался симулятор  ISimSimulator, входящий в состав XilinxISE. Была получена временная диаграмма, представленнаяна рисунке 4.1

 

 

Рисунок 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/VHDL].

 

 

 

ПРИЛОЖЕНИЕ А

 

ЛИСТИНГ ПРОГРАММЫ

 

Модуль 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;

 


Информация о работе Музыкальный синтезатор