ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:686.77KB ,
资源ID:18580460      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18580460.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(华中科技大学电子线路设计测试实验FPGA数字钟设计报告Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

华中科技大学电子线路设计测试实验FPGA数字钟设计报告Word文件下载.docx

1、 wire 7:0hour,minute,second; /计时器的输出信号,作为中间变量存储和传输时间信号0hour_12,hour_all; /12进制的小时计数器的变量,hour_all表示把12进制和24进制用一个变量统一,便于译码 input adj_min_key,adj_hour_key; /校正计时器小时分钟的输入按键,为1时校正时间,为0时正常计时 /计时器的中间使能控制信号,用于计时器的扩展,比如分进位用于控制小时的计数,实现模拟数字钟计时功能 wire minl_en,minh_en,hour_en; input hour_12_24; /12进制与24进制的显示切换,也

2、就是选择hou还是hour_12当为1时12进制,为0时是24进制表达 reg alarm_radio; /仿电台的报时信号输出,当此信号为1时报时信号输出,当此信号为0时不输出 wire alarm_clock; /闹钟的信号输出,同仿电台报时的功能,当此信号为1时,闹钟信号输出 input ctrl_bell; /控制闹钟的声音是否输出的按键 output alarm; /仿电台报时或者闹钟声音信号的输出,集成在一个输出端口,采用或运算使之输出在一起 0set_hr,set_min;/设定的闹钟时间输出信号,用于用户设置闹钟定时和用于和当前计时器的时间比较 input set_hr_key

3、,set_min_key; /设定闹钟小时和分钟的输入按键,作为小时计数器和分钟计数器的使能信号 /如果按下,使能有效,正常递增,当松开时,使能无效,不再递增,保存当前的值为闹钟所设定的时间。 /闹钟设定时间和计时器比较器的结果输出,分别为小时的十位比较结果 /小时个位比较结果,分钟十位比较结果,分钟个位比较结果 wire hr_h_equ,hr_l_equ,min_h_equ,min_l_equ; input choose_h_m_de; /因4个数码管显示限制,用于控制显示小时还是分钟信号,1表示小时,0表示分钟 output 13:0decoder_h_m,decoder_s; /译码器

4、的输出,也就是小时、分、秒的译码,用于控制七段译码管的亮灭0led_hr,led_min,led_sec; /输出8421BCD码给显示器,时分秒都是两位十进制数表示,需要八位二进制的BCD二进制码来表示0led_min,led_sec; /说明变量的类型0led_h_min; /由于译码管数量限制,所以把计时的时分集中在一个变量里便于译码 input mode;/设定显示器的显示模式,MODE=1时,显示闹钟所设定的时间,反之则显示计时器的时间 /50MHZ分频器调用模块,50mhz为DE0实验板上的晶振频率 divided50mhz de1(_1khzin,vdd,_50mhz); /1k

5、hz分频器的模块调用,vdd,作为使能信号和清零信号,都处于高电平状态。前三种频率的信号为分频输出 divided_frequency u0(_1hz,_2hz,_500hz,vdd,vdd,_1khzin); /60进制秒计数器:调用10进制和6进制底层模块构成 counter10 u1(second3:0,vdd,vdd,_1hz); /秒个位计数器,为十进制,使能信号接电源高电平,一直有效,即一直计数,符合秒的概念 counter6 u2(second7:4,vdd,(second3:0=4h9),_1hz); /秒计数器十位计数器,以秒个位是否达到九作为使能控制信号 /也就是个位是否产

6、生进位,也就实现了60进制的扩展 assign minl_en=adj_min_key?vdd:(second=8h59); /分钟的个位使能信号产生,adj_min_key为1时校正分钟信号,所以无需等待秒的进位 /而为0时,则是正常计时状态,虚等待秒的进位来充当使能信号,产生正常的分钟计数 assign minh_en=(adj_min_key&(minute3:h59)|(mintue3:h9) & /分钟的十位使能信号产生,adj_min_key为1时校正分钟信号 /但此时即便在校正状态,也需等待分钟信号的个位进位信号 /当其为0时,分钟是正常即使状态,需同时满足秒的进位与分钟的个位进

7、位 /60进制分钟计数器,也是调用十进制计数器与6进制计数器完成,与秒计数器所不同的是使能信号的不同 counter10 u3(mintue3:0,vdd,minl_en,_1hz); /分计数器的个位计数 counter6 u4(mintue7:4,vdd,minh_en,_1hz); /分计数器的十位计数 /产生小时计数器使能信号 /为1时校正小时,为0时正常计时,由于小时直接采用底层的24进制计数器 /所以只有一个使能信号,无需十位与个位的使能信号相区分 /正常计数时,需同时满足秒的进位与分的进位 assign hour_en=adj_hour_key?(mintue=8h59)&h59

8、); /调用24进制计数器进行小时计数 counter24 u5(hour7:4,hour3:0,vdd,hour_en,_1hz);/24进制小时计数器 /调用12进制计数器进行小时计数 counter12 u6(hour_127:4,hour_123:/12进制小时计数器 /仿电台整点报时功能 always(minute or second) /因为每逢整点都要报时。所以无需引入小时hour信号 if(minute=8h59) /先判断分钟计数器是否满足59,再进行判断秒计数器的数值 case(second) /由于需要在51,53,55,57,59秒时报时,所以用case语句 8h51,

9、h53,h55,h57:alarm_radio=_500hz; /当出现51,53,55,57,时都往下来执行输出500HZ的信号语句h59:alarm_radio=_1khzin; /当出现59秒时,开始输出1000HZ的信号语句 default:alarm_radio=1b0; /其他情况下输出0,也就是不报时 endcase else alarm_radio=1 /当分钟信号不满足59时输出为0,也就是不输出报时信号 /闹钟设定模块 /60进制分计数器,用于闹钟设定分钟 counter10 su1(set_min3:0,vdd,set_min_key,_2hz); /当设置分钟的按键按下

10、时使能信号有效,开始计数递增 /松开时,设定的分钟个位信号存入闹钟数字存储的低4位BCD码 counter6 su2(set_min7:4,vdd,(set_min3:h9),_2hz);/分钟的十位设置 /24进制小时计数器,用于闹钟设定小时 counter24 su3(set_hr7:4,set_hr3:0,vdd,set_hr_key,_2hz);/此时,设定小时的按键充当使能信号 /比较闹钟时间和计时器设定时间是否相等 _4bitcomparer su4(hr_h_equ,set_hr_7:4,hour7:4);/调用4位比较器,一次比较一个BCD码表示的十进制数字 _4bitcomp

11、arer su5(hr_l_equ,set_hr_3:0,hour3:0); /小时的个位比较结果 _4bitcomparer su6(min_h_equ,set_min_7:4,minute7: /分钟的十位比较结果 _4bitcomparer su7(min_l_equ,set_min_3:0,minute3: /分钟的个位比较结果 /闹钟声音控制信号 assign alarm_clock=ctrl_bell?(hr_h_equ&hr_l_equ&min_h_equ&min_l_equ)&(second0=1b1)&_500hz)|(second0=1b0)&_1khzin):1 /当CT

12、RL_BELL为1时,闹钟声音被允许输出,才进行后续判断,而为0时,不允许输出,时钟为0; /hr_h_equ&min_l_equ)用于检测是否满足闹钟响铃条件 /即设定时间与当前时间是否相等。 /second0=1_1khzin)用于给闹钟输出信号变量赋值 /500hz和1khz交替输出,用秒的最低位一直在0和1跳变来实现。 /把声音输出模块集成在一起,报时和闹钟信号 assign alarm=alarm_radio|alarm_clock; /2选一模块用于选择显示12进制小时还是24进制小时 _2to1mux mu0(hour_all,hour_12_24,hour_12,hour);

