数字系统设计课程设计报告——多功能数字钟.doc_第1页
数字系统设计课程设计报告——多功能数字钟.doc_第2页
数字系统设计课程设计报告——多功能数字钟.doc_第3页
数字系统设计课程设计报告——多功能数字钟.doc_第4页
数字系统设计课程设计报告——多功能数字钟.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子信息学院课程设计报告课 程 名 称: 数字系统设计课程设计 题 目: 多功能数字钟设计 年级/专业/班: 2011级电科X班 学 生 姓名1: xxx 学 号: 学 生 姓名2: xxx 学 号: 2014 年 7 月 1 日目 录1课程设计目标和流程分析31.1课程设计目标31.2开发环境说明31.3设计流程说明32系统设计32.1系统架构设计32.2子模块分析32.3调试结果33小结3附录:主要代码3课程设计目标和流程分析1.1 课程设计目标基于Verilog语言描述系统的功能;在quartusII环境中编译通过;仿真通过并得到正确的波形;掌握数字系统的分析和设计方法。能够熟练的、合理的选用集成电路器件。掌握数字钟得设计制作方法。用Verilog硬件描述语言设计数字钟,实现的目标如下:1)具有时、分、秒计数显示功能,以二十四小时循环计时。2)具有调节小时,分钟的功能,可以通过按键选择时和分。3)具有整点报时及闹铃时间可调的功能。4)数字钟具有四种模式:正常显示、时间调整、闹铃时间调整、秒表。1.2 开发环境说明硬件:采用基于EP1C12Q240C8芯片的FPGA开发平台FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。:硬件:采用quartusIIQuartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。语言:VerilogHDL硬件描述语言简介 Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995. 模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。1.3 设计流程说明开始Input/output定义寄存器NY闹钟校准Layer=2b11?Layer=2b10?时钟校准Layer=2b01?计时整点?秒表计时NYNNYN当前时间=闹钟时间?蜂鸣器整点报时 Y闹铃响 数码管显示结束2 系统设计分频模块2.1 系统架构设计 clk显示模块控制模块计时模块数码管闹钟模块蜂鸣器2.2 关键模块代码分析2.2.1分频模块分频模块用于为系统的实现提供稳定的工作频率和计时信号源,要求产生两路不同频率的信号,分频为1HZ频率的信号作为计时模块的秒信号的产生,100HZ的信号用于秒表计时模块的信号,1000HZ的信号用于数码管动态显示的扫描频率。分频模块的实现:-产生100HZ的秒表信号-always (posedge clk) /定义clock上升沿触发beginc3= c3 + 1b1;c1=c1 + 1b1;c2=c2 + 1b1;if(c3 = 25d480000)/miaobiaobeginc3 = 25d0;/计数器清零sec = sec;/置位秒标志end-产生1000HZ的秒信号-if(c1= 25d24000000)/0.5S到了吗?beginc1 = 25d0;/计数器清零clk_1s= clk_1s;/置位秒标志endif(c2= 25d2400000)/tiaoshi?beginc2 = 25d0;/计数器清零clk_xiaozhun= clk_xiaozhun;/置位秒标志endend-产生1000HZ数码管动态扫描显示部分-always (posedge clk) /count17:15大约1ms改变一次begin if(layer=2b01) begin dat=hour;endelse if(layer=2b00) begin dat=hour1;endelse if(layer=2b10) begin dat=hour2;end else begin dat=hour3;endcase(c317:15)2.2.2计时模块模块功能为正常计时,即每秒钟读一次数,秒表加1,秒计时满60进1给分计时,分计时满60进1给小时计时,小时计时满24清零。从功能上讲分别为模60计数器和模24计数器。always (negedge sec )/miaobiaobeginif(!key_done1&layer=2b01)/是清零键吗?beginhour = 24h0;/是,则清零endelse if(!keyen)beginhour3:0 = hour3:0 + 1b1;/秒加1if(hour3:0 = 4ha)beginhour3:0 = 4h0;hour7:4 = hour7:4 + 1b1;/秒的十位加一if(hour7:4 = 4ha)beginhour7:4 = 4h0;hour11:8 = hour11:8 + 1b1;/分个位加一if(hour11:8 = 4ha)beginhour11:8 = 4h0;hour15:12 = hour15:12 + 1b1;/分十位加一if(hour15:12 = 4h6)beginhour15:12 = 4h0;hour19:16 = hour19:16 + 1b1;/时个位加一if(hour19:16 = 4ha)beginhour19:16 = 4h0;hour23:20 = hour23:20 + 1b1;/时十位加一endif(hour23:16 = 8h24)hour23:16 = 8h0;endendendendendend2.2.3 校准模块校准模块分为闹钟校准模块和当前时间校准模块,layer为模式,当layer=2b10时,进入当前时间校准模块,当layer=2b11时,进入闹钟校准模块,当pos为1时,对分的个位或十位进行校时,当pos为0时,对时的个位或十位进行校时。2.2.4 闹钟模块 当当前时间与设置的闹钟时间一致时,闹钟响起,本设计采用的是音乐蜂鸣器,通过写入乐谱对应的频率可实现音乐的输出,歌曲为世上只有妈妈好。2.2.5 整点报时模块(hour115:12=0&hour111:8=0&hour17:4=0&hour13:0=0)当分秒对应00:00时,让蜂鸣器发出响声2.3 调试结果通过四个按键的控制(S1:秒表启动及暂停、加功能;S2秒表清零、减功能;S3:模式选择;S4:分和时的选择)能在数码管上显示时间,并能对时间进行调整,能进行秒表计数功能,当当前时间与设置闹钟时间一致时闹钟响起,并在整点时蜂鸣器发出一声“嘀”的报时声。3 小结通过近来对FPGA的学习,我对ISE软件总体操作步骤已比较熟悉。接下来的时间是要提高对FPGA的掌握能力,将FPGA运用到数字信号处理和通信原理上。 ,另外,对Verilog语言的学习不仅是能读懂别人的程序,更重要的是能写出条理清晰的程序。通过做多功能数字钟,我发现自己对Verilog语言还不是很熟悉,接下来的时间要加强语言的学习,多看一些语言方面的书籍。附录:主要代码module clockxjx (clk,key,dig,seg,beep);/模块名clockinput clk;/输入时钟input3:0 key;/输入按键output7:0dig;/数码管选择输出引脚output7:0 seg;/数码管段输出引脚output beep;reg24:0c1,c2;reg clk_1s,clk_xiaozhun;reg24:0 dat;/xianshi register/xinyuereg beep_r;/寄存器reg7:0 state;/乐谱状态机reg15:0count,count_end;reg23:0count1;/end yinyuereg pos;reg7:0 seg_r;/定义数码管输出寄存器reg7:0 dig_r;/定义数码管选择输出寄存器reg3:0 disp_dat;/定义显示数据寄存器reg24:0c3;/定义计数寄存器reg23:0hour1,hour2,hour3;/定义现在时刻寄存器reg23:0hour;/miaobiaoreg sec,keyen;/定义标志位reg1:0 layer;/定义标志位statereg3:0dout1,dout2,dout3;/寄存器wire3:0key_done;/按键消抖输出/乐谱参数:D=F/2K (D:参数,F:时钟频率,K:音高频率)parameter L_5=16d61224, L_6=16d54545,M_1=16d45863,M_2=16d40865,M_3=16d36402,M_5=16d30612,M_6=16d27273,H_1=16d22956;parameterTIME = 12000000;/控制每一个音的长短(250ms)assign beep = beep_r;/输出音乐assign dig = dig_r;/输出数码管选择assign seg = seg_r;/输出数码管译码结果always(posedge clk)begin if(hour323:8=hour123:8)|(hour115:12=0&hour111:8=0&hour17:4=0&hour13:0=0)begincount = count + 1b1;/计数器加1if(count = count_end)begincount = 16h0;/计数器清零beep_r = !beep_r;/输出取反endendelse beep_r =0;end/秒信号产生部分always (posedge clk) /定义clock上升沿触发beginc3= c3 + 1b1;c1=c1 + 1b1;c2=c2 + 1b1;if(c3 = 25d480000)/miaobiaobeginc3 = 25d0;/计数器清零sec = sec;/置位秒标志endif(c1= 25d24000000)/0.5S到了吗?beginc1 = 25d0;/计数器清零clk_1s= clk_1s;/置位秒标志endif(c2= 25d2400000)/tiaoshi?beginc2 = 25d0;/计数器清零clk_xiaozhun= clk_xiaozhun;/置位秒标志endend/按键消抖处理部分assign key_done = (dout1 | dout2 | dout3);/按键消抖输出always (posedge c317)begindout1 = key;dout2 = dout1;dout3 4h0) begin hour215:12= hour215:12-1b1;/分十位jian一 hour211:8 = 4h9; end else if(hour215:12=4h0) begin hour215:12 = 4h5; hour211:8 = 4h9; end end end endelse/tiaoshi begin if(!key_done0)begin if(hour219:16=4h3&hour223:20=4h2) begin hour219:16=4h0; hour223:20=4h0; end else begin if(hour219:16=4h9) begin hour219:16=4h0; hour223:20=hour223:20 + 1b1;/分十位加1 end else hour219:16=hour219:16 + 1b1; end end if(!key_done1) begin if(hour223:16=8h00) begin hour223:20 = 4h2; hour219:16 = 4h3; end else if(hour223:16=8h10) begin hour223:20 = 4h0; hour219:16 = 4h9; endelse if(hour223:16=8h20) begin hour223:20 = 4h1; hour219:16 4h0) begin hour315:12= hour315:12-1b1;/分十位jian一 hour311:8 = 4h9; end else if(hour315:12=4h0) begin hour315:12 = 4h5; hour311:8 = 4h9; end end end endelse/tiaoshi begin if(!key_done0)begin if(hour319:16=4h3&hour323:20=4h2) begin hour319:16=4h0; hour323:20=4h0; end else begin if(hour319:16=4h9) begin hour319:16=4h0; hour323:20=hour323:20 + 1b1;/分十位加1 end else hour319:16=hour319:16 + 1b1; end end if(!key_done1) begin if(hour323:16=8h00) begin hour323:20 = 4h2; hour319:16 = 4h3; end else if(hour323:16=8h10) begin hour323:20 = 4h0; hour319:16 = 4h9; endelse if(hour323:16=8h20) begin hour323:20 = 4h1; hour319:16 = 4h9; end else begin hour319:16 = hour319:16-1b1;end/分个位jian1 endend endendalways (posedge clk)beginif(count1 TIME)/一个节拍250mScount1 = count1 + 1b1;elsebegincount1 = 24d0;if(state = 8d147)state = 8d0;elsestate = state + 1b1;case(state)8d0,8d1,8d2,8d3,8d4,8d5: count_end=M_6;8d6,8d7: count_end=M_5;8d8,8d9,8d10,8d11: count_end=M_3;8d12,8d13,8d14,8d15: count_end=M_5;8d16,8d17,8d18,8d19: count_end=H_1;8d20,8d21: count_end=M_6;8d22,8d23: count_end=M_5;8d24,8d25,8d26,8d27,8d28,8d29,8d30,8d31: count_end=M_6;8d32,8d33,8d34,8d35: count_end=M_3;8d36,8d37: count_end=M_5;8d38,8d39: count_end=M_6;8d40,8d41,8d42,8d43: count_end=M_5;8d44,8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论