eda技术课程设计报告5篇

网友 分享 时间:

【请您参阅】下面供您参考的“eda技术课程设计报告5篇”是由阿拉网友精心整理分享的,供您阅读参考之用,希望此例范文对您有所帮助,喜欢就复制下载支持一下小编了!

eda技术课程设计报告篇1

《eda课程设计》

课程设计题目:

基于单片机的温湿度采集系统

名:

xxx

号:

xxxx

级:

xxxx

间:

~

点:

xxxxx

指 导

师:

xxxxx

目录

一、电路原理图..................................................................................2

二、电路pcb图(或实物图).........................................................2

三、电路效果图..................................................................................3

四、设计总结......................................................................................3 附录(单片机源代码)......................................................................4

一、电路原理图

二、电路pcb图(或实物图)

三、电路效果图

四、设计总结

eda的实验还是挺有趣的,比较讲究动手能力,当然也不能忽略团体合作。总的来说本次实验还是成功了,虽然每个环节都遇到了困难。在生成原理图的过程中,就曾把导线画成了placeline而不是placewire,还有芯片的引脚应该用net符号而不是用文本符号,所以这些错误都导致我花在原理图上的时间多了点。而在生成pcb电路图的过程中遇到的困难则是自动布线之后,还有电源的几个脚需要手动布线,所以各个元件之间的位置要布置好,以免发生短路。腐蚀的时候,由于腐蚀的时间太长了,有些碳都化开了,导致里面的铜被腐蚀掉了,所以又为我的工作增加了困难。在焊接的时候,要注意元件的正负极,还要检测锡是否都与那些铜连接上了。最终把led和 dht11的程序烧进去就行了。

本次实验我还是能多多少少学到点什么的,总的来说还是希望能有多一点这样的实习。

附录(单片机源代码)

//51单片机控制温湿度传感器dht11

lcd1602上显示当前机最小系统。//lcd 读进去 写出来 #include

#include

typedef unsigned char byte;typedef unsigned int word;#define uint unsigned int

//定义无符号整型 #define uchar unsigned char typedef bit bool;

//此声明一个布尔型变量即真或假// uchar data_byte,num,i;uchar rh,rl,th,tl,flag;uchar shuzi[4];unsigned char code num1[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};

sbit dht=p2^4;

//dht11data端接单片机的p2^4口//

//***************

数************************************* void delay(uchar ms)//延时模块//延时1毫秒

{

}

void delay1()

//一个for循环大概需要8个多机器周期

//一个机器周期为1us晶振为12mhz也就是说本函数延时8us{

} uchar i;

while(ms--)

for(i=0;i<110;i++);

uchar i;

for(i=0;i<1;i++);void display(void){ // if(flag==0)// {

p2=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)// {

p2=0x0e;p0=num1[shuzi[1]];delay(1);// } }

//**************************dht11

块*************************************// void start()//开始信号

{

dht=1;

delay1();

//主机发出8us高电平,开始信号开始发出 dht=0;

delay(25);

// 主机把总线拉低必须大于18ms

dht11能检测到起始信号

dht=1;

//delay1();

//以下三个延时函数差不多为24usdelay1();delay1();

20-40us

}

uchar receive_byte()

//接收一个字节 8位// {

uchar i,temp;

for(i=0;i<8;i++)//接收8bit的数据

{

while(!dht);

//等待40-50us的低电平开始信号结束

delay1();

//开始信号结束之后延时26us-28us

delay1();delay1();

temp=0;

//时间为26us-28usif(dht==1)

temp=1;

//如果26us-28us

'0'

数据为'1'

while(dht);

//

'0'为26us-28us

'1'为70us

} data_byte<<=1;

//data_byte|=temp;

//接收每一位的数据,相或保存数据

return data_byte;}

void receive()//接收数据// {

uchar t_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;i<7;i++)//差不多8us的延时

delay1();

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;

} }

void main()//主函数模块// { while(1)

//进入死循环

{

receive();

//接收数据

display();

} }

本文地址:http:///zuowen/

eda技术课程设计报告篇2

设计四 拔河游戏机

1、设计一个能进行拔河游戏的电路。

2、电路使用15个(或9个)发光二极管,开机后只有中间一个发亮,此即拔河的中心点。

3、游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。

4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。

5、用数码管显示获胜者的盘数。

教学提示:

