eda课程设计题目
文件夹
人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便于保存一份美好的回忆。那么我们该如何写一篇较为完美的范文呢?这里我整理了一些优秀的范文,希望对大家有所帮助,下面我们就来了解一下吧。
自动打铃系统设计说明书
学 生 姓 名:周文江
学
号:14112502521
专 业 班 级:1102
报告提交日期:2013.11.26
湖 南 理 工 学 院 物 电 学 院
目录
一、题目及要求简介……………3 1.设计题目…………………3 2.总体要求简介……………3
二、设计方案说明……………3
三、系统采用器件以及模块说明………3 1.系统框图…………4 2.选择的fpga芯片及配置………4 3.系统端口和模块说明…………5
四、各部分仿真结果………5
五、调试及总结………6
六、参考文献……7
七、附录………7
一、题目及要求简介
1、设计题目
设计一个多功能自动打铃系统
2、总体要求简介
① 基本计时和显示功能(24小时制显示),包括:
1.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设计》科学出版社
2008.8 [2].杜慧敏、李宥谋、赵全良 编,《基于verilog的fpga设计基础》 西安电子科技大学出版社 2006.2 [3].韩彬 编,《从零开始走进fpga世界》杭州无线电爱好者协会出版社 2011.8.20
七、附录(实物图及源码)
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 choose.0--timing function.1--alarm clock function.2--adjust 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 function.1--alarm clock function.2--adjust 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] time_cnt;///count time reg [27:0] time_cnt_n;//count time next state always @(posedge sysclk or negedge rst_b)begin if(!rst_b)time_cnt <= 28'h0;else time_cnt <= time_cnt_n;end
always @(*)begin if(time_cnt == count_1s)time_cnt_n <= 28'h0;else if(mode_num!= 2'h0)time_cnt_n <= time_cnt;else time_cnt_n <= time_cnt + 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)&&(time_cnt == count_1s))begin
sec_l <= 4'h0;sec_h <= sec_h + 4'h1;end else if(sec_cb &&(time_cnt == count_1s))begin
sec_l <= 4'h0;sec_h <= 4'h0;end else if(time_cnt == 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)&&(time_cnt == count_1s))
min_l <= min_l + 4'h1;else if((sec_cb)&&(min_l == 4'h9)&&(min_h!= 4'h5)&&(time_cnt == count_1s))begin
min_l <= 4'h0;min_h <= min_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(time_cnt == 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)&&(time_cnt == count_1s))
hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h3)&&(hour_h == 4'h2)&&(time_cnt == count_1s))
hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l == 4'h9)&&(hour_h!= 4'h2)&&(time_cnt == 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)&&(time_cnt == 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
课 程 设 计 报 告
设计题目:用vhdl语言实现数字钟的设计
班 级:电子1002班 学 号:20102625 姓 名:于晓 指导教师:李世平、李宁 设计时间:2012年12月
摘要
数字钟是一种用数字电路技术实现时、分、秒计时的钟表。本设计主要是实现数字钟的功能,程序用vhdl语言编写,整体采用top-to-down设计思路,具有基本的显示年月日时分秒和星期的功能,此外还有整点报时功能。该数字钟的实现程序分为顶层模块、年月模块、日模块、时分秒定时模块、数码管显示模块、分频模块、星期模块,此外还有一个库。该程序主要是用了元件例化的方法,此外还有进程等重要语句。
没有脉冲时,显示时分秒,set按钮产生第一个脉冲时,显示年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7、8个脉冲到来时分别可预置日期、时、分、秒、星期,第 9个脉冲到来时设置星期后预置结束,正常工作,显示的是时分秒和星期。调整设置通过up来控制,up为高电平,upclk有脉冲到达时,预置位加1,否则减1。当整点到达时,报时器会鸣响,然后手动按键停止报时。
关键词:数字钟,vhdl,元件例化,数码管
1、课程设计目的
掌握利用可编程逻辑器件和eda设计工具进行电子系统设计的方法
2、课程设计内容及要求
设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。up为高电平时,upclk有脉冲到达时,预置位加1.否则减1,还可以在此基础上增加其它功能。
3、vhdl程序设计
3.1整体设计思路
本设计采用top-down 模式设计,分模块进行,各功能都使用元件例化方式设计,主要有led显示模块、时分秒定时模块、日期模块、年月模块、分频模块、星期模块,此外还创建了一个程序包,用来实现年月日、时分秒的加减调整。主要运用了过程语句、元件例化语句、信号赋值语句、和顺序语句
图3-1-1 整体结构图
图3-1-2 顶层模块引脚图
3.2各模块设计思路
3.2.1 普通计数器(时、分、秒、月、年计数器)设计
时钟模块通过调用程序包的时分秒加减过程语句实现两个六十进制,一个二十四进制,秒的进位信号作为分的计数时钟信号,分的进位信号作为时的时钟信号。时的进位信号通过管脚映射到日期模块的计数时钟信号。
定时功能在时分秒模块中,是由分计数器在到达59时产生一个脉冲,让speaker产生高电位鸣响。
年月模块主要实现月份的十二进制计数器,和100进制的年份计数器。月份的计数信号由日期模块的进位信号传递过来,年份的时钟信号由月份的进位信号产生。
图3-2-1 时分秒引脚图 图3-2-2 年月引脚图 3.2.2 可变进制计数器(天计数器)模块设计
不同月中的天的数量是不同的,例如“大月”就有31“天”,“小月”有30“天”,平年“二月”有28“天”,而闰年“二月”有29“天”。所以天计数器应该具备进制可变的性能。日期模块主要分为三个部分,预置日期加,预置日期减和产生进位信号,使月份增加。平闰年的判断是通过年月模块传输过来年份信号(两个4位的bcd码),如果高位的信号为“xxx0”且低位的信号为“xx00”(如20,84等),或高位为“xxx1”且低位为“xx10”(如32等)则判断为闰年。这种方法的包含了一百年中的所有闰年的情况。然后判断大月小月可以判断月份来确定30进制还是31进制。进位信号也是分为大月、小月、平年闰年来确定是否产生。
图3-2-3 日模块引脚图
3.2.3 led显示模块
主要通过接受setpin的控制信号来选择显示的内容,把不同的信号赋给输出的端口,从而实现时分秒,年月日的切换。3.2.4 星期模块
通过七进制计数器实现,同时带有预置的功能,不能同年月调整联动,但是能单独调整。
图3-2-4 星期模块引脚图
4、仿真与分析
4.1 日模块
4.1.1 年份为2000年,月份为2月,有29天,初值设为2000年2月28日,仿真中日为:28、29、1、2、„
4.1.2 年份为1999年,月份为2月,有28天,初值设为1999年2月28日,仿真中日为:28、1、2、„
4.1.3 年份为2000年,月份为3月,有31天,初值设为2000年3月30日,仿真中日为:30、31、1、2、„
4.1.4 年份为2000年,月份为4月,有30天,初值设为2000年4月30日,仿真中日为:30、1、2、„
4.2 年月模块
初值设为1999年12月,lock为1时,显示年月,lock为3时,预置月,lock为2时,预置年
4.3 时分秒定时模块
lock为0时,显示时分秒,lock为5时,预置时,lock为6时,预置分,lock为7时,预置秒。当分到达59时,整点报时器响,speaker高电位,随着手动清零,恢复原位。
4.4 星期模块
初值设为星期1,仿真中显示为:1、2、3、4、5、6、7、1、„
4.5 分频模块
4.6 顶层设计模块
5、课程设计总结
本次课程设计历时两天半,经过自己不断的努力完成了数字钟的设计,程序代码的编写调试及仿真。以前只是看书或者编一些很小的程序用来仿真,觉得没怎么难,但当进行此次课程设计真正处理一个较大程序时,问题便都显现出来。虽然在这个过程中遇到了很多的问题,但是最终都得到了很好的解决。
我此次设计的程序是在课本原有数字钟程序的基础上进行添加更改得来的,最初在运行原有程序时很顺利,但是随着加的东西越来越多,程序中出现的问题也就越来越多。很多同学都觉得在已有程序上再添加东西看似简单,实则很容易混乱,理不清头绪,而且这个原有程序是用进程所写,比较麻烦。虽然这样容易出现问题,不过我觉得这是一个锻炼的好机会。、在处理分频模块时,最开始按照老师的要求设置了频率,但是当运行时,发现根本出不来,后来与同学讨论后,发现频率过大,后来改为八分频,使得分频
模块能够使用。在一开始加星期模块时,没怎么考虑,可是当加进去后才发现,星期模块不能与其他模块很好的相连,不能很好的做到与“日模块”相合,后来虽有改动,但最终没能改成功。在加定时器功能时,一开始单独为定时器列了一个模块,所写的程序也很复杂,错误百出,最后程序改好后,仿真却出不来。后来经过同学的提点,就把程序改简单了,单纯的来个脉冲就出现高电平,但后来仿真发现高电平一直在高位,没法给脉冲,最后没办法便手动脉冲。与顶层模块连接后,又发现分满59的脉冲没给,因为我的时分秒全都放在了一起,只能将定时模块挪到时分秒模块中,这样反而使得整个工程简单了一些。
在各个模块都能仿真成功后,顶层模块的程序与仿真却出现了很多问题。首先是顶层模块程序有很多警告,例如“second_waver”没有用到之类的,后来在改动的过程中,便把内变量换为了外变量,但是有些原来的警告没有了,但是新的警告又出现了,原本能够连好的u3与u4 模块均不能正常连接,后来与同学自习查找,才终于将错误找出,由于粗心大意误动了一些元件例化时的变量,使得时间拜拜浪费。最后在仿真的时候,仿真结果出不来,经过与同学商量在每个程序中都给年月日等变量均付了初值,才让仿真出来。
此次课程设计虽然只有短短的两天半的时间,但是经过前期的查找资料,后来的实验室实际操作,再到现在的报告总结,我收获了很多。其实完成一个设计,编程只是很小的一部分,最主要的在于查找资料以及调试程序,此次设计我在查找资料方面做的不是很充分,以至于设计的面很小,而且在遇到问题后不能很快的找出,以后一定要做好准备工作。此次课程设计中遇到的问题看似不大,但都是很好的问题,对我以后的设计有很大的帮助,一定会牢牢记住。
最后,此次课程设计的完成很大程度上取决于老师和同学对我的指导与帮助,这更能说明,一个较大设计的完成及实现,不是仅限于自身,我们要学会与别人交流沟通,才能做到更好。
6、参考文献
[1]李景华,杜玉远.可编程逻辑器件与eda技术.沈阳:东北大学出版社,2000 [2] 姜如东,vhdl语言程序设计及应用,北京邮电大学出版社
[3] 康华光.电子技术基础(数字部分)[m].北 京:高等教育出版社,2001.
[4] [5]
《eda课程设计》
课程设计题目:
基于单片机的温湿度采集系统
姓
名:
xxx
学
班
时
地
号:
xxxx
级:
xxxx
间:
2014.4.21~ 2013.5.5
点:
xxxxx
指 导
老
师:
xxxxx
目录
一、电路原理图..................................................................................2
二、电路pcb图(或实物图).........................................................2
三、电路效果图..................................................................................3
四、设计总结......................................................................................3 附录(单片机源代码)......................................................................4
一、电路原理图
二、电路pcb图(或实物图)
三、电路效果图
四、设计总结
eda的实验还是挺有趣的,比较讲究动手能力,当然也不能忽略团体合作。总的来说本次实验还是成功了,虽然每个环节都遇到了困难。在生成原理图的过程中,就曾把导线画成了placeline而不是placewire,还有芯片的引脚应该用net符号而不是用文本符号,所以这些错误都导致我花在原理图上的时间多了点。而在生成pcb电路图的过程中遇到的困难则是自动布线之后,还有电源的几个脚需要手动布线,所以各个元件之间的位置要布置好,以免发生短路。腐蚀的时候,由于腐蚀的时间太长了,有些碳都化开了,导致里面的铜被腐蚀掉了,所以又为我的工作增加了困难。在焊接的时候,要注意元件的正负极,还要检测锡是否都与那些铜连接上了。最终把led和 dht11的程序烧进去就行了。
本次实验我还是能多多少少学到点什么的,总的来说还是希望能有多一点这样的实习。
附录(单片机源代码)
//51单片机控制温湿度传感器dht11
lcd1602上显示当前机最小系统。//lcd 读进去 写出来 #include
2025年eda课程设计题目(5篇)
文件夹