基于FPGA的电子表设计与实现.doc_第1页
基于FPGA的电子表设计与实现.doc_第2页
基于FPGA的电子表设计与实现.doc_第3页
基于FPGA的电子表设计与实现.doc_第4页
基于FPGA的电子表设计与实现.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

安 康 学 院FPGA/SOPC设计报告书课题名称:基于FPGA的电子表设计与实现姓 名:刘 玲学 号:0828024057院 系:电子与信息工程系专 业:电子信息工程指导教师:王庆春 崔智军时 间:2011年6月12日-7月10日课程设计项目成绩评定表一、设计任务及要求:1、设计任务:利用QuartusII软件,设计一个多功能数字钟,要求显示格式为小时分钟秒钟,调整时间的按键用按键模块的k1和k2,k1调节小时,每按下一次,小时增加一个小时,k2调整分钟,每按下一次,分钟增加一分钟。还要通过按键来控制时钟与秒表显示的切换功能,按键k没按下时为时钟显示功能,按下时为秒表显示功能。Ret按键复位,复位后全部显示000000。2、要 求:设计一个多功能数字钟,要求显示格式为小时分钟秒钟,调整时间的按键用按键模块的k1和k2,k1调节小时,每按下一次,小时增加一个小时,k2调整分钟,每按下一次,分钟增加一分钟。指导教师签名: 年 月 日 二、指导教师评语:指导教师签名: 年 月 日 三、成绩评定:指导教师签名: 年 月 日四、系部意见:系部盖章: 年 月 日设计项目成绩评定表电子与信息工程系 2011年5月 课程设计报告书目录设计报告书目录一、设计目的1二、设计原理12.1、时、分、秒计时器12.2、校时电路1三、设计过程23.1、整个系统设计框图23.2、各模块电路设计2五、课程设计体会与收获6六、设计问题及问题解决7七、参考文献7附录8基于FPGA的电子表设计与实现一、设计目的1、熟悉数字集成电路的引脚安排。2、掌握EDA芯片的逻辑功能及使用方法。3、了解Quartus软件的应用。4、掌握在Quartus环境下VHDL代码仿真的实现。5、了解数字电子表的功能工作模块及工作原理。二、设计原理数字时钟电路由秒、分、时5个计数模块和6个显示译码模块组成。秒计数模块的计数时钟clk为1Hz的标准信号。当数字钟处于正常计时状态时,秒计数器的进位输出信号c作为分钟模块的计数信号,分计数模块的进位输出c为小时模块的计数信号。数字钟除了正常计时外,还能够调整时间。在本文中,通过手动调节din的3个输入量的高低电平而分别实现对秒、分、时的调整。2.1、时、分、秒计时器时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、.、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、.、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、.、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。2.2、校时电路当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。三、设计过程3.1、整个系统设计框图a.数字电子表系统方框图如图1所示。显示输出扫描电路时钟信号分频器60进制秒计数器器60进制秒计数器器24进制秒计数器器功能控制电路图1 数字电子表系统框图秒计数器的计数时钟信号为1Hz的标准信号,可以由CPLD板上提供的20MHZ的信号通过分频得到。秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号。设计一个同时显示时、分、秒6个数字的数字钟,则需要6个七段显示器。VHDL程序代码见附录:程序13.2、各模块电路设计3.2.1、 分频器模块由于实验台仅提供50MHZ频率,所以,需要通过分频器电路分出所需频率的信号,对于时钟来说,最基本的是1HZ信号,而对于数码管扫描最基本的是1KHZ,秒表是100HZ,所以先通过分频器把50MHZ分频为1HZ、100HZ和1KHZ。3.2.2、秒、分、时计数器模块 a.24进制计数器(1) VHDL程序代码见附录:程序2(2) 仿真图:如图2图2 24进制电路结构符号图b.60进制计数器(1) VHDL程序代码见附录程序3(2) 仿真图:如图3 图3 60进制电路结构符号图秒、分计数模块都是60进制的加法计数器,时计数模块是24进制计数器。与一般的标准计数器不同的是秒、分、时计数模块中分别添加了调节秒、分和小时的功能。3.2.3、动态显示输出模块为了得到正确的显示内容,需要将秒、分和小时的每一位输出信号输入至7段译码电路来得到相应的显示信息. 通过6进制计数器来控制位译码器,以得到哪一个7段数码(共6个)管被点亮,同时用该计数器选择6位二进制的显示内容输入7段译码器.可以得到所有的数码管同时显示相应数字的效果.3.2.4、功能控制模块系统提供的有4个摇头开关,我们可以通过这些开关来达到清零,暂停以及调整时间的功能,每个开关旁边对应的有三个管脚,中间的管脚是输出管脚,上下两个分别接输入信号,即高低电平,若上面的管脚接高电平,下面的管脚接低电平,那么当开关拨到下方时,中间的管脚输出的就是高电平,若把开关拨到上方时,输出管脚输出低电平3.2.5 、调整时间模块利用剩下的两个开关组件实现该功能。其思想是通过一个开关的控制选择要调整的位,加入另外一个频率较大的时钟让其进行计数,当达到了要调整的时间后,通过另一个开关的控制保存调整好的时间。具体实现为加入调整时间的模块用来控制时钟、分钟、秒钟的计数。VHDL程序代码见附录程序4四、系统调试与下载验证 将程序下载到FPGA器件中进行硬件测试。4.1、在Quartus环境下仿真结果见以下图形图4 功能仿真图4.2、下载显示输出结果如下图所示图5 秒控制显示图图6 小时-分控制显示图图7 小时控制显示图五、课程设计体会与收获这次最大的收获就是学会了很系统地去解决一个实际问题,学会了巧妙运用模块化的思想。在整个电路设计与实现中,最成功的地方就是有条理地将功能细化,分成一个一个小的功能来实现。在这个过程中,我更深刻地体会从分立元件到中下规模集成电路再到大规模集成电路的组成过程。同时也更加深入地了解了Quarterii这一软件的更多的功能。六、设计问题及问题解决1编译通过后,下载到硬件上之后,发现程序并没有预期的效果。如显示乱序而没有规律等等,当加入适当的选通信号或者脉冲后发现问题得到了解决。所以必须在实践中不断地修改以得到正确的结论。2高电平有效还是低电平有效,这是一个非常容易忽视的问题,有时就知道这个端口要控制信号但不考虑好什么电平有效,造成错误,使得使能端或者清零端的出现错误控制信号。并且到底是脉冲控制,还是边沿控制一定要清楚。在实验时候可以避免一些不必要的麻烦。3引脚重复使用也是一个问题,有时候输出信号必须输出到一个特定的引脚。而输出来自两路信号,这时候必须加入一个选择器件选择输出信号输出。在实际调试的时候我们必须耐心思考,遇到问题针对问题出现的原因认真思考以解决问题。七、参考文献1侯伯亨,顾新. VHDL硬件描述语言与数字电路逻辑设计M . 西安:西安电子科技大学出版社, 2001.2潘松,黄继业. EDA技术实用教程M . 北京:科学出版社, 2002.3李国洪,沈明山. 可编程器件EDA技术与实践M .北京:机械工业出版社, 2004.4张淑骅. 基于FPGA的数字秒表的VHDL设计 J . 大众科技, 2006 (5) 5陈意军. 基于VHDL的FPGA开发 J . 电子与封装,2006 (3)附录程序1/-/ Title : clock_LPM top Module/ Design : eda/ Author : wqc328/ Company : AKU_eie/-/ File : clk_gen.v/ Generated : Sun Mar 25 11:26:41 2011/ From : interface description file/ By : Itf2Vhdl ver. 1.20/-/ Description :/ / Clock_LPM top module/ /-module clock_LCD (clk_50m, /system input clock; reset, /system reset; low voltage reset adj, /input clock adjust mode, /input clock mode SW0, /clock test enable SW1, /led speed contr SW2, /led turn ON/OFF dp01, dp34, dp67, dp25, /SEG dot for mode flag; HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7, /output to 8 SEG LEDG, LEDR, /output to LED 18+8 LCD_DATA, oLCD_ON, oLCD_RW, oLCD_EN, oLCD_RS); input clk_50m,reset,adj,mode,SW0,SW1,SW2;output1:0 dp01,dp34,dp67,dp25;output6:0 HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7;output17:0 LEDR;output7:0 LEDG;output7:0LCD_DATA;/LCD Data bus 8 bitsoutputoLCD_ON;/LCD Power ON/OFFoutputoLCD_RW;/LCD Read/Write Select, 0 = Write, 1 = ReadoutputoLCD_EN;/LCD EnableoutputoLCD_RS;/LCD Command/Data Select, 0 = Command, 1 = Datawire clk_50m, clk_33m,clk_1;wire adj,mode,SW0,SW1;wire 24:0 clk;wire rco_sec,rco_min,rco_hour;wire clk_sec,clk_min,clk_hour;wire1:0 dp01,dp34,dp67,dp25;wire6:0 HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7;wire6:0 HEX00,HEX01,HEX03,HEX04,HEX06,HEX07;wire31:0 iDIG;wire1:0 modf;wire clk_led1,clk_led;wire17:0 LEDR;wire7:0 LEDG;wire7:0LCD_DATA;/LCD Data bus 8 bitswireoLCD_ON;/LCD Power ON/OFFwireoLCD_RW;/LCD Read/Write Select, 0 = Write, 1 = ReadwireoLCD_EN;/LCD EnablewireoLCD_RS;/LCD Command/Data Select, 0 = Command, 1 = Data PLL50M U1 (.inclk0(clk_50m),.c0(clk_33m); clk_gen U2(.clk_33m(clk_33m), .rst(reset), .count(clk); assign clk_1= (SW0=1b1) ? clk20 : clk24; adjust U3 (.clk_1(clk_1), .adj(adj), .sec_co(rco_sec), .min_co(rco_min), /counter_input; .mode(mode), /mmode select; .rst(reset), /system reset .clk_sec(clk_sec), .clk_min(clk_min), .clk_hour(clk_hour), /output clock clk; .mod(modf); /adjust flag assign dp25=2b11; assign dp01=2b11; assign dp34=2b11; assign dp67=2b11; /31-30-29-28 27-26-25-24 $23-22-21-20/19-18-17-16 15-14-13-12 $11-10-09-08/07-06-05-04 03-02-01-00 assign iDIG11:8=4d10;assign iDIG23:20=4d10;assign iDIG31:30,iDIG19,iDIG7=4b0000; COUNT_60 U4 (.clk(clk_sec), /count input clock; .rst(reset), /system reset; .rco(rco_sec), /carry output .q(iDIG6:0); /BCD code output COUNT_60 U5 (.clk(clk_min), /count input clock; .rst(reset), /system reset; .rco(rco_min), /carry output .q(iDIG18:12); /BCD code output COUNT_24 U6 (.clk(clk_hour), /count input clock; .rst(reset), /system reset; .rco(rco_hour), /carry output .q(iDIG29:24); sem_drive U7 (.oSEG0(HEX00), .oSEG1(HEX01), .oSEG2(HEX2), .oSEG3(HEX03), .oSEG4(HEX04), .oSEG5(HEX5), .oSEG6(HEX06), .oSEG7(HEX07), /output to 8 SEG .iDIG(iDIG); /input 8-BCD code (4*8=32bit) assign HEX0,HEX1=(modf!=2b01) ? HEX00,HEX01 : (!clk23=1b1) ? HEX00,HEX01 : 7d127,7d127; assign HEX3,HEX4=(modf!=2b10) ? HEX03,HEX04 : (!clk23=1b1) ? HEX03,HEX04 : 7d127,7d127; assign HEX6,HEX7=(modf!=2b11) ? HEX06,HEX07 : (!clk23=1b1) ? HEX06,HEX07 : 7d127,7d127; assign clk_led1=(SW1=1b1) ? clk21 : clk20; assign clk_led =(SW2=1b1) ? clk_led1: 1b0; led_control U8 (.clk(clk_led), /system clock; .rst(reset), /system reset; .LEDG(LEDG), /output to LEDG; .LEDR(LEDR); /output to LEDR; lcd U9 (.iCLK(clk_33m), /clk_MHZ .iRST_N(reset), /reset /LCD Side .LCD_DATA(LCD_DATA), .LCD_RW(oLCD_RW), .LCD_EN(oLCD_EN), .LCD_RS(oLCD_RS), .LCD_ON(oLCD_ON), .in3(iDIG31:24), .in2(iDIG19:12), .in1(iDIG7:0), .clk_4(clk23);endmodule程序2/-/ Title : COUNTER_24/ Design : eda/ Author : wqc328/ Company : AKU_eie/-/ File : clk_gen.v/ Generated : Sun Mar 25 11:26:41 2011/ From : interface description file/ By : Itf2Vhdl ver. 1.20/-/ Description :/ BCD counter_24 for hour module/ /-module COUNT_24 (clk, /count input clock; rst, /system reset; rco, /carry output q); /BCD code outputinput clk,rst;output reg rco;output 5:0 q;wire clk,rst;reg 5:0 q;reg en;/*always (posedge clk or negedge rst) if (!rst) q3:0=4d0; else if (q3:0=4d8) begin q3:0=q3:0+1b1; en=1b1; end else if (q3:0=4d9 | q=6h23) begin q3:0=4d0; en=1b0; end else begin q3:0=q3:0+1b1; en=1b0; end always (posedge clk or negedge rst) if (!rst) q5:4=2d0; else if (en) begin q5:4=q5:4+1b1; rco=1b0; end else if (q=6h23) begin q5:4=2d0; rco=1b1; end else ;endmodule程序3/-/ Title : COUNTER_60/ Design : eda/ Author : wqc328/ Company : AKU_eie/-/ File : clk_gen.v/ Generated : Sun Mar 25 11:26:41 2011/ From : interface description file/ By : Itf2Vhdl ver. 1.20/-/ Description :/ BCD counter_60 for second and minuter module/ /-module COUNT_60 (clk, /count input clock; rst, /system reset; rco, /carry output q); /BCD code outputinput clk,rst;output reg rco;output 6:0 q;wire clk,rst;reg 6:0 q;reg en;/*always (posedge clk or negedge rst) if (!rst) q3:0=4d0; else if(q3:0=4d8) begin q3:0=q3:0+1b1; en=1b1; end else if (q3:0=4d9) begin q3:0=4d0; en=1b0; end else begin q3:0=q3:0+1b1; en=1b0; end always (posedge clk or negedge rst) if (!rst) q6:4=3d0; else if (en) begin if (q6:4=3d5) begin q6:4=3d0; rco=1b1; end else begin q6:4=q6:4+1b1; rcoCOUNT = 000 ;CHOOSEOUT = S1; LT COUNT =COUNT + 1;CHOOSEOUT = S2; LT COUNT =COUNT + 1;CHOOSEOUT = S3; LT COUNT =COUNT + 1;CHOOSEOUT =

温馨提示

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

评论

0/150

提交评论