1、按钮信号即输入的脉冲信号,每按一次按钮都应能进行有效的计数。

2、用可逆计数器的加、减计数输入端分别接受两路脉冲信号,可逆计数器原始输出状态为0000,经译码器输出,使中间一只二极管发亮。

3、当计数器进行加法计数时,亮点向右移;进行减法计数时,亮点向左移。

4、由一个控制电路指示谁胜谁负,当亮点移到任一方终端时,由控制电路产生一个信号,使计数器停止计数。

5、将双方终端二极管“点亮”信号分别接两个计数器的“使能”端,当一方取胜时,相应的计数器进行一次计数,这样得到双方取胜次数的显示。

6、设置一个“复位”按钮,使亮点回到中心,取胜计数器也要设置一个“复位”按钮,使之能清零。

设计五 乒乓球比赛游戏机

1、设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。

2、用8个(或更多个)led排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的led指示球的当前位置,点亮的led依此从左到右,或从右到左,其移动的速度应能调节。

3、当“球”(点亮的那只led)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。

4、一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。

5、设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。

6、甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。教学提示:

1、用双向移位寄存器的输出端控制led显示来模拟乒乓球运动的轨迹,先点亮位于某一方的第1个led,由击球者通过按钮输入开关信号,实现移位方向的控制。

2、也可用计数译码方式实现乒乓球运动轨迹的模拟,如利用加/减计数器的2个时钟信号实现甲、乙双方的击球,由表示球拍的按钮产生计数时钟,计数器的输出状态经译码驱动led发亮。

3、任何时刻都保持一个led发亮,若发亮的led运动到对方的终点,但对方未能及时输入信号使其向相反方向移动,即失去1分。

4、控制电路决定整个系统的协调动作,必须严格掌握各信号之间的关系。

设计六 交通信号等控制器

1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

2、红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号。

3、主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

4、主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。

5、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。教学提示:

1、主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。

2、选择1hz时钟脉冲作为系统时钟。

3、45秒、25秒、5秒定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,即向主控电路输出“时间到”信号,并使计数器清零,由主控电路启、闭三色信号灯或启动另一计时电路。