13、/选择显示闹钟时间还是正常计时的时间 _2to1mux mu1(led_hr,mode,set_hr,hour_all); _2to1mux mu2(led_min,mode,set_min,minute); _2to1mux mu3(led_sec,mode,8h00,second); /用于选择是显示小时还是分钟 _2to1mux mu4(led_h_min,choose_h_m_de,led_hr,led_min); /七段译码器模块调用 decoder de2(led_h_min,decoder_h_m); /译码小时和分钟的集成 decoder de3(led_sec,decoder

14、_s); /译码秒的计数endmodule 2、二选一模块/二选一模块完成模式选择module _2to1mux(out,sel,x,y); input 7:0x,y; /声明模块内使用变量,用于接收小时与分钟的BCD码 input sel; /选择信号 output 7:0out; /输出信号 assign out=sel?x:y; /用选择语句完成,为1时赋值XEndmodule 3、四位比较器模块/4位比较器模块module _4bitcomparer(equ,a,b); input 3:0a,b; /声明模块内使用变量,用于接收待比较1位十进制数的BCD码 output equ; /输

15、出变量,比较结果存储在此变量中,相等为1,不相等为0 assign equ=(a=b); 4、分频器模块(1)、1KHZ分频到500hz,4hz,1hz模块module divided_frequency(_1hzout,_2hzout,_500hzout,ncr,en,_1khzin); input _1khzin,ncr,en; output _1hzout,_2hzout,_500hzout; /分频器的结果输出,即不同频率的信号 wire11:0 q; /用于获取分频信号的变量,在不同位上取,就可获得不同的频率信号 wire en1,en2; /使能信号 /通过使用三个十进制计数器完成

