广东工业大学eda课程设计报告
广工eda课程设计

课程设计课程名称硬件描述语言及EDA技术课程设计题目名称____________ 学生学院______________ 专业班级______学号______________________学生姓名______________________指导教师_____________________2017年6月口日目录设计内容及功能要求 (4)设计思路 (4)(1):要求能控制烹调的开关4(2):要求要显示烹调状态的进行及结束4(3):要求设置固定的烹调时间,并显示烹调所剩时间4Verilog 源程序 (5)程序分析 (6)(1):端口能义6(2):加数器和减数数器的设计7(3):数码管的显示8编译及配置 (9)硬件验证及现象观察 (10)遇到的问题及解决方法............................................. 错误!未定义书签。
(1):..................................................................................................... 错误!未定义书签。
<2):......................................................................................................... 错误!未定义书签。
(3):....................................................................................................... 错误!未定义书签。
总结设计及体会................................................... 错误!未定义书签。
参考文献 .. (13)设计内容及功能要求简易微波炉:设计一个简易微波炉控制器,要求能控制烹调的开关,并显示烹调状态进行结束。
eda课程设计--EDA课程设计实验报告

eda课程设计一EDA课程设计实验报告EDA课程设计实验报告学曉宿息工程学阮专业通信工程学号________________農名___________________任镌教师_________________2013 年10 月30 q一、FPGA 简介随着基于FPGA 的EDA 技术的发展和应用领域的扩大与深入,EDA 技术在电 子信息.通信.自动控制及计算机等领域的重要性日益突出。
作为一个学通信 工程专业的学生,我们必须不断地去了解更多的新产品信息,这就更加要求我 们对EDA 有个全面的认识。
信号发生器在我们的日常中有很重要的应用,用VHDL 语言去实现设计将会使我们对本学科知识可以更好地掌握。
本设计是一个基于VHDL 的釆用自顶向下设计方法实现的信号发生器,该设 计方法具有外围电路简单,程序修改灵活和调试容易等特点,并通过计算机仿 真证明了设计的正确性。
要求设计一个函数发生器,该函数发生器能够产生递增斜波.递减斜波、 方波、三角波.正弦波.及阶梯波,并且可以通过选择开关选择相应的波形输 出;系统具有复位的功能;通过按键确定输出的波形及确定是否输出波形。
FPGA 是整个系统的核心,构成系统控制器,波形数据生成器,加法器,运算/译码等 功能。
通过以上分析设计要求完成的功能,确定函数发生器可由递增斜波产生模 块.递减斜波产生模块.三角波产生模块.阶梯波产生模块.正弦波产生模块、 方波产生模块和输出波形选择模块组成,以及按键复位控制和时钟输入。
由此 可确定系统的总体原理框图为:三、方案选择1、波形函数发生方案对比选择时 --- ► 复--- ►波形发生模块目分析波形输出选波形函数发生是本设计的最重要的部分,实现函数发生的途径也有很多,因此必须选择一种易于实现且精度高的方案,以此来提高本设计的实用性。
本信号发生器利用在系统编程技术和FPGA芯片产生。
用VHDL语言编写程序,调试成功后下载至实验装置的芯片上,再利用外接D/A转换电路实现以上设计功能。
EDA课程设计报告材料

