12小时数字钟电路设计_第1页
12小时数字钟电路设计_第2页
12小时数字钟电路设计_第3页
12小时数字钟电路设计_第4页
12小时数字钟电路设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:12小时数字钟电路设计与实现院(系):计算机学院专业:计算机科学与技术班级:34010104学号:4姓名:指导教师:胡光元完毕日期:2023年1月13日目录657第1章总体设计方案 2318701.1设计原理 2130351.2设计思绪 2300781.3设计环境 217636第2章具体设计方案 2305272.1算法与程序的设计与实现 332532.2流程图的设计与实现 423599第3章程序调试与结果测试 7158373.1程序调试 726994列举出调试过程中存在的问题 7291943.2程序测试及结果分析 732426参考文献 919518附录(源代码) 10第1章总体设计方案设计原理通过Verilog语言,编写12小时数字钟电路设计与实现的Verilog程序,一般的做法是底层文献用verilog写代码表达,顶层用写的代码生成的原理图文献链接组成,最后在加上输入输出端口。采用自上而下的方法,顶层设计采用原理图设计输入的方式。设计思绪1.实时数字钟显示功能,即时、分、秒的正常显示模式,并且在此基础上增长上,下午显示。2.手动校准。按动方式键,将电路置于校时状态,则计时电路可用手动方式校准,每按一下校时键,时计数器加1;按动方式键,将电路置于校分状态,以同样方式手动校分。设计环境(1)硬件环境•伟福COP2023型计算机组成原理实验仪COP2023计算机组成原理实验系统由………•COP2023集成调试软件COP2023集成开发环境是为………….(2)EDA环境•Xilinxfoundationf3.1设计软件Xilinxfoundationf3.1是Xilinx公司的可编程期间………….第2章具体设计方案2.1算法与程序的设计与实现(1)秒钟计时器由于秒计数器为60进制计数器,所以以秒计数器作为示例说明其编程思想。其中秒计数器模块在程序中为always@(posedgeclk)的程序段,由上面分析得秒计数器由一个十进制计数器与一个六进制计数器组成,程序中有second0表达秒计数器低位即10进制计数器,second1表达秒计数器的高位为一个六进制计数器。clk为时钟信号,时钟周期1/60(S),当低位second0满10时,自动进一位,即second1自动进位。Second0,second1位宽均为4位reg型变量。分钟钟计时器分钟计时器由于秒计数器为12进制计数器,示例说明其编程思想。其中秒计数器模块在程序中为always@(posedgemod)的程序段,由分析得小时计数器由一个二进制计数器与一个三进制计数器组成,程序中有hour0表达秒计数器低位即二进制计数器,hour1表达秒计数器的高位为一个三进制计数器。Mod为时钟信号,来自分钟计时模块的mod,时钟周期360(S),当低位hour0满3时,自动进一位,即hour1自动进位。hour1,hour1位宽均为4位reg型变量。小时计时器小时计时器同秒钟计时器其中小时计数器模块在程序中为always@(posedgetun)的程序段,分钟计时器的低位、高位分别由minute0、minute1表达,但分钟计时器模块的敏感信号为“posedgetun”时钟信号,“tun”的产生自秒钟计时器,可知其产生的时钟信号为1(S),每触发一次则分钟计数器计数加1一次,同时产生mod的时钟信号,同时由于做的是12小时数字钟电路,所有zox表达的是显示上下午,当小时计数器满12时zox变化一次,其中zox=0表达的是上午,zox=1表达的是下午。时间设立时间设立模块实现的功能为通过按键调节可以对当前时间进行手动控制。其重要是在时间设立使能端有效地情况下通过SW1和i_SW2两个按键对数字钟的小时和分钟数进行调节。Disp_drive为设立中的显示控制,即通过SW1对位的调整,Disp_drive随之变化。i_SW2为对每一位上的数字在其范围内进行加1调节。Disp_drive取值000、001、010和011分别相应hour1、hour0、minute1和minute0的设立,其中的加1设立在各个计时器模块,这样做的因素是防止两个“always”进程对同一个变量赋值发生错误。(5)控制显示模块控制显示模块在整个数字钟的设计中起着非常重要的作用。它的作用是将时间等数据用数码管显示的控制和数据传输模块,涉及数据的传输以及BCD码译码等。通过几个控制使能端将其不同功能时的时间在数码管上显示出来。本模块中端口定义比较多,下面是其所相应的功能。clk:时间自动模式工作使能信号;Timeset_EN:时间设立使能信号;Time_disp_select:时间显示位选信号;Disp_select:显示位选信号输出;程序设计中,各使能端信号为1表达执行该功能,以时间自动工作模式使能信号有效为例说明,当Time_EN为1时,一方面将时间显示位选信号isp_select的值赋给显示位选信号disp_select输出,定义time_disp_select的状态一共有6个,分别为100000、010000、001000、000100、000010和000001,其在各状态下分别依次表达将、hour0、hour1、minute0、minute1、second0和second1的值赋给data,用case语句来实现,其实现语句如下:always@(clk,TimeSet_EN,time_disp_select,disp_select,hour1,hour0,minute1,minute0,second1,second0)begin//时钟,秒表显示if((clk||TimeSet_EN)==1'b1)begindisp_select<=time_disp_select;case(time_disp_select)6'b100000:Data<=hour1;6'b010000:Data<=hour0;6'b001000:Data<=minute1;6'b000100:Data<=minute0;6'b000010:Data<=second1;6'b000001:Data<=second0;default:Data<=4'b0;endcaseend显示译码数据段重要程序如下:case(Data)4'b0000:disp_data<=7'b1111110;4'b0001:disp_data<=7'b0110000;4'b0010:disp_data<=7'b1101101;4'b0011:disp_data<=7'b1111001;4'b0100:disp_data<=7'b0110011;4'b0101:disp_data<=7'b1011011;4'b0110:disp_data<=7'b1011111;4'b0111:disp_data<=7'b1110000;4'b1000:disp_data<=7'b1111111;4'b1001:disp_data<=7'b1111011;default:disp_data<=7'b0;endcase显示译码程序说明了0到9十个数在7段数码管中所相应的值,在case语句里面最重要的是一定不能忘了default,否则仿真会发生所不希望看到的结果。下图13为闹钟设立使能有效时仿真结果。2.2流程图的设计与实现1.数字钟数数字钟主体小时计数器分计数器秒计数器24进制计数器60进制计数器6进制计数器10进制计数器Zox=0(上午)Zox=1(下午)12小时数字时钟整体12小时数字钟12小时数字钟显示时钟时间数值时间的校验第3章程序调试与结果测试3.1程序调试Error(10170):VerilogHDLsyntaxerrorata.v(65)neartext"always";expecting"end"忘掉在begin之后加end结束语Error(10161):VerilogHDLerrorata.v(165):object"Dat"isnotdeclared在程序开始Dat忘掉标记和定义Error(10170):VerilogHDLsyntaxerroratTime.v(49)neartext"else";expecting"endmodule"程序后面没加"endmodule"Error(10170):VerilogHDLsyntaxerroratTime.v(56)neartext"<=";expecting".",oranidentifier把“<=”改为“=”3.2程序测试及结果分析1.从图中可以看出当second0满1010即10时被置为0000,而second1加1,满足秒的低位满十进一位的设立。2.从图中可以看出,在第一个时钟周期内,时间显示位选信号time_disp_select的值为000000,此时应执行case语句的default,Data的值为0;在第二个时钟周期内,time_disp_select的值为000001,此时相应其最后一种状态,将second0的值赋给Data,即Data的值为0110,从图中看,仿真结果对的,disp_data表达的是将当前数据译码显示之后七段数码管的显示,所以在第一个周期内值为1111110,表达值为0,与Data所表达的数相应。依次类推,可将Data的值所有表达出来。3.从图中可以看出,当只有Timeset_EN:时间设立使能信号有效时,其七段数码管显示结果,与数字钟自动工作使能端的区别为闹钟设立使能端有效时只需对hour0、hour1、minute0和minute1进行设立,由于其同样需要将值赋给disp_select,为了统一期间,其值也设为6位,其4个状态分别为100000、010000、001000和000100。其他与自动工作模式相同。参考文献[1]张明.Verilog