16、1000进制的计数器扩展 counter10 du0(q3:0,ncr,en,_1khzin); counter10 du1(q7:4,ncr,en1,_1khzin); counter10 du3(q11:8,ncr,en2,_1khzin); assign en1=(q3:d9); assign en2=(q7:4=4d9)&(q3: assign _1hzout=q11; assign _2hzout=q10; assign _500hzout=q0; /最低位实现二分频,位往高位移动,依次类推(2)、50MHZ分频到1khz模块 module divided50mhz(_1khzin,

17、ncr,_50mhz); input _50mhz,ncr; /异步清零端 output reg _1khzin; reg 15:0q; /用于存储计数数字 always(posedge _50mhz,negedge ncr) begin if(ncr) /异步清零 q=15d0; _1khzin=1 end /当计数到24999时,1khz变量翻转,因为50mhz频率是1000hz的50000倍 else if(q=15b110000110100111) Begin /所以1khz的周期是50mhz的50000倍,24999个周期翻转一次,翻转两次构成 /一个周期,恰好满足50000倍的周期

18、关系,也就达到分频的效果=(_1khzin); end else =q+1b1; /正常加1 end endmodule 5、十进制模块module counter10(q,ncr,en,cp); input cp,ncr,en; output 3: /输出变量 reg 3: always(posedge cp,negedge ncr) /上升沿出发的时钟脉冲信号,下降沿出发的异步清零信号 if(ncr) q=4b0000; /异步清零 else if(en) q=q; /当使能为0时,暂停计数,保持原来的数值 else if(q=4b1001)q /当数字到达第十个状态,也就是九时再次清零,

19、完成一次十进制计数 else q /正常计数6、六进制模块/6进制计数器module counter6(q,ncr,en,cp); always(posedge cp,negedge ncr)b0101)q /与十进制所不同的就是清零的状态不同7、二十四进制模块/24进制计数器,用于小时计数module counter24(cnth,cntl,ncr,en,cp); /时钟脉冲,与异步清零信号和使能信号0cnth,cntl; /24的十位和个位的BCD码表示0cnth,ctnl; if(ncr) cnth,cntl=8h00; else if(en) cnth,cntl2)|(cntl9)|(

20、cnth=2)&(cntl=3)cnth,cntl /当满足十位大于2,个位大于9,整体大于23时,都属于越界的情况都需要清零 else if(cnth=2)&(cntl3) /当十位为2,个位小于3时,个位正常加1 begin cnth=cnth;cntl9)|(cnth=1)&=1)cnth,cntl /与24进制所不同之处在于十位是1的时候开始复位 else if(cnth=1)&1) =cntl+1 else if(cntl=9)9、七段译码管模块module decoder(number,num_decoder);0number; /需要被译码的两位十进制数的BCD码 output

21、reg 13:0num_decoder; /译码输出变量,直接控制七段译码管的亮与灭 always(number,num_decoder) case(number7:4) /十位译码,DE0实验板上的显示管是共阳极,为0时亮 4d0:num_decoder13:7=7b0000001;d1:b1001111;d2:b0010010;d3:b0000110;d4:b1001100;d5:b0100100;d6:b0100000;d7:b0001111;d8:b0000000;d9:b0000100;b1111111; endcase case(number3:0) /个位译码num_decoder6:0=75、模块功能仿真 1、二选一模块 2、四位比较器模块 3、1KHz分频器模块 4、十进制模块 5、六进制模块 6、十二进制模块 7、二十四进制模块 8、50MHz分频模块 9、译码器模块6、数字钟整体功能仿真 1、说明(1)、以闹钟为示例,因为闹钟基本覆盖所用功能(2)、50mhz的分频功能暂时屏蔽,节省仿真时间 (3)、采用前一段设置闹钟时间,接着一段校正时间,基本校正到与闹钟时间相同,而后再正常计时,产生一分钟闹钟的输出。 2、波形

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1