资源描述
《基于FPGA数字系统设计》项目设计文档
项目名称: 基于VHDL简易电子琴
姓 名:
院 系:
专 业:
学 号:
指引教师:
完毕时间: 年 6月20日
基于FPGA数字系统设计项目成绩评价表
设计题目
基于VHDL简易电子琴
设计规定
1) 设计一种简易电子琴;
2) 运用实验箱脉冲源产生1,2,3,。。。共7个或14个音阶信号;
3) 用批示灯显示节拍;
4) *能产生颤音效果。
设计过程
采用现场可编程逻辑器件(FPGA)制作,运用EDA软件中VHDL硬件描述语言编程进行控制,然后烧制实现。
采用是现场可编程逻辑器件来实现,它长处是所有电路集成在一块芯片上,此方案所需外围电路简朴,这样它体积就减少了,同步还提高了系统稳定度。
由设计者把编好 VHDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把乐谱输入到FPGA,产生不同频率驱动扬声器,发出不同乐谱。同步也把发出乐谱符号通过显示屏输出。
项目设计成绩评价
评价项目
指 标
满分
评分
工作量、工作态度和出勤率
按期圆满完毕了规定任务,难易限度和工作量符合教学规定,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与她人合伙。
30
课程设计质量
项目设计系统架构合理,设计过程简洁对的,分析问题思路清晰,构造严谨,文理通顺,撰写规范,图表完备对的。
40
创新
工作中有创新意识,对前人工作有某些改进或有一定应用价值。
15
答辩
能对的回答指引教师所提出问题。
15
综合成绩级别
指引教师: 年 月 日
目 录
1 项目名称、内容与规定 ………………………………………4页
1.1 设计内容…………………………………………………4页
1.2 详细规定…………………………………………………4页
2 系统整体架构(Architecture Description)………………4页
2.1 设计思路…………………………………………………4页
2.2 系统原理(包括:框图等阐述)与设计阐明等内容…4页
2.3 创新点与原创性内容……………………………………5页
3 系统设计 (含HDL或原理图输入设计)………………………5页
注:此某些包括重要逻辑单元、模块、源代码等内容
3.1 HDL 代码…………………………………………………5页
3.2 系统整体电路图(或RTL级电路图)…………………7页
4 系统仿真(Simulation Waveform)…………………………7页
5 FPGA实现(FPGA Implementation)………………………9页
6 总结(Closing) ……………………………………………10页
参照书目(Reference):…………………………………………11页
附录(Appendix):………………………………………………12页
1、 项目名称、内容与规定
1.1 设计内容:
设计一种简易八音符电子琴,它可通过按键输入来控制音响。
1.2 详细规定:
1、设计一种简易电子琴;
2、运用实验箱脉冲源产生1,2,3,。。。共7个或14个音阶信号;
3、用批示灯显示节拍;
4、*能产生颤音效果。
2、系统整体架构
2.1 设计思路
本课程设计目在于灵活运用EDA技术编程实现一种简易电子琴,它规定在实验箱上构造一种电子琴电路,不同音阶相应不同频率正弦波。按下每个代表不同音阶按键时,可以发出相应频率声音
2.2 系统原理
采用现场可编程逻辑器件(FPGA)制作,运用EDA软件中VHDL硬件描述语言编程进行控制,然后烧制实现。采用FPGA来设计原理图如图1.1所示。它由控制输入电路、FPGA、显示电路和扬声器电路构成。
扬声电路
显示电路
FPGA
控制输入电路
图1.1 采用FPGA设计电子琴原理方框图
控制输入电路重要是为顾客设计,起到一种输入控制作用。FPGA是现场可编程逻辑器件,也是本设计方案核心内容,它是实现电子琴运作重要控制模块。由设计者把编好 VHDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把乐谱输入到FPGA,产生不同频率驱动扬声器,发出不同乐谱。同步也把发出乐谱符号通过显示屏输出。
2.3 创新点与原创性内容
对于电子琴设计,诸多方案均可以实现,但是采用数字逻辑电路来制作话电路硬件所需器材多,体积庞大,比较复杂,并且精度和稳定度都不是很高。如果采用是现场可编程逻辑器件来实现,它长处是所有电路集成在一块芯片上,此方案所需外围电路简朴,这样它体积就减少了,同步还提高了系统稳定度。还可以用Modelsim XE 5.3d软件进行仿真和调试等。设计人员可以充分运用VHDL硬件描述语言以便编程,提高开发效率,缩短研发周期,减少研发成本;并且易于进行功能扩展,实现办法灵活,调试以便,修改容易。。因而,电子琴设计咱们选取采用现场可编程逻辑器件(FPGA)制作来实现。
3 系统设计
3.1 HDL 代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity speakera is
port( clk :in std_logic; --时钟输入
index:in std_logic_vector( 6 downto 0); -- 按键输入
spks:out std_logic); --扬声器输出
end;
architecture one of speakera is
signal preclk,fullspks :std_logic;
signal tone:std_logic_vector( 10 downto 0);
begin
search :process (index)
begin
case index is
when "0000001" => tone <= "";
when "0000010" => tone <= "";
when "0000100" => tone <= "";
when "0001000" => tone <= "";
when "0010000" => tone <= "";
when "0100000" => tone <= "";
when "1000000" => tone <= "";
when others => tone <= "";
end case;
end process;
divdeclk :process(clk)
variable count4 :std_logic_vector( 3 downto 0);
begin
preclk <= '0';
if count4 > 11 then preclk <= '1';count4 :="0000";
elsif clk'event and clk='1' then count4 := count4 + 1;
end if;
end process;
genspks :process(preclk,tone)
variable count11 :std_logic_vector( 10 downto 0);
begin
if preclk'event and preclk = '1' then
if count11 =16#7ff# then count11 := tone;fullspks <= '1';
else count11 := count11 + 1;fullspks <= '0';
end if;
end if;
end process;
dealyspks :process( fullspks)
variable count2 :std_logic;
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;
3.2 系统整体电路图
4 系统仿真(Simulation Waveform)
功能仿真:
时序仿真:
5 FPGA实现
数控分频模块目是对基准脉冲分频,得到1,2,3,4,5,6,7,七个音符相应频率。该模块VHDL描述中涉及了三个模块,一方面对12MHz基准脉冲进行再次分频,得到便是所需要频率。
实验箱:
实验操作内容及环节:
1、打开QuartusⅡ,创立工程
一方面建立一种QuartusⅡ工程,指定工作目录、工程名称、顶层设计实体名称、目的器件系列、工具设立等。环节如下:
(1) 选取“开始”—>“程序”—>Altera—> QuartusⅡ
(2) 选取File—>New Project Wizard 界面,单击Next按钮,进入工程名称设定、工程目录选取。
(3) 在对话框中,指定工程存储目录、工程名和顶层实体名,工程名和顶层实体名规定相似,工程目录可以随意设立,但必要是英文目录,单击Next按钮。
(4) 顾客指定目的器件,依照开发板所有效期间来选取,单击Next按钮。
(5) 新建一种VHDL语言。
(6) 把程序代码输入,编译、运营程序,单击processing—>start comilation,运营程序。
2.引脚分派
(1)单击assignments—>timing analysis setting进行引脚分派
(2)直接导入引脚分派,单击assignments—>import assignments
(3)引脚分派完毕
3.产生波形图
(1)创立波形文献,单击File—>other files—>vector waveform file
(2)点击空白处,点开INSERT->insert node,再点击—>node finder—>list,把元器件添加进去,得到其仿真波形图
系统整体组装图:
6 总结(Closing)
通过两个周学习,最后完毕了我设计任务——基于VHDL语言简易电子琴设计。通过本次课程设计学习,我对数据库软件EDA技术、VHDL、等系列知识均有了一定理解。使用EDA技术开发页面能力也有了很大提高。
我深深体会到设计课重要性和目性所在。本次设计课不但仅培养了咱们实际操作能力,也培养了咱们灵活运用课本知识,理论联系实际,独立自主进行设计能力。它不但仅是一种学习新知识新办法好机会,同步也是对我所学知识一次综合检查和复习,使我明白了自己缺陷所在,从而查漏补缺。
在设计中规定咱们要有耐心和毅力,还要细心,稍有不慎一种小小错误就会导致成果不对的,而对错误检查规定我要有足够耐心,通过这次设计和设计中遇到问题,也积累了一定经验。用VHDL硬件描述语言形式来进行数字系统设计以便灵活,运用EDA软件进行编译优化仿真极大地减少了电路设计时间和也许发生错误,减少了开发成本,这种设计办法必将在将来数字系统设计中发挥越来越重要作用。VHDL设计核心是电路逻辑设计,而一种程序核心是总体设计。对于硬件设计接触不多咱们清晰这一点也许不无好处。
设计工作此课程设计从构思到最后完毕这两个周内,周边诸多同窗和朋友予以了我善意协助,尚有教师同窗们对我不厌其烦指引,使我对此类课程设计设计流程以及脊髓有了很深理解,通过你们协助,我把从计算机构成原理这门课上学到理论第一次用到了实际设计上。在此,我深深表达感谢。
参照书目(Reference):
[1] 张肃文,.EDA技术与VHDL语言.北京:清华大学出版社
[2] 张亦华,延明. 数字电路EDA入门.北京:北京邮电大学出版社
[3] 《VHDL 程序设计》(第二版). 曾繁泰等. 清华大学出版社
[4]《VHDL与数字电路设计》.卢毅, 赖杰. 科学出版社
[5]《EDA技术与实验》陈强
附录(Appendix):
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity speakera is
port( clk :in std_logic; --时钟输入
index:in std_logic_vector( 6 downto 0); -- 按键输入
spks:out std_logic); --扬声器输出
end;
architecture one of speakera is
signal preclk,fullspks :std_logic;
signal tone:std_logic_vector( 10 downto 0);
begin
search :process (index)
begin
case index is
when "0000001" => tone <= "";
when "0000010" => tone <= "";
when "0000100" => tone <= "";
when "0001000" => tone <= "";
when "0010000" => tone <= "";
when "0100000" => tone <= "";
when "1000000" => tone <= "";
when others => tone <= "";
end case;
end process;
divdeclk :process(clk)
variable count4 :std_logic_vector( 3 downto 0);
begin
preclk <= '0';
if count4 > 11 then preclk <= '1';count4 :="0000";
elsif clk'event and clk='1' then count4 := count4 + 1;
end if;
end process;
genspks :process(preclk,tone)
variable count11 :std_logic_vector( 10 downto 0);
begin
if preclk'event and preclk = '1' then
if count11 =16#7ff# then count11 := tone;fullspks <= '1';
else count11 := count11 + 1;fullspks <= '0';
end if;
end if;
end process;
dealyspks :process( fullspks)
variable count2 :std_logic;
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;
展开阅读全文