实用成绩:EDA课程设计报告课程 EDA课程设计专业学号姓名指导教师日期 2012.06.21机械与电子信息学部一、设计任务与要求1.任务:制作并调试EDA学习板2.了解并能识别学习板上的各种元器件,会读元器件标示;3.会看电路原理图;4.制作EDA学习板;5.编写VHDL程序进行跑马灯控制6.编写VHDL程序进行步进电机的转速控制7.学会使用QuartusⅡ软件下载调试程序;8.用调试程序将学习板调试成功。
9.二.课程设计目的通过编写VHDL程序,结合硬件电路设计,实现跑马灯和步进电机的转速控制。
经过本次课程设计,能够将所学专业理论知识进行综合实际运用,锻炼学生的动手能力以及提高学生的综合专业素质。
三、实验内容1.芯片工作电路,利用晶振提供控制信号。
2.10引脚下载口与芯片相关引脚相连完成下载电路。
3.利用16个开关做成键盘,实现输入号对已编程的芯片的控制并通过数码管显示0--F。
4.用2片74HC573N具有锁存功能芯片与8个数码管相连,通过编程实现位选和段选实现输出信号的显示功能。
5.使用74HC573N锁存功能结合ULN2003AG芯片8非门芯片和74HC04N6非门芯片与4个2N5551三极管实现对步进电机的控制,和控制步进电机6.信号结合LED输出显示的功能。
7.利用1片74HC573N芯片与8个共阴极LED实现跑马灯功能。
四.课程设计器材清单六.程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cc isport(clk: in std_logic;bj:out std_logic_vector(3 downto 0);start:in std_logic;kbcol:in std_logic_vector(3 downto 0);kbrow:out std_logic_vector(3 downto 0);seg1_out:out std_logic_vector(3 downto 0);seg2_out:out std_logic_vector(3 downto 0);qq_out:out std_logic_vector (7 downto 0);qq1_out:buffer std_logic_vector(7 downto 0);sk:in bit);end;architecture one of cc istype btype is(s0,s1,s2,s3);signal current_state,next_state:btype;signal count: std_logic_vector(1 downto 0);signal sta: std_logic_vector(1 downto 0);signal seg1: std_logic_vector(3 downto 0);signal seg2: std_logic_vector(3 downto 0);signal fn: std_logic;signal ks:std_logic_vector(1 downto 0);signal qq: std_logic_vector (7 downto 0);signal qq1:std_logic_vector (7 downto 0);signal sp1,sp2:std_logic_vector(3 downto 0);beginpqq:process (clk)beginif clk'event and clk='1' thenqq<=qq+1;end if;end process;qq_out<=qq;reg:process (qq(7))beginif qq(7)'event and qq(7)='1'thencurrent_state <=next_state;end if;end process reg;com:process (current_state)begincase current_state iswhen s0=> bj<="0011";next_state <=s1; when s1=> bj<="1001";next_state <=s2; when s2=> bj<="1100";next_state <=s3; when s3=> bj<="0110";next_state <=s0; when others=>next_state <=s0;end case;end process com;process(clk)beginif clk'event and clk='1'then count<=count+1; end if;end process;process(clk)beginif clk'event and clk='1'thencase count iswhen "00"=>kbrow<="0001";sta<="00";when "01"=>kbrow<="0010";sta<="01";when "10"=>kbrow<="0100";sta<="10";when "11"=>kbrow<="1000";sta<="11";when others=>kbrow<="1111";end case;end if;end process;process(clk,start)beginif start='0'then seg1<="0000";seg2<="0000"; elsif clk'event and clk='1'thencase sta iswhen "00"=>case kbcol iswhen "0001"=>seg1<="0000";seg2<="0001"; when "0010"=>seg1<="0000";seg2<="0010";when "0100"=>seg1<="0000";seg2<="0011";when "1000"=>seg1<="0000";seg2<="0100";when others=>seg1<="1111";seg2<="1111";end case;when "01"=>case kbcol iswhen "0001"=>seg1<="0000";seg2<="0101";when "0010"=>seg1<="0000";seg2<="0110";when "0100"=>seg1<="0000";seg2<="0111";when "1000"=>seg1<="0000";seg2<="1000";when others=>seg1<="1111";seg2<="1111";end case;when "10"=>case kbcol iswhen "0001"=>seg1<="0000";seg2<="1001";when "0010"=>seg1<="0001";seg2<="0000";when "0100"=>seg1<="0001";seg2<="0001";when "1000"=>seg1<="0001";seg2<="0010";when others=>seg1<="1111";seg2<="1111";end case;when "11"=>case kbcol iswhen "0001"=>seg1<="0001";seg2<="0011";when "0010"=>seg1<="0001";seg2<="0100";when "0100"=>seg1<="0001";seg2<="0101";when "1000"=>seg1<="0001";seg2<="0110";when others=>seg1<="1111";seg2<="1111";end case;when others=>seg1<="1111";seg2<="1111";end case;end if;end process;fn<=not(seg1(0)and seg2(0)and seg2(1)and seg2(2)and seg2(3)); process(fn)beginif fn'event and fn='1'thenseg1_out<=seg1;seg2_out<=seg2;end if;end process;process (qq(7))variable c:integer range 7 downto 0; beginif qq(7)'event and qq(7)='1'thenc:=c+1;if c=7 thenqq1<=qq1+1;end if;end if;end process;process (fn,qq1)beginif fn'event and fn='1' thencase seg1 iswhen "0000"=>case seg2 iswhen "0001"=>qq1_out<="00011001"; when "0010"=>qq1_out<="00110010"; when "0011"=>qq1_out<="01001011"; when "0100"=>qq1_out<="01100100"; when "0101"=>qq1_out<="01111111"; when "0110"=>qq1_out<="10010110"; when "0111"=>qq1_out<="10101111"; when "1000"=>qq1_out<="11001000"; when "1001"=>qq1_out<="11100001"; when others=>qq1_out<=qq1;end case;when "0001"=>case seg2 iswhen "0000"=>qq1_out<="11110000"; when "0001"=>qq1_out<="11111111"; when "0010"=>qq1_out<="00000000"; --when "0011"=>qq1_out<=qq1;when others=>qq1_out<=qq1;end case;when others=>qq1_out<=qq1;end case;end if;end process;process(sk,start,sp1,sp2)beginif start='0' then sp1<="0000";sp2<="0000";elsif sk'event and sk='1' thenif sp2<"1001" then sp2<=sp2+1;else sp2<="0000";end if;end if;if sp2="1001" then sp1<=sp1+1;end if;end process;end;七.元件调试1、否短路用万用表检查P2两端是短路。
EDA技术实践七人表决器报告完美版_09级