4、主控电路是核心,这是一个时序电路,其输入信号为:车辆检测信号(a,b,;45秒、25秒、5秒定时信号(c,d,e),其输出状态控制相应的三色灯。主控电路可以由两个jk触发器和逻辑门构成,其输出经译码后,控制主干道三色灯r、g、y和支干道三色灯r、g、y。

设计七 电子密码锁

1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;

2、在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;

3、从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。教学提示:

1、该题的主要任务是产生一个开锁信号,而开锁信号的形成条件是,输入代码和已设密码相同。实现这种功能的电路构思有多种,例如,用两片8位锁存器,一片存入密码,另一片输入开锁的代码,通过比较的方式,若两者相等,则形成开锁信号。

2、在产生开锁信号后,要求输出声、光信号,声音的产生由开锁信号触动扬声器工作,光信号由开锁信号点亮led指示灯;

3、用按钮开关的第一个动作信号触发一个5秒定时器,若5秒内无开锁信号产生,让扬声器发出特殊音响,以示警告,并输出一个信号推动led不断闪烁。

设计八 彩灯控制器

1、设计一个彩灯控制器,使彩灯(led管)能连续发出四种以上不同的显示形式;

2、随着彩灯显示图案的变化,发出不同的音响声。教学提示:

1、彩灯显示的不同形式可由不同进制计数器驱动led显示完成;

2、音响由选择不同频率cp脉冲驱动扬声器形成。

设计九 脉冲按键电话显示器

1、设计一个具有8位显示的电话按键显示器;

2、能准确地反映按键数字;

3、显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位;

4、*设置一个“重拨”键,按下此键,能显示最后一次输入的电话号码;

5、*挂机2秒后或按熄灭按键,熄灭显示器显示。教学提示:

1、利用中规模计数器的予置数功能可以实现不同的按键对应不同的数字;

2、设置一个计数器记录按键次数,从而实现数字显示的移位。

设计十 简易电子琴

1、设计一个简易电子琴;

2、利用实验箱的脉冲源产生1,2,3。。共7个或14个音阶信号;

3、用指示灯显示节拍;

4、*能产生颤音效果。教学提示:

1、各音阶信号由脉冲源经分频得到。

设计十一 出租车自动计费器

1、设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四位数码管显示总金额,最大值为99。99元;

2、行车里程单价1元/公里,等候时间单价0。5元/10分钟,起价3元(3公里起价)均能通过人工输入。

3、行车里程的计费电路将汽车行驶的里程数转换成与之成正比的脉冲数,然后由计数译码电路转换成收费金额,实验中以一个脉冲模拟汽车前进十米,则每100个脉冲表示1公里,然后用bcd码比例乘法器将里程脉冲乘以每公里单价的比例系数,比例系数可由开关预置。例如单价是1。0元/公里,则脉冲当量为0。01元/脉冲。

4、用led显示行驶公里数,两个数码管显示收费金额。

教学提示:

1、等候时间计费需将等候时间转换成脉冲个数,用每个脉冲表示的金额与脉冲数相乘即得计费数,例如100个脉冲表示10分钟,而10分钟收费0。5元,则脉冲当量为0。05元/脉冲,如果将脉冲当量设置成与行车里程计费相同(0。01元/脉冲),则10分钟内的脉冲数应为500个。

2、用led显示等候时间,两个数码管表示等候时间收费金额。

3、用加法器将几项收费相加,p=p1+p2+p3,4、p1为起价,p2为行车里程计费,p3为等候时间计费,用两个数码管表示结果。

设计十二 洗衣机控制器

1、设计一个电子定时器,控制洗衣机作如下运转:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒……”,定时到则停止;

2、若定时到,则停机发出音响信号;

3、用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;

4、三只led灯表示“正转”、“反转”、“暂停”三个状态。

教学提示:

1、设计20秒、10秒定时电路。

2、电路输出为“正转”、“反转”、“暂停”三个状态。

3、按照设计要求,用定时器的“时间到”信号启动相应的下一个定时器工作,直到整个过程结束。

建议选用教材和参考书目

选用教材: 《电子技术实验指导书》,李国丽,朱维勇主编。中国科技大学出版社 主要参考书:《电子技术基础

模拟部分》(第四版),康华光主编,高教出版社

《数字电子技术基础》(第四版),阎石主编,高教出版社

eda技术课程设计报告篇3

成都大学课程设计教学大纲

课程设计名称: 《eda技术课程设计》 课程代码: 学 分: 1 总学时/周数: 1周

适用专业: 电子工程、通信工程、自动化等专业

一、课程设计目的与任务

本课程设计是在学完eda技术课程后的必修课程,它的教学目的和任务是综合利用所学eda技术知识完成一个具有完整功能的电子系统设计,从系统顶层模块的划分、各功能模块的硬件语言描述(编程)、各模块及整体电路仿真、到最后下载到可编程器件实现真实的电路,让学生亲自体验一次采用现代电子设计自动化技术完成一个电子系统设计的全过程。让学生得到一次自主使用vhdl语言描述电路功能的训练机会,从而提高对vhdl语言的使用能力,加深对仿真在设计中的重要作用的认识,提高对使用max+plus2eda软件工具的熟练程度,最终获得初步的电子系统设计经验,为毕业设计和将来从事电子设计的相关工作打下基础

二、课程设计基本要求

本课程设计,采用以学生自主设计为主教师指导为辅的原则,让学生有一个充分发挥自我想像的空间,设计分阶段进行,在独立力完成了方案设计后,组织一次交流讨论会,互相启发开阔设计思路,尽可能使学生在这个具有创新思维、难度最高的设计环节获得更多的收益,通过该课程设计更深入更全面地提高使用max+plus2软件工具完成设计全过程的熟练程度,尤其是要提高仿真和试验开发系统的使用能力,设计最终要做出真实电路并上电检测其功能和性能指标是否达到了预定的目标,最后写出课程设计报告。

三、课程设计选题原则

所选题目应是社会生活、生产中常见的、学生易于理解和把握且感兴趣的、对所学知识尽可能综合全面派上用场的、难易程度适中的、一周时间能够完成的的题目。

四、课程设计内容及时间安排

1.设计内容:根据具体设计题目和提出的功能性能指标要求,查阅相应参考资料,将所设计的电路系统划分成若干功能模块完成顶层结构设计(方案设计),对各功能模块用硬件描述语言描述以完成程序设计,对个功能模块及电路系统整体做仿真设计以验证其正误,将设计文件下载至可编程逻辑器件在实验开发装置上检测功能性能指标以完成真实电路的设计。写出课程设计报告,其中要有顶层结构图,各功能模块的程序,各功能模块和整个电路系统的仿真波形图,并对这些设计图纸和设计程序所表达的逻辑思想、工作原理给以说明,写出设计步骤和设计心得。2.课程设计时间:开始设计的前一周公布设计题目下达设计任务,用半周时间完成方案设计、程序设计,另外半周完成仿真、下载、测试。

五、课程设计主要参考资料

潘松 黄继业 编著《eda技术使用教程》(第二版)科学出版社 2005。

王振红主编《vhdl数字电路设计与应用实践教程》机械工业出版社,2006年。

六、课程设计考核方式及成绩评定

考核成绩由两部分组成:现场检测设计出的真实电路占50%,课程设计报告占50%。

大纲撰写人: 杨显富 系(教研室):(签字)学院学术委员会意见:(签字)

学院审核:(签字、盖章)年 月 日

注:请在黄色显示的区域里用“仿宋 五号”字体填写。

eda技术课程设计报告篇4

《电子系统设计自动化》课程设计报告

学 院: 机电工程学院

题 目: 数字时钟电路设计 课 程: 《电子系统设计自动化》课程设计 专业班级: 电信10级2 班 学生姓名: 刘星 秦玉杰 王艳艳 学 号: 1004101035 1004101036 1004101038

完成日期:2013年 12 月 27 日

摘要:

eda(electronic design automation)电子设计自动化,就是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成用软件方式设计的电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次实习利用quartusii为设计软件、vhdl为硬件描述语言,结合所学的数字电路的知识设计一个24时多功能数字钟,具有正常时、分、秒计时,动态显示,清零、快速校时校分、整点报时、花样显示等功能。利用硬件描述语言vhdl对设计系统的各个子模块进行逻辑描述,采用模块化的设计思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑分割、逻辑综合优化、逻辑布线、逻辑仿真,最终将设计的软件系统下载设计实验系统,对设计的系统进行硬件测试。

一、课程设计基本要求和任务

《eda课程设计》是继《模拟电子技术基础》、《数字电子技术基础》课程后,电信专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分。 目的和任务

(1)通过课程设计使学生能熟练掌握一种eda软件(quartusii)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程,为以后进行工程实际问题的研究打下设计基础。

(2)通过课程设计使学生能利用eda软件(quartusii)进行至少一 个电子技术综合问题的设计,设计输入可采用图形输入法或vhdl硬件描述语言输入法。(3)通过课程设计使学生初步具有分析、寻找和排除电子电路中常见 故障的能力。

(4)通过课程设计使学生能独立写出严谨的、有理论根据的、实事求是的、文理通顺的字迹端正的课程设计报告。 功能要求:

(1)具有时、分、秒计数显示功能,以24小时循环计时。(2)时钟计数显示时有led灯的花样显示。(3)具有调节小时、分钟、秒及清零的功能。(4)具有整点报时功能。

总体方框图:

本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用vhdl语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。 设计原理:

数字钟电路设计要求所设计电路就有以下功能:时、分、秒计时显示,清零,时、分调节,整点报时及花样显示。分、秒计时原理相似,可以采用60进制bcd码计数器进计时;小时采用24进制bcd码进行计时;在设计时采用试验电路箱上的模式7电路,不需要进行译码电路的设计;所设计电路具有驱动扬声器和花样显示的led灯信号产生。试验箱模式7的电路如图一所示:图一模式七实验电路图

性能指标及功能设计:

(1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。

模块划分自顶向下分解

模块描述

时钟计时模块完成时、分、秒计数,及清零、调节时和分钟的功能。时、分、秒计数的原理相同,均为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灯进行花样显示。输出控制模块有扬声器控制器和花样显示控制器两个子模块组成 顶层电路图

顶层文件是由四个模块组成,分别是时、分、秒计数器和报警的vhdl语言封装而成。经过锁定引脚再重新编译获得如下顶层原理电路图:

三、方案实现

各模块仿真及描述

(1)秒计数器模块仿真图:将标准秒信号送入”秒计数器”,秒计数器采用60进制计数器,每累计60秒发出一个分脉冲信号,该信号将作为分计数器的时钟脉冲,daout代表秒输出。

(2)分计数器电路仿真图:也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号将被送到时计数器,daout端口代表分钟输出

(3)小时计数器电路仿真图:时计数器采用12进制计时器,可实现对24小时累 计。每累计12小时,发出一个脉冲信号。

引脚配置完成后再进行一次全程编译,无误则可以下载到试验箱上进行硬件测试。硬件验证的方法如下:选择实验模式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年

library ieee;

use ;use ;entity minute is port(clk,clk1,reset,sethour:in std_logic;enhour:out std_logic;daout:out std_logic_vector(6 downto 0));end entity minute;architecture fun of minute is signal count :std_logic_vector(6 downto 0);signal enhour_1, enhour_2: std_logic;--enmin_1为59分时的进位信号 begin--enmin_2由clk调制后的手动调时脉冲信号串 daout<=count;enhour_2<=(sethour and clk1);--sethour为手动调时控制信号,高电平有效 enhour<=(enhour_1 or enhour_2);process(clk,reset,sethour)begin if(reset='0')then--若reset为0,则异步清零 count<=“0000000”;elsif(clk'event and clk='1')then--否则,若clk上升沿到 if(count(3 downto 0)=“1001”)then--若个位计时恰好到“1001”即9 if(count <16#60#)then--又若count小于16#60#,即60 if(count=“1011001”)then--又若已到59d enhour_1<='1';--则置进位为1 count<=“0000000”;--count复0 else count<=count+7;--若count未到59d,则加7,即作“加6校正” end if;--使前面的16#60#的个位转变为8421bcd的容量 else count<=“0000000”;--count复0(有此句,则对无效状态电路可自启动)end if;--end if(count<16#60#)elsif(count <16#60#)then count<=count+1;--若count<16#60#则count加1 enhour_1<='0' after 100 ns;--没有发生进位 else count<=“0000000”;--否则,若count不小于16#60# count复0 end if;--end if(count(3 downto 0)=“1001”)end if;--end if(reset='0')end process;end fun;

3、时计数器模块的vhdl语言:

library ieee;use ;use ;

if(clk'event and clk='1')then if(dain=“0000000”)then speak<=count1(1);if(count1>=“10”)then count1<=“00”;--count1为三进制加法计数器 else count1<=count1+1;end if;end if;end if;end process speaker;lamper:process(clk)begin if(rising_edge(clk))then if(count<=“10”)then if(count=“00”)then lamp<=“001”;--elsif(count=“01”)then lamp<=“010”;elsif(count=“10”)then lamp<=“100”;end if;count<=count+1;else count<=“00”;end if;end if;end process lamper;end fun;

循环点亮三只灯

eda技术课程设计报告篇5

自动打铃系统设计说明书

学 生 姓 名:周文江

号:14112502521

专 业 班 级:1102

报告提交日期:

湖 南 理 工 学 院 物 电 学 院

目录

一、题目及要求简介……………3 1.设计题目…………………3 2.总体要求简介……………3

二、设计方案说明……………3

三、系统采用器件以及模块说明………3 1.系统框图…………4 2.选择的fpga芯片及配置………4 3.系统端口和模块说明…………5

四、各部分仿真结果………5

五、调试及总结………6

六、参考文献……7

七、附录………7

一、题目及要求简介

1、设计题目

设计一个多功能自动打铃系统

2、总体要求简介

① 基本计时和显示功能(24小时制显示),包括:

小时制显示 2.动态扫描显示; 3.显示格式:88-88-88 ② 能设置当前时间(含时、分)③ 能实现基本打铃功能,规定:

06:00起床铃,打铃5s

二、设计方案说明

本次设计主要采用verilog hdl硬件描述性语言、分模块法设计的自动打铃系统。由于这次用的开发板提供的是50m晶振。首先要对时钟进行分频,当计时到2fa_f07f时完成1s分频,通过计时到60s产生分钟进位信号,再通过60分钟产生时钟进位信号。最后通过6个寄存器对时分秒进行锁存最终输出到8个数码管上完成显示。当显示时钟和默认闹钟时钟相等时,驱动打铃模块。通过key_mode,key_turn,key_change查看闹钟,时钟显示,调整时钟。

三、系统采用器件以及模块说明

1.系统框图如下:

:下如图框统系

2.选择的fpga芯片及配置:本次系统设计采用的fpga芯片是alter公司生产的cyclone ii ep2c8q208c8。该芯片是208个管脚,138个io,并且具有两个内部pll,而且内嵌乘法器,8k的逻辑门,资源相当丰富。完成这次自动打铃系统的设计总共消耗250个le单元,22个io口,131个寄存器。经过综合后,本系统最高能实现145m的运行速度。通过quartus ii 软件观察到内部的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_h 6个寄存器对时分秒进行锁存然后送入数码管显示

(4)闹钟模块

当设定的闹钟时间和数码管上显示的时间相等时驱动闹钟,完成打铃,持续时间5s。

(5)数码管显示模块

显示模块是由8个位选8个段选构成的显示模块,利用人眼的余晖效果完成动态扫描,显示时间。

四、各部分仿真结果

测试文件如下:

module clock_tb;reg sysclk,rst_b;reg key_mode,key_turn,key_change;wire buzzer;

wire [7:0] led_sel,led_data;clock i_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));initial begin sysclk = 1'b1;rst_b = 1'b0;//复位信号

#30 rst_b = 1'b1;end always #10 sysclk = ~sysclk;//输入的系统时钟,20ns的周期 endmodule

五、调试及总结

本次课程设计总共花费了四天左右的时间,设计了自动打铃系统。通过这次的设计更加熟悉了对eda技术的了解和认识,在中也发现许多不足的地方。使用了自顶而下的设计方法,使得设计更加的简单和明了。在调试过程中,有些代码的设计不规范性,导致时序相当缓慢,甚至编译综合都会报错。在不断的修改下,发现时序电路和组合逻辑最好分开写,这样便于查错,和修改代码。毕竟verilog hdl语言不同于c语言,不能以软件的思想来设计,而是要利用电路的思想来编程,这样可以更好的节省资源,使得时序也比较的简单明了。在以后的学习及程序设计当中,我们一定要倍加小心,在程序出现不正常运行的情况下要耐心调试,尽量做到精益求精。

最后通过这次eda方面的课程设计,提高了我们对eda领域及通信电路设计领域的认识,有利于培养我们在通信电路eda方面的设计能力。有利于锻炼我们独立分析问题和解决问题的能力。

六、文献参考

[1].王金明、左自强 编,《eda技术与verilog设计》科学出版社

[2].杜慧敏、李宥谋、赵全良 编,《基于verilog的fpga设计基础》 西安电子科技大学出版社 [3].韩彬 编,《从零开始走进fpga世界》杭州无线电爱好者协会出版社

七、附录(实物图及源码)

module clock(//input

sysclk,rst_b,key_mode,key_change,key_turn,//output

buzzer,led_sel,led_data);

input sysclk,rst_b;//sysclk--global system clock,rst_b--global reset signal input key_mode;//mode clock function input key_turn;//choose adjust minute or hour input key_change;//count add 1 output buzzer;//device buzzer output [7:0] led_sel;//led tube bit choose

output [7:0] led_data;//led_tube 8 bit data choose

parameter init_hour = 8'h12;parameter init_min = 8'h59;parameter init_sec = 8'h50;//initial time :12:59:50 parameter init_alarm_hour = 8'h06;parameter init_alarm_min = 8'h30;//initial alarm time : 06:30:0 parameter count_1s = 28'h2fa_f07f;//count time 1s;

reg [7:0] sec;reg [7:0] min;reg [7:0] hour;reg [3:0] min_l;//minute low 4 bit reg [3:0] min_h;//minute high 4 bit reg [3:0] hour_l;//hour low 4 bit reg [3:0] hour_h;//hour high 4 bit reg [23:0] key_time;//press key away shake reg key_mode_n;//press key_mode next state reg key_change_n;//press key_change next state reg key_turn_n;//press key_turn next state wire key_mode_press;//sure button press key_mode wire key_turn_press;//sure button press key_turn wire key_change_press;//sure button press key_change

always @(posedge sysclk)key_mode_n <= key_mode;assign key_mode_press =(!key_mode)&&(key_mode_n);always @(posedge sysclk)key_turn_n <= key_turn;assign key_turn_press =(!key_turn)&&(key_turn_n);always @(posedge sysclk)key_change_n <= key_change;assign key_change_press =(!key_change)&&(key_change_n);

always @(posedge sysclk or negedge rst_b)begin if(!rst_b)key_time <= 24'h0;else if(key_time!= 24'h0)

key_time <= key_time + 24'h1;else if((key_time == 24'h0)&&(key_mode_press || key_change_press || key_turn_press))key_time <= key_time + 24'h1;