HDL实用教程.成都:电子科技大学出版社,1999

[2]齐洪喜,陆颖.VHDL电路设计[M].北京:清华大学出版社,2023

[3]江国强,李哲英.EDA技术与应用[M].北京:电子工业出版社,2023

[4]雷伏容.VHDL电路设计[M].北京:清华大学出版社,2023

[5]曾繁泰,陈美金.VHDL程序设计[M].北京:清华大学出版社,2023

[6]潘松,王国栋.VHDL实用教程.成都:电子科技大学出版社,2023

[7]赵雅兴.FPGA原理、设计与应用.天津:天津大学出版社,1998

[8]陈俊硕,刘景林,张金萍.基于FPGA的直流电机PWM控制器设计[J].微电机2023(10)

[9]卢杰,赖毅.VHDL与数字电路设计.北京:科学出版社,2023

[10]张昌凡,龙永红,彭涛.可编程逻辑器件及VHDL设计技术.广州:华南工学院出版社,2023

附录(源代码)源代码:///////////////////////////`timescale1ns/1nsModuleaa(clk,TimeSet_EN,SW1,i_SW2,zox,disp_select,hour1,hour0,minute1,minute0,second1,second0);inputclk;inputTimeSet_EN;//时间设立使能信号inputSW1;inputi_SW2;outputzox;//上下午指示模output[5:0]disp_select;output[3:0]hour1,hour0,minute1,minute0,second1,second0;reg[7:0]second,minute,hour;regtun,mod,zox;wirer_SW2;reg[2:0]disp_drive;reg[6:0]time_disp_select;reg[6:0]disp_select;reg[3:0]Data,hour1,hour0,minute1,minute0,second1,second0;reg[6:0]disp_data;regmt,nt;initialbegintun=0;mod=0;zox=0;hour=0;minute=0;second=0;disp_drive=3'b000;endassignr_SW2=i_SW2;////////////////////////////////////////////////////////////////秒钟计时器always@(posedgeclk)//上升沿触发beginif(r_SW2==1'b1)beginif(disp_drive==3'b110) second<=0; tun<=0;endelseif(second==8'h59)begin second<=0;tun<=1; endelsebeginif(second[3:0]==9)begin second[3:0]<=0; second[7:4]<=second[7:4]+1; endelsebeginsecond[3:0]<=second[3:0]+1; end tun<=0; end second1<=second[7:4];second0<=second[3:0];end////////////////////////////////////////////////////////////////分钟计时器always@(posedgetun)//上升沿触发beginif(r_SW2==1'b1)begincase(disp_drive)3'b010:begin//分的高位 if(minute[7:4]<5) minute[7:4]<=minute[7:4]+1; else minute[7:4]<=0; end 3'b011:begin if(minute[3:0]<9) minute[3:0]<=minute[3:0]+1; else minute[3:0]<=0; end default:beginendendcasemod<=0;endelseif(minute==8'h59)begin minute<=0;mod<=1; endelsebeginif(minute[3:0]==9)begin minute[3:0]<=0; minute[7:4]<=minute[7:4]+1; endelsebegin minute[3:0]<=minute[3:0]+1;endmod<=0; end minute1<=minute[7:4];minute0<=minute[3:0];end//////////////////////////////////////////////////////////////////////////////////////////时钟计时器always@(posedgemod)//上升沿触发beginif(r_SW2==1'b1)begincase(disp_drive)3'b000:begin if(hour[7:4]==0) hour[7:4]<=hour[7:4]+1; elsebegin hour[7:4]<=0; if(zox==0) zox<=1; else zox<=0; end end 3'b001:begin//小时的低位 if(hour[3:0]<1) hour[3:0]<=hour[3:0]+1; else hour[3:0]<=0; end default:beginendendcaseendelsebeginif(hour==8'h11)begin hour<=0;if(zox==0) zox<=1; elsezox<=0; endelse hour[3:0]<=hour[3:0]+1; end hour1<=hour[7:4]; hour0<=hour[3:0];end//////////////////////////////////////////////////////////////////////////////////////////时间设立always@(posedgeSW1)//手动设立使能 beginif(TimeSet_EN==1'b1)begin if(disp_drive<3'b101) disp_drive<=disp_drive+3'b1; else disp_drive<=3'b000; endend////////////////////时钟显示always@(clk,TimeSet_EN,time_disp_select, disp_select,hour1,hour0,minute1,minute0,second1,second0)begin//时钟,秒表显示if((clk||TimeSet_EN)==1'b1)begin//时钟,秒表显示if(clk||TimeSet_EN==1'b1)begindisp_select<=time_disp_select;case(time_disp_select)6'b100000:Data<=hour1;6'b010000:Data<=hour0;6'b001000:Data<=minute1;6'b000100:Data<=minute0;

温馨提示

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

评论

0/150

提交评论