课程设计课程名称硬件描述语言与EDA技术题目名称硬件描述语言与EDA技术实践学生学院材料与能源专业班级 09微电子学(1)班学号 68 学生姓名钟万友指导教师陈先朝2011年 12月 9日广东工业大学课程设计任务书题目名称硬件描述语言与EDA技术实践学生学院材料与能源学院专业班级09微电子学(1)班姓名钟万友学号68一、课程设计的内容1.系统功能分析;2.实现系统功能的方案设计;3.编写各功能模块VHDL语言程序;4.对各功能模块进行编译、综合、仿真和验证;5.顶层文件设计;6.整个系统进行编译、综合、仿真和验证;7.在CPLD/FPGA实验开发系统试验箱上进行硬件验证。
二、课程设计的要求与数据1.按所布置的题目要求,每一位学生独立完成全过程;2.分模块层次化设计;3.各功能模块的底层文件必须用VHDL语言设计,顶层文件可用VHDL语言设计,也可以用原理图设计。
三、课程设计应完成的工作1.所要求设计内容的全部工作;2.按设计指导书要求提交一份报告书;3.提交电子版的设计全部内容:工程目录文件夹中的全部内容,报告书四、课程设计进程安排五、应收集的资料及主要参考文献1.陈先朝,硬件描述语言与EDA技术实践指导书,2011年11月2.曹昕燕等编著,EDA技术实验与课程设计,清华大学出版社,2006年5月3.刘欲晓等编著,EDA技术与VHDL电路开发应用实践,电子工业出版社,2009年4月4.刘昌华等编著,数字逻辑EDA设计与实践:MAX+plusⅡ与QuartusⅡ双剑合璧,国防工业出版社,2009年5.刘江海主编,EDA技术课程设计,华中科技大学出版社,2009年1月发出任务书日期: 2011年12月 5日指导教师签名:计划完成日期: 2011年12月 9日基层教学单位责任人签章:主管院长签章:七人表决器设计一、设计目的1.熟悉Quartus II软件的使用。
2.熟悉七人表决器的工作原理3.熟悉EDA开发的基本流程。
EDA技术及应用课程设计报告