end

reg [1:0] mode_num;//key mode..0--timing clock function always @(posedge sysclk or negedge rst_b)begin if(!rst_b)mode_num <= 2'b00;else if(mode_num == 2'h3)mode_num <= 2'h0;else if(key_mode_press &&(key_time == 24'h0))

mode_num <= mode_num + 2'h1;end

always @(*)begin if(mode_num == 2'h1)begin

min = init_alarm_min;hour = init_alarm_hour;end else begin

min = {min_h,min_l};hour = {hour_h,hour_l};end end

reg fm;//choose turn hour or minute always @(posedge sysclk or negedge rst_b)begin if(!rst_b)fm <= 1'b0;else if(key_turn_press &&(mode_num == 2'h2)&&(key_time == 24'h0))

fm <= ~fm;end

reg [27:0] timet;///count time reg [27:0] timet_n;//count time next state always @(posedge sysclk or negedge rst_b)begin if(!rst_b)timet <= 28'h0;else timet <= timet_n;end

always @(*)begin if(timet == count_1s)timet_n <= 28'h0;else if(mode_num!= 2'h0)timet_n <= timet;else timet_n <= timet + 28'h1;end

reg [3:0] sec_l;//second low 4 bit reg [3:0] sec_h;//second high 4 bit wire sec_cb;//second carry bit signal assign sec_cb =(sec_l == 4'h9)&&(sec_h == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin

