Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 标准规范 > eda课程设计5篇[修改版],eda课程设计报告

eda课程设计5篇[修改版],eda课程设计报告

收藏

本作品内容为eda课程设计5篇[修改版],格式为 docx ,大小 29872 KB ,页数为 32页

eda课程设计5篇[修改版]


('第一篇:eda课程设计数字钟一、设计要求设计一个数字钟,具体要求如下:1、具有时、分、秒计数显示功能,以24小时循环计时。2、具有清零、校时、校分功能。3、具有整点蜂鸣器报时以及LED花样显示功能。二、设计方案根据设计要求,数字钟的结构如图8-3所示,包括:时hour、分minute、秒second计数模块,显示控制模块sel_clock,七段译码模块deled,报时模块alert。三、VHDL程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;----Uncommentthefollowinglibrarydeclarationifinstantiating----anyXilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;entityddzisport(rst,clk:instd_logic;hour_h:outstd_logic_vector(6downto0);hour_l:outstd_logic_vector(6downto0);min_h:outstd_logic_vector(6downto0);min_l:outstd_logic_vector(6downto0);sec_h:outstd_logic_vector(6downto0);sec_l:outstd_logic_vector(6downto0));endddz;architectureBehavioralofddzissignalcnt:std_logic_vector(15downto0);signalsec_h_in:std_logic_vector(3downto0);signalsec_l_in:std_logic_vector(3downto0);signalmin_h_in:std_logic_vector(3downto0);signalmin_l_in:std_logic_vector(3downto0);signalhour_h_in:std_logic_vector(3downto0);signalhour_l_in:std_logic_vector(3downto0);signalclk_s,clk_m,clk_h:std_logic;beginprocess(rst,clk)beginifrst=\'0\'thensec_h_in\'0\');sec_l_in\'0\');clk_msec_l_inifsec_h_in=5thensec_h_inclk_melsesec_h_inclk_mendif;elsesec_l_inclk_mendif;endif;endprocess;process(rst,clk_m)beginifrst=\'0\'then--min_h_in\'0\');min_l_in\'0\');--clk_hmin_l_inmin_h_inclk_mendif;elsemin_l_inendif;endif;endprocess;process(rst,clk_n)beginifrst=\'0\'then--hour_h_in\'0\');hour_l_in\'0\');--clk_hhour_l_inhour_h_inclk_nendif;elsehour_l_inendif;endif;endprocess;process(sec_l_in)begincasesec_l_iniswhen"0000"=>sec_lsec_lsec_lsec_lsec_lsec_lsec_lsec_lsec_lsec_lsec_lprocess(sec_h_in)begincasesec_h_iniswhen"0000"=>sec_hsec_hsec_hsec_hsec_hsec_hsec_hsec_hsec_hsec_hsec_hprocess(min_l_in)begincasemin_l_iniswhen"0000"=>min_lmin_lmin_lwhen"0011"=>min_lmin_lmin_lmin_lmin_lmin_lmin_lmin_lprocess(min_h_in)begincasemin_h_iniswhen"0000"=>min_hmin_hmin_hmin_hmin_hmin_hmin_hmin_hmin_hmin_hmin_hendcase;endprocess;process(hour_l_in)begincasehour_l_iniswhen"0000"=>hour_lhour_lhour_lhour_lhour_lhour_lhour_lhour_lhour_lhour_lhour_lprocess(hour_h_in)begincasehour_h_iniswhen"0000"=>hour_hhour_hhour_hhour_hhour_hhour_hhour_hhour_hhour_hhour_hhour_h四、VHDL仿真结果五、课程设计心得通过这次课程设计,有效得巩固了课本所学的知识,而且通过上机仿真不断发现问题并及时改正,加深了我们对该课程设计的印象。这次课程设计,进一步加深了我对EDA的了解,使我对isp有了更深的了解,使我对应用软件的方法设计硬件系统有了更加浓厚的兴趣。除此之外,我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合,从实践中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。总之,这次课程设计让我学会了很多,对今后的生活工作用处也颇深。第二篇:《EDA课程设计》《EDA课程设计》课程设计题目:基于单片机的温湿度采集系统姓名:xxx学班时地号:xxxx级:xxxx间:2014.4.21~2013.5.5点:xxxxx指导老师:xxxxx目录一、电路原理图..................................................................................2二、电路PCB图(或实物图).........................................................2三、电路效果图..................................................................................3四、设计总结......................................................................................3附录(单片机源代码)......................................................................41一、电路原理图二、电路PCB图(或实物图)2三、电路效果图四、设计总结EDA的实验还是挺有趣的,比较讲究动手能力,当然也不能忽略团体合作。总的来说本次实验还是成功了,虽然每个环节都遇到了困难。在生成原理图的过程中,就曾把导线画成了Placeline而不是Placewire,还有芯片的引脚应该用NET符号而不是用文本符号,所以这些错误都导致我花在原理图上的时间多了点。而在生成PCB电路图的过程中遇到的困难则是自动布线之后,还有电源的几个脚需要手动布线,所以各个元件之间的位置要布置好,以免发生短路。腐蚀的时候,由于腐蚀的时间太长了,有些碳都化开了,导致里面的铜被腐蚀掉了,所以又为我的工作增加了困难。在焊接的时候,要注意元件的正负极,还要检测锡是否都与那些铜连接上了。最终把LED和3DHT11的程序烧进去就行了。本次实验我还是能多多少少学到点什么的,总的来说还是希望能有多一点这样的实习。附录(单片机源代码)//51单片机控制温湿度传感器DHT11LCD1602上显示当前机最小系统。//LCD读进去写出来#include#includetypedefunsignedcharBYTE;typedefunsignedintWORD;#defineuintunsignedint//定义无符号整型#defineucharunsignedchartypedefbitBOOL;//此声明一个布尔型变量即真或假//uchardata_byte,num,i;ucharRH,RL,TH,TL,flag;ucharshuzi[4];unsignedcharcodenum1[11]={0xc0,0xf9,0xa4,0xb0,0x99,40x92,0x82,0xf8,0x80,0x90,0x7f};sbitdht=P2^4;//dht11data端接单片机的P2^4口////延时函数voiddelay(ucharms)//延时模块//延时1毫秒{}voiddelay1()//一个for循环大概需要8个多机器周期//一个机器周期为1us晶振为12MHz也就是说本函数延时8us{}5uchari;while(ms--)for(i=0;iuchari;for(i=0;iP2=0x07;P0=num1[shuzi[2]];delay(1);//}//if(flag==1)//{P2=0x0b;P0=num1[shuzi[3]];delay(1);//}//if(flag==2)//{P2=0x0d;P0=num1[shuzi[0]];delay(1);//}//if(flag==3)6//{P2=0x0e;P0=num1[shuzi[1]];delay(1);//}}//dht11测试某块//voidstart()//开始信号{dht=1;delay1();//主机发出8us高电平,开始信号开始发出dht=0;delay(25);//主机把总线拉低必须大于18msDHT11能检测到起始信号dht=1;//delay1();//以下三个延时函数差不多为24usdelay1();delay1();20-40us}ucharreceive_byte()//接收一个字节8位//{uchari,temp;for(i=0;i{while(!dht);//等待40-50us的低电平开始信号结束delay1();//开始信号结束之后延时26us-28usdelay1();delay1();temp=0;//时间为26us-28usif(dht==1)temp=1;//如果26us-28us\'0\'数据为\'1\'while(dht);//\'0\'为26us-28us\'1\'为70us}data_byte//data_byte=temp;//接收每一位的数据,相或保存数据returndata_byte;8}voidreceive()//接收数据//{ucharT_H,T_L,R_H,R_L,check,num_check,i;start();//开始信号//调用开始信号子函数dht=1;//主机设为输入判断从机DHT11响应信号if(!dht)//判断从机是否有低电平响应信号//{while(!dht);//判断从机发出40us的低电平响应信号是否结束//while(dht);//判断从机发出40us的高电平是否结束如结束则从机进入发送数据状态,主机进入数据接收状态数//两个while语句加起来就是DHT11的响应信号R_H=receive_byte();//湿度高位调用接受一个字节的子函R_L=receive_byte();//湿度低位T_H=receive_byte();//温度高位T_L=receive_byte();//温度低位check=receive_byte();//校验位//结束信号dht=0;//当最后一bit数据接完毕后主机拉低电平50us//for(i=0;idelay1();dht=1;//总线由上拉电阻拉高进入空闲状态num_check=R_H+R_L+T_H+T_L;if(num_check==check)//判断读到的四个数据之和是否与校验位相同{RH=R_H;RL=R_L;TH=T_H;TL=T_L;check=num_check;}shuzi[0]=RH/10;shuzi[1]=RH%10;shuzi[2]=TH/10;shuzi[3]=TH%10;}}voidmain()//主函数模块//{10while(1)//进入死循环{receive();//接收数据display();}}第三篇:EDA课程设计考试序号:28自动打铃系统设计说明书学生姓名:周文江学号:14112502521专业班级:1102报告提交日期:2013.11.26湖南理工学院物电学院目录一、题目及要求简介……………31.设计题目…………………32.总体要求简介……………3二、设计方案说明……………3三、系统采用器件以及模块说明………31.系统框图…………42.选择的FPGA芯片及配置………43.系统端口和模块说明…………5四、各部分仿真结果………5五、调试及总结………6六、参考文献……7七、附录………7一、题目及要求简介1、设计题目设计一个多功能自动打铃系统2、总体要求简介①基本计时和显示功能(24小时制显示),包括:1.24小时制显示2.动态扫描显示;3.显示格式:88-88-88②能设置当前时间(含时、分)③能实现基本打铃功能,规定:06:00起床铃,打铃5s二、设计方案说明本次设计主要采用VerilogHDL硬件描述性语言、分模块法设计的自动打铃系统。由于这次用的开发板提供的是50M晶振。首先要对时钟进行分频,当计时到2FA_F07F时完成1s分频,通过计时到60s产生分钟进位信号,再通过60分钟产生时钟进位信号。最后通过6个寄存器对时分秒进行锁存最终输出到8个数码管上完成显示。当显示时钟和默认闹钟时钟相等时,驱动打铃模块。通过key_mode,key_turn,key_change查看闹钟,时钟显示,调整时钟。三、系统采用器件以及模块说明1.系统框图如下::下如图框统系2.选择的FPGA芯片及配置:本次系统设计采用的FPGA芯片是Alter公司生产的CycloneIIEP2C8Q208C8。该芯片是208个管脚,138个IO,并且具有两个内部PLL,而且内嵌乘法器,8K的逻辑门,资源相当丰富。完成这次自动打铃系统的设计总共消耗250个LE单元,22个IO口,131个寄存器。经过综合后,本系统最高能实现145M的运行速度。通过QuartusII软件观察到内部的RTL图如下3.系统端口和模块说明(1)分频部分分频器的作用是对50Mhz的系统时钟信号进行分频,得到频率为1hz的信号,即为1S的计时信号。(2)按键部分按键key_mode--0为显示计时,1为闹钟显示,2为调整时间。按键key_turn—0为调整小时,1为调整分钟。按键key_change—每按一次加1(3)计时部分通过sec_L,sec_H,min_L,min_H,hour_L,hour_H6个寄存器对时分秒进行锁存然后送入数码管显示(4)闹钟模块当设定的闹钟时间和数码管上显示的时间相等时驱动闹钟,完成打铃,持续时间5s。(5)数码管显示模块显示模块是由8个位选8个段选构成的显示模块,利用人眼的余晖效果完成动态扫描,显示时间。四、各部分仿真结果测试文件如下:moduleclock_tb;regsysclk,rst_b;regkey_mode,key_turn,key_change;wirebuzzer;wire[7:0]led_sel,led_data;clockI_clock(.sysclk(sysclk),.rst_b(rst_b),.key_mode(key_mode),.key_change(key_change),.key_turn(key_turn),.buzzer(buzzer),.led_sel(led_sel),.led_data(led_data));initialbeginsysclk=1\'b1;rst_b=1\'b0;//复位信号#30rst_b=1\'b1;endalways#10sysclk=~sysclk;//输入的系统时钟,20ns的周期endmodule五、调试及总结本次课程设计总共花费了四天左右的时间,设计了自动打铃系统。通过这次的设计更加熟悉了对EDA技术的了解和认识,在中也发现许多不足的地方。使用了自顶而下的设计方法,使得设计更加的简单和明了。在调试过程中,有些代码的设计不规范性,导致时序相当缓慢,甚至编译综合都会报错。在不断的修改下,发现时序电路和组合逻辑最好分开写,这样便于查错,和修改代码。毕竟VerilogHDL语言不同于C语言,不能以软件的思想来设计,而是要利用电路的思想来编程,这样可以更好的节省资源,使得时序也比较的简单明了。在以后的学习及程序设计当中,我们一定要倍加小心,在程序出现不正常运行的情况下要耐心调试,尽量做到精益求精。最后通过这次EDA方面的课程设计,提高了我们对EDA领域及通信电路设计领域的认识,有利于培养我们在通信电路EDA方面的设计能力。有利于锻炼我们独立分析问题和解决问题的能力。六、文献参考[1].王金明、左自强编,《EDA技术与Verilog设计》科学出版社2008.8[2].杜慧敏、李宥谋、赵全良编,《基于Verilog的FPGA设计基础》西安电子科技大学出版社2006.2[3].韩彬编,《从零开始走进FPGA世界》杭州无线电爱好者协会出版社2011.8.20七、附录(实物图及源码)moduleclock(//Inputsysclk,rst_b,key_mode,key_change,key_turn,//Outputbuzzer,led_sel,led_data);inputsysclk,rst_b;//sysclk--globalsystemclock,rst_b--globalresetsignalinputkey_mode;//modechoose.0--Timingfunction.1--Alarmclockfunction.2--adjustfunctioninputkey_turn;//chooseadjustminuteorhourinputkey_change;//countadd1outputbuzzer;//devicebuzzeroutput[7:0]led_sel;//ledtubebitchooseoutput[7:0]led_data;//led_tube8bitdatachooseparameterinit_hour=8\'h12;parameterinit_min=8\'h59;parameterinit_sec=8\'h50;//initialtime:12:59:50parameterinit_alarm_hour=8\'h06;parameterinit_alarm_min=8\'h30;//initialalarmtime:06:30:0parameterCount_1s=28\'h2FA_F07F;//counttime1s;reg[7:0]sec;reg[7:0]min;reg[7:0]hour;reg[3:0]min_L;//minutelow4bitreg[3:0]min_H;//minutehigh4bitreg[3:0]hour_L;//hourlow4bitreg[3:0]hour_H;//hourhigh4bitreg[23:0]key_time;//presskeyawayshakeregkey_mode_n;//presskey_modenextstateregkey_change_n;//presskey_changenextstateregkey_turn_n;//presskey_turnnextstatewirekey_mode_press;//sureButtonpresskey_modewirekey_turn_press;//surebuttonpresskey_turnwirekey_change_press;//surebuttonpresskey_changealways@(posedgesysclk)key_mode_nalways@(posedgesysclkornegedgerst_b)beginif(!rst_b)key_timekey_timeendreg[1:0]mode_num;//keymode..0--Timingfunction.1--Alarmclockfunction.2--adjustfunctionalways@(posedgesysclkornegedgerst_b)beginif(!rst_b)mode_nummode_numalways@()beginif(mode_num==2\'h1)beginmin=init_alarm_min;hour=init_alarm_hour;endelsebeginmin={min_H,min_L};hour={hour_H,hour_L};endendregfm;//chooseturnhourorminutealways@(posedgesysclkornegedgerst_b)beginif(!rst_b)fmfmreg[27:0]time_cnt;///counttimereg[27:0]time_cnt_n;//counttimenextstatealways@(posedgesysclkornegedgerst_b)beginif(!rst_b)time_cntalways@()beginif(time_cnt==Count_1s)time_cnt_nreg[3:0]sec_L;//secondlow4bitreg[3:0]sec_H;//secondhigh4bitwiresec_cb;//secondcarrybitsignalassignsec_cb=(sec_L==4\'h9)&&(sec_H==4\'h5);always@(posedgesysclkornegedgerst_b)beginif(!rst_b)beginsec_Lsec_Lsec_Lsec_Lwiremin_cb;//minutecarrybitsignalassignmin_cb=(min_L==4\'h9)&&(min_H==4\'h5);always@(posedgesysclkornegedgerst_b)beginif(!rst_b)beginmin_Lmin_Lmin_Lmin_Lmin_L=min_L+4\'h1;elseif((fm)&&(mode_num==2\'h2)&&(key_change_press)&&(key_time==24\'h0)&&(min_L==4\'h9)&&(min_H!=4\'h5))beginmin_L=4\'h0;min_H=min_H+4\'h1;endelseif((fm)&&(mode_num==2\'h2)&&(key_change_press)&&(key_time==24\'h0)&&(min_L==4\'h9)&&(min_H==4\'h5))beginmin_L=4\'h0;min_H=4\'h0;endendalways@(posedgesysclkornegedgerst_b)beginif(!rst_b)beginhour_Lhour_Lhour_Lhour_Lhour_Lhour_Lhour_Lhour_L24\'h0)&&(hour_L==4\'h3)&&(hour_H==4\'h2))beginhour_Lwirebuzzer_en;assignbuzzer_en=(init_alarm_min=={min_H,min_L})&&(init_alarm_hour=={hour_H,hour_L});led_tubeI_led_tube(.sysclk(sysclk),.rst_b(rst_b),.scan_time(24\'h1F090),.data0({1\'h1,sec_L}),.data1({1\'h1,sec_H}),.data2({1\'h1,4\'hA}),.data3({1\'h1,min[3:0]}),.data4({1\'h1,min[7:4]}),.data5({1\'h1,4\'hA}),.data6({1\'h1,hour[3:0]}),.data7({1\'h1,hour[7:4]}),.led_data(led_data),.led_sel(led_sel));buzzerI_buzzer(.sysclk(sysclk),.rst_b(rst_b),.buzzer_en(buzzer_en),.buzzer(buzzer));endmodule第四篇:EDA课程设计《电子系统设计自动化》课程设计报告学院:机电工程学院题目:数字时钟电路设计课程:《电子系统设计自动化》课程设计专业班级:电信10级2班学生姓名:刘星秦玉杰王艳艳学号:100410103510041010361004101038完成日期:2013年12月27日-2摘要:EDA(ElectronicDesignAutomation)电子设计自动化,就是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成用软件方式设计的电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次实习利用QuartusII为设计软件、VHDL为硬件描述语言,结合所学的数字电路的知识设计一个24时多功能数字钟,具有正常时、分、秒计时,动态显示,清零、快速校时校分、整点报时、花样显示等功能。利用硬件描述语言VHDL对设计系统的各个子模块进行逻辑描述,采用模块化的设计思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑分割、逻辑综合优化、逻辑布线、逻辑仿真,最终将设计的软件系统下载设计实验系统,对设计的系统进行硬件测试。一、课程设计基本要求和任务《EDA课程设计》是继《模拟电子技术基础》、《数字电子技术基础》课程后,电信专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分。1.1目的和任务(1)通过课程设计使学生能熟练掌握一种EDA软件(QUARTUSII)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程,为以后进行工程实际问题的研究打下设计基础。(2)通过课程设计使学生能利用EDA软件(QUARTUSII)进行至少一个电子技术综合问题的设计,设计输入可采用图形输入法或VHDL硬件描述语言输入法。(3)通过课程设计使学生初步具有分析、寻找和排除电子电路中常见故障的能力。(4)通过课程设计使学生能独立写出严谨的、有理论根据的、实事求是的、文理通顺的字迹端正的课程设计报告。1.2功能要求:(1)具有时、分、秒计数显示功能,以24小时循环计时。(2)时钟计数显示时有LED灯的花样显示。(3)具有调节小时、分钟、秒及清零的功能。(4)具有整点报时功能。1.3总体方框图:本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。1.4设计原理:数字钟电路设计要求所设计电路就有以下功能:时、分、秒计时显示,清零,时、分调节,整点报时及花样显示。分、秒计时原理相似,可以采用60进制BCD码计数器进计时;小时采用24进制BCD码进行计时;在设计时采用试验电路箱上的模式7电路,不需要进行译码电路的设计;所设计电路具有驱动扬声器和花样显示的LED灯信号产生。试验箱模式7的电路如图一所示:图一模式七实验电路图1.5性能指标及功能设计:(1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。-52.2模块划分自顶向下分解2.3模块描述时钟计时模块完成时、分、秒计数,及清零、调节时和分钟的功能。时、分、秒计数的原理相同,均为BCD码输出的计数器,其中分和秒均为六十进制BCD码计数器,小时为二十四进制BCD码计数器。设计一个具有异步清零和设置输出功能的六十进制BCD码计数器,再设计一个具有异步清零和设置输出功能的二十四进制计数器,然后将它们通过一定的组合构成时钟计时模块。各个输入/输出端口的作用为:(1)clk为计时时钟信号,reset为异步清零信号;(2)sethour为小时设置信号,setmin为分钟设置信号;(3)daout[5„0]为小时的BCD码输出,daout[6...0]为秒和分钟的BCD码输出,enmin和enhour为使能输出信号。(4)在时钟整点的时候产生扬声器驱动信号和花样显示信号。由时钟计时模块中分钟的进行信号进行控制。当contr_en为高电平时,将输入信号clk送到输出端speak用于驱动扬声器,同时在clk的控制下,输出端lamp[2..0]进行循环移位,从而控制LED灯进行花样显示。输出控制模块有扬声器控制器和花样显示控制器两个子模块组成2.4顶层电路图顶层文件是由四个模块组成,分别是时、分、秒计数器和报警的VHDL语言封装而成。经过锁定引脚再重新编译获得如下顶层原理电路图:三、方案实现3.1各模块仿真及描述(1)秒计数器模块仿真图:将标准秒信号送入”秒计数器”,秒计数器采用60进制计数器,每累计60秒发出一个分脉冲信号,该信号将作为分计数器的时钟脉冲,daout代表秒输出。(2)分计数器电路仿真图:也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号将被送到时计数器,daout端口代表分钟输出(3)小时计数器电路仿真图:时计数器采用12进制计时器,可实现对24小时累计。每累计12小时,发出一个脉冲信号。-9引脚配置完成后再进行一次全程编译,无误则可以下载到试验箱上进行硬件测试。硬件验证的方法如下:选择实验模式7;时钟脉冲clk与clock0(1024Hz)信号相连;键8和键5均为低电平,时钟正常计时,数码管1和2显示秒,数码管4和5显示分钟,数码管7和8显示小时;键8为高电平时,时钟清零;键5为高电平时,按下键7和键4进行调时调分操作;当时钟为整点的时候,三个发光二极管进行循环移位操作,同时扬声器发声。五、心得体会经过源程序的编辑、逻辑综合、逻辑适配、编程下载成功后,在EDA实验开发系统进行硬件验证时却发现实验结果不正确,扬声器无法发声。经检查,自己设计的管脚文件有错。将管脚锁定文件修改后,重新进行逻辑适配、编程下载成功后,实验结果仍然不正确,百思不得其解。无奈之下,决定重头开始排查每一步的细节,确定各个模块的功能完全实现并且顶层模块功能正确。修改之后,重新进行逻辑适配、编程下载验证,实验结果完全正确。这次EDA课程设计历时两个星期,在整整两个星期的日子里,不仅巩固了以前所学过的知识,而且学到了很多书本上学不到的知识,同时锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,对未来有了更多的信心。这次课程设计,进一步加深了我对EDA的了解,使我对QuartusII的基本操作有所了解,使我对应用软件的方法设计硬件系统有了更加浓厚的兴趣。通过这次课程设计,我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合,从实践中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中,我遇到许多问题,毕竟是第一次应用VHDL进行硬件电路系统的设计,许多EDA的知识还没有充分的掌握,遇到困难也是在所难免的,同时发现了自己的不足之处:学习知识表面化,没有深入了解它们的原理。总的来说,这次设计的数字时钟电路还是比较成功的,尽管在设计中遇到了很多问题,最后在老师的辛勤指导、同学的帮助和自己不断思考下,终于迎刃而解,有点小小的成就感,觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!参考文献[1]崔健明.《电子电工EDA仿真技术》高等教育出版社2000年[2]卢杰,赖毅.《VHDL与数字电路设计》科学出版社2001年[3]潘松,黄继业.《EDA技术实用教程》科学出版社2002年[4]朱运利.《EDA技术应用》电子工业出版社2004年[5]张明.《VHDL实用教程》电子科技大学出版社1999年[6]彭介华.《电子技术课程设计与指导》高等教育出版1997年-11LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYminuteISPORT(clk,clk1,reset,sethour:INSTD_LOGIC;enhour:OUTSTD_LOGIC;daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYminute;ARCHITECTUREfunOFminuteISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);SIGNALenhour_1,enhour_2:STD_LOGIC;--enmin_1为59分时的进位信号BEGIN--enmin_2由clk调制后的手动调时脉冲信号串daout3、时计数器模块的VHDL语言:LIBRARYIEEE;useIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;-14IF(clk\'eventandclk=\'1\')THENIF(dain="0000000")THENspeak="10")THENcount1循环点亮三只灯第五篇:EDA_电子琴课程设计基于VHDL原理图及文本输入法的简单电子琴电路的设计1.1课程设计目的本课程设计主要是基于VHDL文本输入法设计乐曲演奏电路,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自动演奏已存入的歌曲。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部分组成。系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进行编程和时序仿真)。该设计最重要的一点就是通过按键控制不同的音调发生,每一个音调对应不同的频率,从而输出对应频率的声音。1.2课程设计内容(1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。(2)系统演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲。(3)能够自动演奏多首乐曲,且乐曲可重复演奏。1.3课程设计原理本课程设计目的在于灵活运用EDA技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不同音阶的按键时,能够发出对应频率的声音。故系统可分为乐曲自动演奏模块(AUTO)、音调发生模块(TONE)和数控分频模块(FENPIN)三部分。系统的整体组装设计原理图如图1-1所示。图1-1系统的整体组装设计原理图由于设计分模块组成,每个单独的模块都是一个完整的源程序,分别实现不同性质的功能,但是每个模块又是紧密关联的,前一个模块的输出很可能是后一模块的输入。如AUTO模块的音符信号输出就是TONE模块的音符信号输入。另外,时钟脉冲信号在本课程设计中用的最多,用处也最大,一般情况下时钟信号处上升沿有效,判断和控制各个计数器计数多少。2简易电子琴的设计过程根据系统设计要求,系统该系统基于计算机中时钟分频器的原理,设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲自动演奏模块、音调发生模块和数控分频模块三部分组成。2.1乐曲自动演奏模块乐曲自动演奏模块的作用是产生8位发生控制输入信号。当进行自动演奏时,由存储在此模块的8位二进制数作为发声控制输入,从而自动演奏乐曲。该模块的VHDL源程序主要由3个工作进程组成,分别为PULSE0,MUSIC和COM1。PULSE0的作用是根据键盘输入(自动演奏)的值(0或1)来判断计数器COUNT以及脉冲CLK2的输出值。部分源程序如下:PULSE0:PROCESS(CLK,AUTO)--工作进程开始VARIABLECOUNT:INTEGERRANGE0TO8;--定义计数器变量,值从0到8IFAUTO=\'1\'THEN--键盘输入为1COUNT:=0;CLK2ELSIF(CLK\'EVENTANDCLK=\'1\')THEN--时钟输入信号为1COUNT:=COUNT+1;--计数器加1当确定了时钟信号输出的值后,在第二个PROCESS中就可以由它控制8位发声控制输入信号了。即CLK2的值为0时,COUNT0为1。最后的COM1便是由前两个PROCESS所确定的COUNT0、AUTO和键盘输入信号值INDEX2将8位的二进制数转化为音符信号的输出,达到自动演奏的目的。部分源程序如下:IFAUTO=\'0\'THENCASECOUNT0ISWHEN0=>INDEX0WHEN4=>INDEX0骤,AUTO模块的源程序符号编辑图如图3-1。图3-1AUTO模块的符号编辑图2.1.1乐曲演奏模块文本程序:--程序名称:AUTO.VHD--程序功能:采用VHDL语言编程产生8位发声控制输入信号。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYAUTOISPORT(CLK:INSTD_LOGIC;--系统时钟信号AUTO:INSTD_LOGIC;--键盘输入/自动演奏CLK2:BUFFERSTD_LOGIC;--时钟输出INDEX2:INSTD_LOGIC_VECTOR(7DOWNTO0);--键盘输入信号INDEX0:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--音符信号输出ENDAUTO;ARCHITECTUREBEHAVIORALOFAUTOISSIGNALCOUNT0:INTEGERRANGE0TO31;--定义信号计数器,有32个信号元素BEGINPULSE0:PROCESS(CLK,AUTO)--PULSE0工作进程开始VARIABLECOUNT:INTEGERRANGE0TO8;--定义变量计数器,从0到8BEGINIFAUTO=\'1\'THEN--键盘输入为1COUNT:=0;CLK2--计数器值为0,时钟信号2幅值为0ELSIF(CLK\'EVENTANDCLK=\'1\')THEN--输入的时钟信号为其他值COUNT:=COUNT+1;--计数器加1即为1IFCOUNT=4THENCLK2ELSIFCOUNT=8THENCLK2--MUSIC工作进程开始BEGINIF(CLK2\'EVENTANDCLK2=\'1\')THEN--时钟信号2为1IF(COUNT0=31)THEN--计数器值为31COUNT0--计数器清0ELSECOUNT0ENDIF;ENDIF;ENDPROCESS;COM1:PROCESS(COUNT0,AUTO,INDEX2)BEGINIFAUTO=\'0\'THEN--键盘输入为0CASECOUNT0IS--由计数器从0到31的取值判断音符信号的8位二进制数WHEN0=>INDEX0--3WHEN1=>INDEX0--3WHEN2=>INDEX0--3WHEN3=>INDEX0WHEN4=>INDEX0WHEN5=>INDEX0WHEN6=>INDEX0WHEN7=>INDEX0WHEN8=>INDEX0WHEN9=>INDEX0WHEN10=>INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0NULL;ENDCASE;ELSEINDEX0ENDIF;ENDPROCESS;ENDBEHAVIORAL;2.2音调发生模块--3--5--5--5--6--8--8--8--3--2--2--1--1--5--5--4--4--4--3--2--2--5--5--4--4--3--3--2--2--将音符信号0的值赋给音符信号2音调发生模块的作用是产生音阶的分频预置值。当8位发声控制输入信号中的某一位为高电平时,则对应某一音阶的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此得到每个音阶对应的频率。该模块的唯一输入信号INDEX对应就是自动模块中最后的输出INDEX0,音符显示信号CODE,高低音显示信号HIGH和音符分频系数都是根据音符输入确定的。比如我们自定义INDEX第8位为高电平时,它的分频系数则为773Hz,音符显示信号为1001111,即是773的二进制表示,此时高低音显示1表示高音。部分源程序如下:CASEINDEXISWHEN"00000010"=>TONE0TONE0TONE03—2TONE模块的符号编辑图2.2.1音调发生模块文本程序:--程序名称:TONE.VHD--程序功能:采用VHDL语言编程产生音阶的分频预置值。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTONEISPORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);--音符输入信号CODE:OUTSTD_LOGIC_VECTOR(6DOWNTO0);--音符显示信号HIGH:OUTSTD_LOGIC;--高低音显示信号TONE0:OUTINTEGERRANGE0TO2047);--音符的分频系数ENDTONE;ARCHITECTUREARTOFTONEISBEGINSEARCH:PROCESS(INDEX)BEGINCASEINDEXISWHEN"00000001"=>TONE0--分频系数773Hz,音符显示1001111,显示低音WHEN"00000010"=>TONE0TONE0TONE0TONE0TONE0TONE0TONE0TONE0数控分频模块是对时基脉冲进行分频,得到与0、1、2、3、4、5、6、7八个音符相对应的频率。FENPIN模块的源程序符号编辑图如图3-3。3—3FENPIN模块符号编辑图该模块主要由4个工作进程组成。首先,根据系统时钟信号的输入得到时基脉冲以及计数器的值,而时钟信号在AUTO模块中便已给出,两者之间的设置关系类似于AUTO模块中第一个工作进程的设置。第二个PROCESS是此模块的核心,即由时基脉冲值转化为音符的频率。部分源程序如下:VARIABLECOUNT11:INTEGERRANGE0TO2047;--定义频率计数器,从0到2047HzIF(PRECLK\'EVENTANDPRECLK=\'1\')THEN--时基脉冲为1时IFCOUNT11--频率计数器小于音符分频系数COUNT11:=COUNT11+1;FULLSPKSCOUNT11:=0;FULLSPKSIF(FULLSPKS\'EVENTANDFULLSPKS=\'1\')THEN--扬声器音频信号为1COUNT2:=NOTCOUNT2;IFCOUNT2=\'1\'THENSPKS--扬声器输出为1ELSESPK.2.3.1数控分频模块文本程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFENPINISPORT(CLK1:INSTD_LOGIC;--系统时钟信号TONE1:ININTEGERRANGE0TO2047;--音符分频系?SPKS:OUTSTD_LOGIC);--驱动扬声器的音频信?ENDENTITYFENPIN;ARCHITECTUREARTOFFENPINISSIGNALPRECLK:STD_LOGIC;--定义时基脉冲信号SIGNALFULLSPKS:STD_LOGIC;BEGINPROCESS(CLK1)VARIABLECOUNT:INTEGERRANGE0TO8:=0;--定义变量计数器,从0到8BEGINIF(CLK1\'EVENTANDCLK1=\'1\')THEN--据时钟信号为1时COUNT:=COUNT+1;--判断计数器取值为1IFCOUNT=2THENPRECLK--若计数器计4PRECLKCOUNT:=0;--时基脉冲为0,计数器清零ELSEENDIF;ENDIF;ENDPROCESS;PROCESS(PRECLK,TONE1)VARIABLECOUNT11:INTEGERRANGE0TO2047;--定义变量频率计数器11,从0到2047HzBEGINIF(PRECLK\'EVENTANDPRECLK=\'1\')THEN--PRECLK脉冲上升沿触发IFCOUNT11--若计数器11值小于音符信号1COUNT11:=COUNT11+1;FULLSPKS--计数器加1,音频信号为1ELSECOUNT11:=0;FULLSPKSENDIF;ENDIF;ENDPROCESS;PROCESS(FULLSPKS)--音频信号输出进程开始--VARIABLEcount2:integerrange0to1:=0;--定义变量计数器2,初值为0--BEGINIF(FULLSPKS\'EVENTANDFULLSPKS=\'1\')THENifcount2=1thencount2:=0;elsecount2:=1;endif;IFCOUNT2=1THENSPKSELSESPKSENDIF;ENDIF;ENDPROCESS;ENDART;2.4顶层设计该DIANZIQIN模块是整个电子琴设计的核心,也是VHDL程序的主程序,前面3个源程序都是作为子程序分别实现电子琴的某一功能,而DIANZIQIN模块则通过调用子程序最终实现乐曲演奏的目的,奏出美妙的乐曲。利用VHDL语言COMPONENT将三个模块组合起来,其中3个模块和DIANZIQIN模块的输入输出是一一对应的,比如AUTO对应HANDTOAUTO,TONE0对应TONE2,SPKS对应SPKOUT等,该模块的符号编辑图如图3-4。图3-4DIANZIQIN系统模块的符号编辑图该图描述的是DIANZIQIN模块输入输出的变量表示,整个系统的整体组装设计原理图就是这4幅编辑图按输入输出关系顺序连接而成的。2..4.1顶层模块文本程序:--程序名称:DIANZIQIN.VHD--程序功能:采用VHDL语言编写主程序调用3个子程序,实现乐曲演奏的功能。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDIANZIQINISPORT(CLK32MHZ:INSTD_LOGIC;--系统时钟信号HANDTOAUTO:INSTD_LOGIC;--键盘输入/自动演奏信号CODE1:OUTSTD_LOGIC_VECTOR(6DOWNTO0);--音符显示信号INDEX1:INSTD_LOGIC_VECTOR(7DOWNTO0);--键盘输入信号HIGH1:OUTSTD_LOGIC;--高低音节信号SPKOUT:OUTSTD_LOGIC);--音频信号END;ARCHITECTUREARTOFDIANZIQINISCOMPONENTAUTO--引用AUTO元件PORT(CLK:INSTD_LOGIC;AUTO:INSTD_LOGIC;--输入自动演奏信号INDEX2:INSTD_LOGIC_VECTOR(7DOWNTO0);--输入8位控制信号INDEX0:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--输出8位的音符ENDCOMPONENT;COMPONENTTONE--引用TONE元件PORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTSTD_LOGIC_VECTOR(6DOWNTO0);HIGH:OUTSTD_LOGIC;TONE0:OUTINTEGERRANGE0TO2047);ENDCOMPONENT;COMPONENTFENPIN--引用FENPIN元件PORT(CLK1:INSTD_LOGIC;TONE1:ININTEGERRANGE0TO2047;SPKS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTONE2:INTEGERRANGE0TO2047;--定义主程序音调频率信号SIGNALINDX:STD_LOGIC_VECTOR(7DOWNTO0);--定义8位的音符信号BEGINU0:AUTOPORTMAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO);--调用自动演奏模块U1:TONEPORTMAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1);--调用音调发生模块U2:FENPINPORTMAP(CLK1=>CLK32MHZ,TONE1=>TONE2,SPKS=>SPKOUT);ENDART;--调用数控分频模块3系统仿真系统仿真是在实际系统上进行实验研究比较困难时适用的必不可少的工具,它是指通过系统模型实验去研究一个已经存在或正在设计的系统的过程,通俗地讲,就是进行模型实验。因而,系统仿真的结果决定整个课程设计任务完成的到位程度。3.1时序仿真编译完成后,可以对所进行的设计进行仿真,下面介绍一下仿真的步骤。(1)在file下拉菜单中选择new,再在其弹出的对话框中点选,点击OK确定,则进入了文本编辑器,在编辑区输入程序,然后保存为.vhd文件(注意保存时实体名要与文件名一致,否则编译时会出错);接下来在file下来菜单选择project,在其下拉菜单中选Assign,在其下拉菜单中选device,最后选择,建立工程文件。第三步,在菜单栏里选择,再选,确定即可;第四步,在菜单栏中点击MAX+plusII再用下拉菜单中选compiler进行编译。(2)打开波形编辑器,在Node菜单中选择EnterNodesfromSNF项,列出所有的信号,选择所需要的信号,然后画出输入信号的波形,最后将该文件以.scf的扩展名存盘。(3)在MAX+plusⅡ菜单中打开仿真器窗口,单击Start按钮,当仿真器结束工作时,单击OpenSCF按钮,就可以看到仿真的结果。本课程设计的仿真平台是MAX+plus,Ⅱ通过对VHDL源程序进行编译检错,然后创建波形文件(后缀名为.scf),加入输入输出变量,选择适用的芯片(EPF10K10LC84-3)以及设定仿真结束时间(100us),设置好输入初值进行仿真,得到仿真波形图。由于电子琴4个模块都是独立的程序,可分别对各个程序仿真,验证输入输出的正确性,但在最终能演奏出乐曲的则是顶层设计模块。3.1.1乐曲自动演奏模块的仿真如图3-1所示。图3-1乐曲自动演奏模块的仿真图该图输入系统时钟信号CLK初值设为0,自动演奏AUTO设为1,键盘输入信号INDEX2为00,INDEX0为音符信号输出,是8位的二进制代码它根据COUNT0的值改变而改变。3.1.2音调发生模块的仿真如图3-2所示。图3-2音调发生模块的仿真图该图输入音符信号INDEX初值为00,输出是音符显示信号CODE为01,高低音显示信号为0,音符的分频系数为11111111即2047Hz。3.1.3数控分频模块的仿真如图3-3所示。图3-3数控分频模块的仿真图该图输入系统时钟信号CLK1初值为0(各输出值都是在时钟信号的下降沿有效),音符分频系数TONE1为00100000即1290Hz,驱动扬声器的音频信号SPKS输出为1。3.1.4简易电子琴整个系统的仿真如图3-4所示。图3-4简易电子琴整个系统的仿真图该图输入系统时钟信号CLK32MHZ初值为0,自动演奏信号HANDTOAUTO初值为0,键盘输入信号INDEX1为00000000;输出音符信号CODE1则为0110000,高低音节信号HIGH1变为1,即高音,音频信号SPKOUT即输出0,输出为1时CODE1变为0110100,这时出现10ns的延时。在仿真时由于系统各方面原因影响,出现延时属于正常现象。3.2原理图综合时序仿真步骤:1、在file下拉菜单里面选择new,再在其弹出的对话框中点选,即可进入原理图编辑界面,右击鼠标选择(entersymbol..)则会弹出如右图的对话框,然后左键分别双击对话框中SymbolFile栏中的AUTO、FENPIN和TONE则会调入相应模块的原理图,然后按照电子琴设计要求将各个模块连接起来,组成完整的电子琴演奏系统,如图3-5所示。3-5系统的整体组装设计原理图将绘制好的原理图保存,确保无误后运行进行仿真。2、时序仿真:(1)建立波形文件。(2)输入信号近点。(3)设置波形参数。(4)设置仿真时间宽度。(5)加上输入信号。(6)波形文件存盘。(7)运行仿真器。(8)观察分析波形。之后得到的仿真时序图如图3-6所示。图3-6系统原理图仿真时序图3.3问题分析在此次课程理论设计中,不可避免地遇到许多棘手的问题,一是对EDA技术的不太了解,二是对理论知识的学习不够扎实,初涉VHDL语言以致很多语法和语言基本结构、算法生疏,运用不灵活。因此,在编写源程序上遇到极大的难题,而且在编译运行程序时对出错的语句理解不到位,导致难于下手修正错误语句、语法,这使得在设计程序时遇到更大的很大的麻烦。还有就是VHDL语言的数据类型和语法结构都很容易造成混淆,比如INSTD_LOGIC_VECTOR(7DOWNTO0)语句,它有时既可以认为是从7下降到0,也可认为是从0上升到7,当输入有多位时,这就容易造成在读懂仿真波形图时读位数倒置,使仿真现象与理论结果相出入。在分频模块程序设计时遇到了编译不出来,图形错误等编译时总是出现非法的错误,经过老师修改和指正,最后终于编译成功,完成了该系统的文本设计。4设计小结通过这本的HDL课程设计,既锻炼了我的动手能力,也让我加深了对课堂上所学到的理论知识的理解,这给我提供了一个在学习生活中很难得的理论联系实际的机会,让了深刻体验到在对于设计时遇到的不同问题时,首先应该理解问题关键所在,因为用语言编写程序需要仔细认真的态度,一点点错误漏洞将导致整个源程序无法编译运行,阻碍下一步工作完成进度。还有我也发现了在平时学习过程中难于发现的许多缺点不足。比如实践的机会过少,所学的理论知识不能够灵活运用,因此在遇到实际的问题时无法正确处理;再者在课堂上获得的专业知识过于浅显,很多的有关基本操作原理、操作方法都理解不了;课外知识了解的也过少,导致在课程设计初期,面对完全陌生的设计课题无从下手,不知所措。这就提醒我在注重学好理论的同时,更要加强动手的能力,不要一味的照搬课本上的知识,要创新,才能在当今竞争激烈的社会中立足,记住,命运掌握在自己手里,一切都只能靠我们自己。1课程设计1.1课程设计目的……………………………………………………11.2课程设计内容……………………………………………………………11.3课程设计原理……………………………………………………………12简易电子琴的设计过程2.1乐曲自动演奏模块………………………………………………………22.1.1乐曲演奏模块文本程序……………………………………………………………32.2音调发生模块……………………………………………………………42.2.1音调发生模块文本程序………………………………………………………………52.3数控分频模块……………………………………………………………6.2.3.1数控分频模块文本程序…………………………………………………………72.4顶层设计…………………………………………………………………82..4.1顶层模块文本程序………………………………………………………………93系统仿真3.1时序仿真…………………………………………………………………103.1.1乐曲自动演奏模块的仿真…………………………………………………………113.1.2音调发生模块的仿真………………………………………………………………113.1.3数控分频模块的仿真………………………………………………………………113.1.4简易电子琴整个系统的仿真………………………………………………………113.2原理图综合时序仿真……………………………………………………123.3问题分析…………………………………………………………………134设计小结…………………………………………………………14',)


  • 编号:1700828415
  • 分类:标准规范
  • 软件: wps,office word
  • 大小:32页
  • 格式:docx
  • 风格:商务
  • PPT页数:29872 KB
  • 标签:

广告位推荐

相关标准规范更多>