《EDA技术及应用课程设计》报告系别:专业班级:学生姓名:指导教师:(课程设计时间:年月日——年月日)。
校秒表是人们日常生活中常用的测时仪器,它能够简单的完成计时、清零等功能,从一年一度的校际运动会到NBA、世界杯、奥运会,都能看到秒表的身影。
1.系统设计要求学习使用EDA集成设计软件MaxplusⅡ设计一个计时范围为0.01秒~1小时的数字秒表,能够精确反映计时时间,并完成复位、计时功能。
秒表计时的最大范围为1小时,精度为0.01秒。
秒表可得到计时时间的分、秒、0.1秒等度量,且各度量单位间可正确进位。
当复位清零有效时,秒表清零并做好计时准备。
任何情况下,只要按下复位开关,秒表都要无条件的进行复位操作,即使在计时过程中也要无条件的清零。
了解全过程中VHDL程序的基本结构,掌握使用EDA工具设计数字系统的设计思路和设计方法。
学习VHDL基本逻辑电路的综合设计应用。
根据电路持点,用层次设计概念。
将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,同时加深层次化设计概念;考虑软件的元件管理深层含义,以及模块元件之间的连接概念,对于不同目录下的同一设计,如何熔合等问题。
2.系统设计方案根据上述设计要求,可以预先设计若干个不同进制的计数器单元模块,然后将其进行例化组合来得到数字秒表系统。
要满足数字秒表的精度,首先要获得精确的计时基准信号,这里的系统精度要求为0.01秒,因此必须设置周期为0.01秒的时钟脉冲。
1/100秒、秒、分等计时单位之间的进位转换可以通过不同进制的计数器实现,我们分别设计十进制计数器和六进制计数器,每位计数器均能输出相应计时单位计数结果,其中,十进制计数器可以实现以0.01秒、0.1秒、1秒和1分为单位的计数,六进制计数器可以实现以10秒、10分为单位的计数,把各级计数器级联,即可同时显示百分秒、秒和分钟。
停止和启动功能可以通过计时使能信号完成。
信号有效时正常计时,否则没有脉冲输入到计数器,从而停止计时。
EDA课程设计报告

EDA课程设计报告•相关推荐EDA课程设计报告在我们平凡的日常里,报告的使用成为日常生活的常态,报告中涉及到专业性术语要解释清楚。
那么报告应该怎么写才合适呢?以下是小编为大家整理的EDA课程设计报告,希望对大家有所帮助。
EDA课程设计报告1实训任务:一、实训目的和要求:(1)熟练掌握keil c51集成开发环境的使用方法(2)熟悉keil c51集成开发环境调试功能的使用和dp?51pro。
net单片机仿真器、编程器、实验仪三合一综合开发平台的使用。
(3)利用单片机的p1口作io口,学会利用p1口作为输入和输出口。
(4)了解掌握单片机芯片的烧写方法与步骤。
(5)学会用单片机汇编语言编写程序,熟悉掌握常用指令的功能运用。
(6)掌握利用protel 99 se绘制电路原理图及pcb图。
(7)了解pcb板的制作腐蚀过程。
二、实训器材:pc机(一台)pcb板(一块)520ω电阻(八只)10k电阻(一只)led发光二极管(八只)25v 10μf电容(一只)单片机ic座(一块)at89c51单片机芯片(一块)热转印机(一台)dp?51pro。
net单片机仿真器、编程器、实验仪三合一综合开发平台(一台)三、实训步骤:(2)将流水灯程序编写完整并使用tkstudy ice调试运行。
(4)打开电源,将编写好的程序运用tkstudy ice进行全速运行,看能否实现任务要求。
(6)制板。
首先利用protel 99 se画好原理图,根据原理图绘制pcb图,然后将绘制好的pcb布线图打印出来,经热转印机转印,将整个布线图印至pcb板上,最后将印有布线图的pcb板投入装有三氯化铁溶液的容器内进行腐蚀,待pcb板上布线图外的铜全部后,将其取出,清洗干净。
(7)焊接。
将所给元器件根据原理图一一焊至pcb板相应位置。
(8)调试。
先把at89c51芯片插入ic座,再将+5v电源加到制作好的功能板电源接口上,观察功能演示的整个过程(看能否实现任务功能)。
eda课程设计报告