sec_l <= init_sec[3:0];sec_h <= init_sec[7:4];end else if((sec_l == 4'h9)&&(sec_h!= 4'h5)&&(timet == count_1s))begin

sec_l <= 4'h0;sec_h <= sec_h + 4'h1;end else if(sec_cb &&(timet == count_1s))begin

sec_l <= 4'h0;sec_h <= 4'h0;end else if(timet == count_1s)

sec_l <= sec_l + 4'h1;end

wire min_cb;//minute carry bit signal assign min_cb =(min_l == 4'h9)&&(min_h == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin

min_l <= init_min[3:0];min_h <= init_min[7:4];end else if((sec_cb)&&(min_l!=4'h9)&&(timet == count_1s))

min_l <= min_l + 4'h1;else if((sec_cb)&&(min_l == 4'h9)&&(min_h!= 4'h5)&&(timet == count_1s))begin

min_l <= 4'h0;min_h <= min_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(timet == count_1s))begin

min_l <= 4'h0;min_h <= 4'h0;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_l!= 4'h9))

min_l = min_l + 4'h1;else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==

24'h0)&&(min_l == 4'h9)&&(min_h!=4'h5))begin

min_l = 4'h0;min_h = min_h + 4'h1;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_l == 4'h9)&&(min_h ==4'h5))begin

