电子琴的源程序(eda课程设计)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY AUTO IS
PORT(CLK: IN STD_LOGIC; --系统时钟信号
AUTO: IN STD_LOGIC; --键盘输入/自动演奏
CLK2: BUFFER STD_LOGIC; --时钟输出
INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘输入信号
INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --音符信号输出
END AUTO;
ARCHITECTURE BEHAVIORAL OF AUTO IS
SIGNAL COUNT0:INTEGER RANGE 0 TO 31; --定义信号计数器,有32个信号元素
BEGIN
PULSE0:PROCESS(CLK,AUTO) --PULSE0工作进程开始
VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定义变量计数器,从0到8
BEGIN
IF AUTO='1'THEN --键盘输入为1
COUNT:=0;CLK2<='0'; --计数器值为0,时钟信号2幅值为0
ELSIF(CLK'EVENT AND CLK='1')THEN --输入的时钟信号为其他值
COUNT:=COUNT+1; --计数器加1即为1
IF COUNT=4 THEN
CLK2<='1';
ELSIF COUNT=8 THEN
CLK2<='0';COUNT:=0;
END IF;
END IF;
END PROCESS;
MUSIC:PROCESS(CLK2) --MUSIC工作进程开始
BEGIN
IF(CLK2'EVENT AND CLK2='1')THEN --时钟信号2为1
IF(COUNT0=31)THEN --计数器值为31
COUNT0<=0; --计数器清0
ELSE
COUNT0<=COUNT0+1;
END IF;
END IF;
END PROCESS;
COM1:PROCESS(COUNT0,AUTO,INDEX2)
BEGIN
IF AUTO='0'THEN --键盘输入为0
CASE COUNT0 IS --由计数器从0到31的取值判断音符信号的8位二进制数
WHEN 0=>INDEX0<="00000100"; --3
WHEN 1=>INDEX0<="00000100"; --3
WHEN 2=>INDEX0<="00000100"; --3
WHEN 3=>INDEX0<="00000100"; --3
WHEN 4=>INDEX0<="00010000"; --5
WHEN 5=>INDEX0<="00010000"; --5
WHEN 6=>INDEX0<="00010000"; --5
WHEN 7=>INDEX0<="00100000"; --6
WHEN 8=>INDEX0<="10000000"; --8
WHEN 9=>INDEX0<="10000000"; --8
WHEN 10=>INDEX0<="10000000"; --8
WHEN 11=>INDEX0<="00000100"; --3
WHEN 12=>INDEX0<="00000010"; --2
WHEN 13=>INDEX0<="00000010"; --2
WHEN 14=>INDEX0<="00000001"; --1
WHEN 15=>INDEX0<="00000001"; --1
WHEN 16=>INDEX0<="00010000"; --5
WHEN 17=>INDEX0<="00010000"; --5
WHEN 18=>INDEX0<="00001000"; --4
WHEN 19=>INDEX0<="00001000"; --4
WHEN 20=>INDEX0<="00001000"; --4
WHEN 21=>INDEX0<="00000100"; --3
WHEN 22=>INDEX0<="00000010"; --2
WHEN 23=>INDEX0<="00000010"; --2
WHEN 24=>INDEX0<="00010000"; --5
WHEN 25=>INDEX0<="00010000"; --5
WHEN 26=>INDEX0<="00001000"; --4
WHEN 27=>INDEX0<="00001000"; --4
WHEN 28=>INDEX0<="00000100"; --3
WHEN 29=>INDEX0<="00000100"; --3
WHEN 30=>INDEX0<="00000010"; --2
WHEN 31=>INDEX0<="00000010"; --2
WHEN OTHERS=>NULL;
END CASE;
ELSE INDEX0<=INDEX2; --将音符信号0的值赋给音符信号2
END IF;
END PROCESS;
END BEHAVIORAL;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TONE IS
PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --音符输入信号
CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符显示信号
HIGH: OUT STD_LOGIC; --高低音显示信号
TONE0:OUT INTEGER RANGE 0 TO 2047); --音符的分频系数
END TONE;
ARCHITECTURE ART OF TONE IS
BEGIN
SEARCH:PROCESS(INDEX)
BEGIN
CASE INDEX IS
WHEN"00000001"=>TONE0<=773;CODE<="1001111";HIGH<='1';
--分频系数773Hz,音符显示1001111,显示低音
WHEN"00000010"=>TONE0<=912;CODE<="0010010";HIGH<='1';
WHEN"00000100"=>TONE0<=1036;CODE<="0000110";HIGH<='1';
WHEN"00001000"=>TONE0<=1116;CODE<="1001100";HIGH<='1';
WHEN"00010000"=>TONE0<=1197;CODE<="0100100";HIGH<='1';
WHEN"00100000"=>TONE0<=1290;CODE<="0100000";HIGH<='0';
WHEN"01000000"=>TONE0<=1372;CODE<="0001111";HIGH<='0';
WHEN"10000000"=>TONE0<=1410;CODE<="0000000";HIGH<='0';
WHEN OTHERS =>TONE0<=2047;CODE<="0000001";HIGH<='0';
END CASE;
END PROCESS;
END ART;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FENPIN IS
PORT(CLK1: IN STD_LOGIC;
TONE1: IN INTEGER RANGE 0 TO 2047; --系统时钟信号
SPKS: OUT STD_LOGIC); --音符分频系数
END ENTITY FENPIN; --驱动扬声器的音频信号
ARCHITECTURE ART OF FENPIN IS
SIGNAL PRECLK:STD_LOGIC; --定义时基脉冲信号
SIGNAL FULLSPKS:STD_LOGIC;
BEGIN
PROCESS(CLK1)
VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定义变量计数器,从0到8
BEGIN
IF(CLK1'EVENT AND CLK1='1')THEN --据时钟信号为1时
COUNT:=COUNT+1; --判断计数器取值为1
IF COUNT=2 THEN
PRECLK<='1';
ELSIF COUNT=4 THEN --若计数器计4
PRECLK<='0';COUNT:=0; --时基脉冲为0,计数器清零
END IF;
END IF;
END PROCESS;
PROCESS(PRECLK,TONE1)
VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;
BEGIN
IF(PRECLK'EVENT AND PRECLK='1')THEN --PRECLK脉冲上升沿触发
IF COUNT11<TONE1 THEN --若计数器11值小于音符信号1
COUNT11:=COUNT11+1;FULLSPKS<='1'; --计数器加1,音频信号为1
ELSE
COUNT11:=0;FULLSPKS<='0';
END IF;
END IF;
END PROCESS;
PROCESS(FULLSPKS) --音频信号输出进程开始
VARIABLE COUNT2:STD_LOGIC:='0'; --定义变量计数器2,初值为0
BEGIN
IF(FULLSPKS'EVENT AND FULLSPKS='1')THEN
count2:=not count2;
IF COUNT2='1'THEN
SPKS<='1';
ELSE
SPKS<='0';
END IF;
END IF;
END PROCESS;
END ART;
4.顶层文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DIANZIQIN IS
PORT(CLK32MHZ: IN STD_LOGIC; --系统时钟信号
HANDTOAUTO: IN STD_LOGIC; --键盘输入/自动演奏信号
CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符显示信号
INDEX1: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘输入信号
HIGH1: OUT STD_LOGIC; --高低音节信号
SPKOUT: OUT STD_LOGIC); --音频信号
END;
ARCHITECTURE ART OF DIANZIQIN IS
COMPONENT AUTO --引用 AUTO元件
PORT(CLK: IN STD_LOGIC;
AUTO: IN STD_LOGIC; --输入自动演奏信号
INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --输入8位控制信号
INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --输出8位的音符
END COMPONENT;
COMPONENT TONE --引用TONE元件
PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
HIGH: OUT STD_LOGIC;
TONE0: OUT INTEGER RANGE 0 TO 2047);
END COMPONENT;
COMPONENT FENPIN --引用FENPIN元件
PORT(CLK1: IN STD_LOGIC;
TONE1: IN INTEGER RANGE 0 TO 2047;
SPKS: OUT STD_LOGIC);
END COMPONENT;
SIGNAL TONE2:INTEGER RANGE 0 TO 2047; --定义主程序音调频率信号
SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0); --定义8位的音符信号
BEGIN
U0:AUTO PORT MAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO); --调用自动演奏模块
U1:TONE PORT
MAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1); --调用音调发
U2:FENPIN PORT MAP(CLK1=>CLK32MHZ,TONE1=>TONE2,SPKS=>SPKOUT);
电子琴的源程序(eda课程设计)相关推荐
- html selsec 文字靠右,EDA课程设计
计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法. Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的 ...
- eda多功能数字钟课程设计_《多功能数字钟》EDA实验报告
<EDA课程设计> 1.摘要 实验报告 多功能数字钟 姓 名: 学 号: 联系方式: 成 绩: 在当代,随着人类社会进入到高度发达的信息化社会.信息技术的发展起着越来越大的作用,它几乎涉及 ...
- 付费计算机毕业论文毕业设计课程设计
付费资料 驱动器 F 中的卷是 资料 卷的序列号是 6B36-8880 F:/论文/计算机毕业设计 的目录 [.] [..] -商贸有限公司销售管理系统(论文+源代码+答辩PPT).rar 1.ppt ...
- 基于c语言的编译原理课程设计,编译原理课程设计心得体会
与<编译原理课程设计心得体会>相关的范文 本文由leishensc贡献 doc文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. 2008-2009 学年第二学 ...
- 计算机组成原理电子时钟设计与实现,《计算机组成原理》课程设计报告-基于VHDL数字电子钟设计与实现.doc...
<计算机组成原理>课程设计报告-基于VHDL数字电子钟设计与实现 长沙理工大学 <计算机组成原理>课程设计报告 XXX 学 院 计算机与通信工程 专 业 网络工程 班 级 网络 ...
- 定位技术课程设计-微信小程序校园导游系统
定位技术课程设计课程设计教学目的课程设计要求课程设计题目原题目拓展内容需求分析原理分析微信小程序API定位原理WIFI指纹定位原理路径规划算法调研详细设计总述主页面介绍学校简介页面介绍导引页面概述导引 ...
- 计算机组成原理认识fpga,计算机组成原理课程设计-基于EDA和FPGA技术的8位模型计算机的设计与实现_精品.doc...
计算机组成原理课程设计-基于EDA和FPGA技术的8位模型计算机的设计与实现_精品 目录 前言2 第一章 课程设计内容2 1.1 实验要求2 1.2 实验目的2 第二章 实验原理及方案2 2.1 实验 ...
- 单片机多功能电子琴课设_基于单片机的简易电子琴课程设计.doc
基于单片机的简易电子琴课程设计.doc 还剩 16页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 15 14可在实际的应用时这些是不能被忽略的,我们不 ...
- 记忆测试系统java代码_JAVA课程设计——记忆测试系统(附源程序).doc
<JAVA程序设计>课程设计报告 题 目: 记忆游戏 姓 名: 学 号: 班 级: 指导教师: 完成时间 成 绩: 信息工程学院 2015年6月 目 录 TOC \o "1-5& ...
最新文章
- Python 计算欧氏距离
- 基于vmware服务器虚拟化管理,基于Vmware的服务器虚拟化管理论文.doc
- JS实现倒计时三秒钟跳转到新的页面
- angular5使用httpclient时解决跨域问题
- 千米网:未来,是一个一千米的梦想
- 中国生物医药产业集群产业战略布局及运营管理模式分析报告2021-2027年
- MATLAB 格拉布斯准则代码
- 时间管理-要抽专门的时间去做那些重要但不紧急的事情
- 制作QQ微信支付宝三合一收款码
- select标签 selected 选中状态动态查询
- 【震驚】中国电信接管CDMA业务,內部FAQ (注意所有括弧的內容)
- rips php,审计PHP工具篇之 RIPS
- (转)iOS 上的相机捕捉
- 完成对靓号号码的筛选
- 宿舍管理系统的设计与实现/学生宿舍管理系统
- edge如何导入html文件收藏夹,Edge浏览器如何导入导出收藏夹(目录位置)
- 实习日记 7.11
- 苹果7计算机有什么功能是什么,iPhone7有哪些新功能 iPhone7新功能汇总【详细介绍】...
- 计算机网络王盛邦pdf,依据网络的技术计算机CP网络实验课程体系.pdf
- 清华出版社618IT系列丛书大促