eda课程设计报告一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握EDA工具的使用方法。
2. 学生能运用EDA软件进行电路设计与仿真,理解并掌握数字电路的设计原理。
3. 学生了解并掌握基础的硬件描述语言(如VHDL/Verilog),能完成简单的数字系统设计。
技能目标:1. 学生通过EDA软件的操作,培养电子电路设计、仿真与验证的实际操作能力。
2. 学生通过小组合作完成设计项目,提高团队协作与沟通技巧。
3. 学生能够运用所学知识解决实际问题,具备一定的创新意识和动手能力。
情感态度价值观目标:1. 学生在EDA课程学习中,培养对电子科学技术的兴趣和探究精神。
2. 学生通过课程实践,增强自信心和成就感,激发进一步学习的动力。
3. 学生在学习过程中,树立正确的工程伦理观念,认识到技术发展对社会的责任和影响。
课程性质:本课程为电子信息工程及相关专业高年级学生的专业核心课程,旨在通过理论与实践相结合的教学,提高学生的电子设计能力。
学生特点:学生已具备一定的电子技术基础,具有较强的学习能力和实践欲望,对新技术和新工具充满好奇心。
教学要求:结合学生特点,注重培养实际操作能力,鼓励学生创新思维,提高解决实际问题的能力。
通过课程目标分解,确保学生在知识、技能和情感态度价值观方面的全面成长。
后续教学设计和评估将以此为基础,关注学生的学习成果。
二、教学内容根据课程目标,教学内容分为以下三个模块:1. EDA基本概念与工具使用- 教材章节:第一章 EDA技术概述,第二章 EDA工具简介- 内容列举:EDA发展历程,常用EDA软件介绍,软件安装与配置,基本操作流程。
2. 数字电路设计与仿真- 教材章节:第三章 数字电路设计基础,第四章 仿真技术- 内容列举:数字电路设计原理,EDA软件电路设计流程,仿真参数设置,波形分析与验证。
3. 硬件描述语言与数字系统设计- 教材章节:第五章 硬件描述语言,第六章 数字系统设计实例- 内容列举:硬件描述语言基础,VHDL/Verilog语法要点,简单数字系统设计方法,设计实例分析与实操。
广工eda实训8位抢答器实训报告