min_l = 4'h0;min_h = 4'h0;end end

always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin

hour_l <= init_hour[3:0];hour_h <= init_hour[7:4];end else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h9)&&(hour_h!= 4'h2)&&(timet == count_1s))

hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h3)&&(hour_h == 4'h2)&&(timet == count_1s))

hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l == 4'h9)&&(hour_h!= 4'h2)&&(timet == count_1s))begin

hour_l <= 4'h0;hour_h <= hour_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(hour_l == 4'h3)&&(hour_h == 4'h2)&&(timet == count_1s))begin

hour_l <= 4'h0;hour_h <= 4'h0;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l!= 4'h9)&&(hour_h!=4'h2))

hour_l <= hour_l + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l!= 4'h3)&&(hour_h ==4'h2))

hour_l <= hour_l + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l == 4'h9)&&(hour_h!=4'h2))begin

hour_l <= 4'h0;hour_h <= hour_h + 4'h1;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==

24'h0)&&(hour_l == 4'h3)&&(hour_h ==4'h2))begin

hour_l <= 4'h0;hour_h <= 4'h0;end end

wire buzzer_en;assign buzzer_en =(init_alarm_min == {min_h,min_l})&&(init_alarm_hour == {hour_h,hour_l});

led_tube i_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));buzzer i_buzzer(.sysclk(sysclk),.rst_b(rst_b),.buzzer_en(buzzer_en),.buzzer(buzzer));endmodule

48 2078530
");