You are on page 1of 2

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;
-- Definição das notas musicais
PACKAGE partitura IS
TYPE notasTipo IS (do, re, mi, fa, sol, la, si, xxx);
END partitura;
USE work.partitura.ALL;
ENTITY gregoriano IS
PORT(vogal : IN CHARACTER; -- caracter da letra da música
nota_canto : OUT notasTipo); -- nota correspodente a música
END gregoriano;
ARCHITECTURE escala OF gregoriano IS
SIGNAL indiceA : INTEGER := 0;
SIGNAL indiceE : INTEGER := 0;
SIGNAL indiceI : INTEGER := 0;
SIGNAL indiceO : INTEGER := 0;
SIGNAL indiceU : INTEGER := 0;
BEGIN
PROCESS (vogal)
BEGIN
IF vogal = 'a' or vogal = 'A' THEN -- Encontra uma letra 'a' ou 'A' na
letra da música
CASE indiceA IS
WHEN 0 => nota_canto <= do;
WHEN 1 => nota_canto <= la;
WHEN 2 => nota_canto <= fa;
WHEN OTHERS => nota_canto <= xxx;
END CASE;
IF indiceA < 2 THEN
indiceA <= indiceA + 1;
ELSE
indiceA <= 0;
END IF;
ELSIF vogal = 'e' or vogal = 'E'THEN -- Encontra uma letra 'e' ou 'E' na
letra da música
CASE indiceE IS
WHEN 0 => nota_canto <= re;
WHEN 1 => nota_canto <= si;
WHEN 2 => nota_canto <= sol;
WHEN OTHERS => nota_canto <= xxx;
END CASE;
IF indiceE < 2 THEN
indiceE <= indiceE + 1;
ELSE
indiceE <= 0;
END IF;
ELSIF vogal = 'i' or vogal = 'I' THEN -- Encontra uma letra 'i' ou 'I' na
letra da música
CASE indiceI IS
WHEN 0 => nota_canto <= mi;
WHEN 1 => nota_canto <= do;
WHEN 2 => nota_canto <= la;
WHEN OTHERS => nota_canto <= xxx;
END CASE;
IF indiceI < 2 THEN
indiceI <= indiceI + 1;
ELSE
indiceI <= 0;
END IF;
ELSIF vogal = 'o' or vogal = 'O' THEN -- Encontra uma letra 'o' ou 'O' na
letra da música
CASE indiceO IS
WHEN 0 => nota_canto <= fa;
WHEN 1 => nota_canto <= re;
WHEN 2 => nota_canto <= si;
WHEN OTHERS => nota_canto <= xxx;
END CASE;
IF indiceO < 2 THEN
indiceO <= indiceO + 1;
ELSE
indiceO <= 0;
END IF;
ELSIF vogal = 'u' or vogal = 'U' THEN -- Encontra uma letra 'u' ou 'U' na
letra da música
CASE indiceU IS
WHEN 0 => nota_canto <= sol;
WHEN 1 => nota_canto <= mi;
WHEN 2 => nota_canto <= do;
WHEN OTHERS => nota_canto <= xxx;
END CASE;
IF indiceU < 2 THEN
indiceU <= indiceU + 1;
ELSE
indiceU <= 0;
END IF;
ELSE
nota_canto <= xxx; -- Faz uma pausa se o que encontra é al
go diferente a uma vogal
END IF;
END PROCESS;
END escala;

You might also like