课程设计课程名称电子技术综合设计题目名称 8位数字抢答器学生学院专业班级学号学生姓名指导教师2015年9月5日目录1 设计任务目的及要求 (2)1.1设计任务 (2)1.2设计要求 (2)1.3工作原理及设计方案 (2)2.1抢答电路 (3)2.2时钟电路 (5)2.2.1时钟分频器 (6)2.2.2超时红灯亮 (7)2.2.3绿灯闪烁 (7)3 设计方案 (8)3.1设计的系统框图 (8)3.2电路工作过程 (8)3.3设计思路。
(9)4 实验结果与数据处理 (10)4.1测试步骤 (10)4.2实验结果 (10)5 结论与问题讨论 (10)5.1完成程度 (10)5.2收获及心得体会 (10)参考文献 (11)附录PC机串口收发的数据 (12)1 设计任务目的及要求1.1设计任务(1)利用各种器件设计一个多路智力竞赛抢答器。
(2)利用DE2教学开发板对所设计的电路进行验证。
(3)总结电路设计结果。
1.2设计要求(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。
(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如,30秒)。
当主持人启动"开始"键后,定时器进行减计时,同时指示灯(绿色灯)开始短暂的闪烁,持续时间位0.5s左右。
(5)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人讲系统清除为止,此时指示灯应停止闪烁。
(6)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00,指示灯应亮起(建议采用红色灯)。
1.3工作原理及设计方案抢答器是为竞赛参赛者答题时进行抢答而设计的一种优先判决器电路,竞赛者可以分为若干组,抢答时各组对主持人提出的问题要在最短的时间内做出判断,并按下抢答按键回答问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程名称 EDA课程设计学院信息工程学院年级班别学号学生姓名指导老师罗思杰2017年12月09日目录一、设计目的和要求: (3)二、EDA设计: (3)三、硬件测试: (15)四、设计和调试过程中遇到的问题及解决方法.. 15五、完成课程设计后的收获或体会: (15)六、设计参考文献: (15)一、设计目的和要求:1、设计目的:通过对FPGA(现场可编程门阵列)芯片的设计实践,使学生掌握一般的PLD (可编程逻辑器件)的设计过程、设计要求、设计内容、设计方法,能根据要求及工艺需要进行电子芯片设计并制定有关技术文件。
培养学生综合运用已学知识解决实际工程技术问题的能力、查阅图书资料和各种工具书的能力、撰写技术报告和编制技术资料的能力,接受一次电子设计自动化方面的基本训练。
培养学生利用EDA技术知识,解决电子设计自动化中常见实际问题的能力,使学生积累实际EDA编程经验。
通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力。
2、设计要求:(1)以EDA技术的基本理论为指导,将设计实验分为基本功能电路和较复杂的电子系统两个层次,要求利用数字电路或者EDA方法去设计并完成特定功能的电子电路的仿真、软硬件调试;(2)熟悉掌握常用仿真开发软件,比如: Quartus II或Xilinx ISE的使用方法。
(3)能熟练运用上述开发软件设计并仿真电路并下载到FPGA中进行调试;(4)学会用EDA技术实现数字电子器件组成复杂系统的方法;学习电子系统电路的安装调试技术。
二、EDA设计:(1)方案比较:1、数字电子钟设计设计一个时钟电路,包括时钟、分钟、秒钟的显示。
要求可对时钟、分钟进行预置和修改操作;可设置3组闹铃时间,时间到时给出10秒的报警声或音乐并给出灯光提示。
具体输入/输出要求如下:① 4位LED数码显示器,分别显示“小时:分钟”或“分钟:秒”时钟;根据需要选择几个LED发光二极管。
②3个按键,具体功能描述如下:[MODE]键——模式转换键,具有“正常——小时(校准)——分钟(校准)——小时(闹铃)——分钟(闹铃)”等5种模式,每按一次,转换一种模式。
假设当前处于正常模式,按一下此键,“小时”闪烁,表示进入“小时”调校模式,再按一次,转入分钟模式,如此类推,正常模式下不闪烁。
还可以配合LED 灯来显示不同的模式。
//状态机[+]键——加“1”键,按下此键,被选中的项目加“1”[-]键——减“1”键,按下此键,被选中的项目减“1”③1路蜂鸣器,用于报警或按键声。
在设计时,学生可充分发挥自己的特长和想象力,自行扩充功能,如“秒表”功能,通信功能,整点报时功能等。
并可进一步将其设计为万年历。
2、简易电子琴设计用实验装置提供的7个按键对应中音的7个音符,设计一个简易电子琴。
用数码管显示当前的音符,用LED灯显示节拍,并能演奏一段或多段预存的音乐。
3、简易十字路口的交通灯控制系统设计用EDA技术设计一个十字路口的交通信号灯控制器,控制A、B两条交叉道路上的车辆通行,具体要求如下:①每条道路设一组信号灯,每组信号灯由红黄绿3个灯组成,绿灯表示允许通行,红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通行,未过停车线的车辆停止通行。
②每条道路上每次通行的时间为25s。
③每次变换通行车道之前,要求黄灯先亮5s,才能变换通行车道。
④黄灯亮时,要求每秒钟闪烁一次。
4、其他。
经过本人查阅资料以及根据本人实际能力,最后本人选择了难度相对较小的第二个方案,利用Verilog语言实现简易电子琴的制作。
(2)Verilog代码编写:Moduletop(LED_AN,key,clk,rst_n,Led,auto,speaker,tone_7s,high_7s,mid_7s,low_ 7s);input clk,auto,rst_n; //时钟输入,自动演奏,键盘输入input [7:0] key;wire [7:0] key; //键盘输入信号output [6:0] tone_7s; //数码管显示音调output reg speaker;output [6:0] high_7s; //显示乐曲高音音符output [6:0] mid_7s; //显示乐曲中音音符output [6:0] low_7s; //显示乐曲低音音符output [7:0] Led; //led灯显示wire [7:0] Led;output [3:0] LED_AN; //选择所要显示的数码reg [3:0] LED_AN = 4'b1000; //初始化,并选择其中一个数码管reg [20:0] i; //控制分频比参数reg clk4;reg[3:0] high,mid,low,tone; //高中低音信号和键盘音调信号reg[13:0] divider,origin; //自动演奏分频系数和初始值reg carry;reg musicout; //乐谱输出信号reg [19:0] count20;reg[7:0] counter;reg [23:0] clk_cnt;assign Led[0]=(~key[0]); //led高电平有效,assign Led[1]=(~key[1]);assign Led[2]=(~key[2]);assign Led[3]=(~key[3]);assign Led[4]=(~key[4]);assign Led[5]=(~key[5]);assign Led[6]=(~key[6]);assign Led[7]=(~key[7]);parameter zero=~8'b10000000,one=~8'b01000000,two=~8'b00100000,three=~8'b00010000,four=~8'b00001000,five=~8'b00000100,six=~8'b00000010,seven=~8'b00000001;always @( posedge clk or negedge rst_n)if (!rst_n)clk_cnt <= 24'd0;elseclk_cnt <= clk_cnt + 1'b1;wire clk6m = (clk_cnt[2]||(clk_cnt[1]&&clk_cnt[0]));// 50M降为6M,用于方便控制音调always @(posedge clk6m) //通过置数,改变分频比。
6M降频到3M beginif(divider==16383 ) // 16383begincarry<=1; //carry的周期根据origin的值到16383的距离而改变divider<=origin; //初始值控制endelsebegindivider<=divider+1'd1;carry<=0;endendalways @(posedge carry) //3Mbeginmusicout<=~musicout; //2分频产生方波信号 //因为carry 周期是随时改变,musicout的周期也随时改变endalways @(posedge clk6m)beginif(auto)speaker<=musicout; //如果automusic为真,输出乐谱elsebegin //否则判断键盘key的输入case(key)zero: beginspeaker<=0;tone=4'b0000;i<=0;endone: beginif(i>=5736)beginspeaker=!speaker;tone=4'b0001; //sperker翻转就会出声,i是用于控制音调i<=0;endelsei<=i+1'd1;endtwo: beginif(i>=5111)beginspeaker=!speaker;tone=4'b0010;i<=0;endelsei<=i+1'd1;endthree: beginif(i>=4552)beginspeaker=!speaker;tone=4'b0011;i<=0;endelsei<=i+1'd1;endfour: beginif(i>=4298)beginspeaker=!speaker;tone=4'b0100;i<=0;endelsei<=i+1'd1;endfive: beginif(i>=3827)beginspeaker=!speaker;tone=4'b0101;i<=0;endelsei<=i+1'd1;endsix: beginif(i>=3409)beginspeaker=!speaker;tone=4'b0110;i<=0;endelsei<=i+1'd1;endseven: beginif(i>=3036)beginspeaker=!speaker;tone=4'b0111;i<=0;endelsei<=i+1'd1;enddefault: beginspeaker<=0;tone=4'b0000;i<=0;endendcaseendendalways @(posedge clk6m) //从6Mhz得到4hz,6M除以2除以4.控制音乐拍子beginif(!auto)begincount20<=20'd0;clk4<=0;endelse if(count20==20'd750000) //3000000%4begincount20<=20'd0;clk4<=~clk4;endelse count20<=count20+20'd1;end//reg[3:0] high,mid,low,tone; //高中低音信号和键盘音调信号always @(posedge clk4) //分频比预置begincase({high,mid,low})'h001:origin<=4933;'h002:origin<=6179;'h003:origin<=7294;'h004:origin<=7787;'h005:origin<=8730;'h006:origin<=9565;'h007:origin<=10310;//低音'h010:origin<=10647;'h020:origin<=11272;'h030:origin<=11831;'h040:origin<=12085;'h050:origin<=12556;'h060:origin<=12974;'h070:origin<=13347;//中音'h100:origin<=13515;'h200:origin<=13830;'h300:origin<=14107;'h400:origin<=14236;'h500:origin<=14470;'h600:origin<=14678;'h700:origin<=14865;//高音endcaseendalways @(posedge clk4)beginif(counter==49)counter<=0; //计时,以实现循环演奏elsecounter<=counter+1'd1;case(counter) //记谱0: {high,mid,low}<='h050;1: {high,mid,low}<='h050;2: {high,mid,low}<='h100;3: {high,mid,low}<='h060;4: {high,mid,low}<='h060;5: {high,mid,low}<='h050;6: {high,mid,low}<='h050;7: {high,mid,low}<='h050;8: {high,mid,low}<='h050;9: {high,mid,low}<='h030;10: {high,mid,low}<='h050;11: {high,mid,low}<='h060;12: {high,mid,low}<='h100;13: {high,mid,low}<='h050;14: {high,mid,low}<='h050;15: {high,mid,low}<='h050;16: {high,mid,low}<='h050;17: {high,mid,low}<='h060;18: {high,mid,low}<='h060;19: {high,mid,low}<='h050;20: {high,mid,low}<='h030;21: {high,mid,low}<='h020;22: {high,mid,low}<='h020;23: {high,mid,low}<='h020;24: {high,mid,low}<='h020;25: {high,mid,low}<='h030;26: {high,mid,low}<='h030;27: {high,mid,low}<='h050;28: {high,mid,low}<='h030;29: {high,mid,low}<='h020;30: {high,mid,low}<='h030;31: {high,mid,low}<='h010;32: {high,mid,low}<='h010;33: {high,mid,low}<='h060;34: {high,mid,low}<='h060;35: {high,mid,low}<='h050;36: {high,mid,low}<='h050;37: {high,mid,low}<='h060;38: {high,mid,low}<='h060;39: {high,mid,low}<='h050;40: {high,mid,low}<='h030;41: {high,mid,low}<='h030;42: {high,mid,low}<='h060;43: {high,mid,low}<='h060;44: {high,mid,low}<='h050;45: {high,mid,low}<='h050;46: {high,mid,low}<='h030;47: {high,mid,low}<='h020;48: {high,mid,low}<='h010;49: {high,mid,low}<='h010; endcaseendled_7s u1(high,high_7s); //高音音符显示led_7s u2(mid,mid_7s); //中音音符显示led_7s u3(low,low_7s); //低音音符显示led_7s u4(tone,tone_7s); //键盘输入音调显示endmodulemodule led_7s(datain,ledout); //7段数码管译码显示模块input [3:0] datain;output reg[6:0] ledout;alwaysbegincase(datain)0:ledout<=~(7'b1000000);1:ledout<=~(7'b1111001);2:ledout<=~(7'b0100100);3:ledout<=~(7'b0110000);4:ledout<=~(7'b0011001);5:ledout<=~(7'b0010010);6:ledout<=~(7'b0000010);7:ledout<=~(7'b1111000);8:ledout<=~(7'b0000000);9:ledout<=~(7'b0010000);default:ledout<=~(7'b1000000);endcaseendendmoduleUcf文件代码:NET "clk" LOC = K19;NET "speaker" LOC = F16; //in yonghushouce page 39NET "rst_n" LOC = K20;NET "tone_7s<0>" LOC = A16;NET "tone_7s<1>" LOC = C17; //the board have 4 shumaguan,zhe shi shu ma guan de 8 ge duanNET "tone_7s<2>" LOC = A17;NET "tone_7s<3>" LOC = V11;NET "tone_7s<4>" LOC = W11;NET "tone_7s<5>" LOC = D7;NET "tone_7s<6>" LOC = D8;NET "key<0>" LOC = C6;NET "key<1>" LOC = D6;NET "key<2>" LOC = A5;NET "key<3>" LOC = B6;NET "key<4>" LOC = A6;NET "key<5>" LOC = C7;NET "key<6>" LOC = A7;NET "key<7>" LOC = B8;NET "Led<0>" LOC = A8;NET "Led<1>" LOC = C9;NET "Led<2>" LOC = A9;NET "Led<3>" LOC = C11;NET "Led<4>" LOC = A11;NET "Led<5>" LOC = B12;NET "Led<6>" LOC = A12;NET "Led<7>" LOC = C13;NET "auto" LOC = A15;NET "LED_AN<0>" LOC = D11;NET "LED_AN<1>" LOC = C10;NET "LED_AN<2>" LOC = D10;NET "LED_AN<3>" LOC = C8;三、硬件测试:红色飓风开发板上电,并把verilog程序载入开发板上,通过人为按顺序按下按键,可以听到较为准确的do,re,mi,fa,sol,la,si七个音,此时数码管按顺序显示1~7。