




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于FPGA的多功能时钟设计报告目录摘要.3设计内容及要求.3设计(代码)分析.4实验过程及步骤.5实验结果的测试及仿真13实验总结与感想16参考文献.17附录(原代码).17 1 摘要在学习了专用集成电路和verilog语言及数电的相关知识后,运用所学知识及查阅资料完成对多功能时钟的设计,以巩固以前所学知识,提高解决和分析问题的能力以及掌握稍复杂逻辑电路的设计方法;深刻理解verilog语言的思路,并进一步掌握操作BASYS2板的使用;掌握计数器的设计方法,模块之间的协调方式,了解电路设计层次。2 设计内容及要求 多功能时钟设计分为基本电路部分和拓展功能部分和特色部分。Ø 基本电路
2、部分l 以数字形式显示时、分、秒的时间;(要求可切换显示)l 小时计数器为同步24进制;(同步计数器)l 可精确手动校时,包括小时,分钟,秒;设有按钮,每按一次相应按钮可使对应的时间循环改变,以校时用 手动校时时,长按按钮可加速校时速度。Ø 拓展部分l 可设定24小时任意时刻闹钟(精确到秒),设定按钮与校时按钮共用。设有闹钟开关键l 整点报时 59分51秒 59分53秒 59分55秒59分57秒 led7:4流水灯式依次点亮以模仿电台播音(频率为1HZ)59分59秒时 led灯led3点亮 频率为10HZØ 特色部分 stopwatch可储存记忆10组59分59秒99内时间
3、数据的秒表。可显示记录的数据个数和对应顺序精确到1/100秒设有 swo(秒表模式开启键) K3 swp(暂停键) L3scrl(数据控制键)B4 Ncr(清零复位键) A7 counter(记录数据键) M4 - (数据加键) C11 + (数据减键)G12 Switch (显示切换键)-P113代码分析 top_clock 总共分为顶层和底层l 顶层 top.v计时部分:调用底层模块10位计数器 6位计数器 3位计器 4*6=24位寄存器 cnt23:0Cnt3:0 second0 cnt7:4 second1Cnt11:8 minute0 cnt15:12 minute1Cnt19:16
4、 hour0 cnt23:20 hour1校时部分:设计为信号选择器 ad=1时为计时模式,信号为校时信号 ad =0时 为正常计时模式数据显示部分: 设有切换switch端 数码管扫描自动扫描 1KHZ4*8=32位寄存器Temp31:0 分为校时模式显示 ad=1 set=0 swo=0 - cnt闹钟设置模式显示 ad=0 set=1 swo=0- cnt1秒表计时模式显示 ad=0 set=0 swo=1- cnt2正常走时模式显示 其余- cntl 底层部分 计数器 counter10.v counter6.v counter3.v/ counter10.v(09)module co
5、unter10(en,ncr,clk,q); input en,ncr,clk;output 3:0 q;reg 3:0 q;always(posedge clk )beginif(ncr) q<=4'd0;/ncr=0时,异步清零else if(en) q<=q;/ EN=0,暂停计数else if (q=4'b1001) q<=4'b0000; else q<=q+1;/计数器加1endendmodule闹钟设定模块 bell.v cnt1 代码见附录仿电台报时 radio.v 代码见附录秒表 stopwatch.v cnt2 代码见附录4实
6、验内容及步骤(1) 创建工程 命名为 top_clock(2) 选择BASYS2型号 并完成创建(3)新建verilogmodule文件 命名为top(3) 添加完整代码完整代码见附录 (4) 检查语法直至通过 双击 SynthesizeXST (5) 创建时钟信号约束 即CLK (6) 创建管脚约束 双击 管脚设置为管脚分布 a0-a3-àK14 F12 J12 M13 数码管扫描信号 adj0adj3-àG12 C11 M4 A7 校时及闹钟设定及秒表按钮 led0-led7-àM5 M11 P7 P6 N5 N4 P4 G1 led灯 segs0-segs6
7、-àL14 H12 N14 N11 P12 L13 M12 数码管 rcrlàF3 仿电台播报开关 scrl-àB4 秒表显示切换开关 bcrlàN3 闹铃开关 setàE2 闹钟设定按钮 adàG3 校时按钮 switchàP11 显示切换按钮 swoàK3 秒表开关 swpàL3 秒表暂停开关 CLKàB8 时钟信号 50MHz(7) 逻辑综合 (8) 下载到BASYS2板上打开bit文件 下载到板子上在板子上试验1。正常走时模式Switch=1 时显示 分分:秒秒Switch=0时显示 时
8、时:分分2。手动校时模式 ad=1 set=0 swo=03,闹钟设定和开关模式 (brcl) N3 ->闹铃(led灯 )开关 闹铃响时 M11 M5亮灯以10MHZ 闪烁 闹铃设定 ad=0 set=1 swo=0 设置方法和校时方法共用键(A7 M4 C11 G12) 方法相同4,秒表模式 ad=0 set=0 swo=1(swp) 暂停键 低电平有效A7 清零键 (包括数据清零)M4 记录数据键 每按一次 记录一个时间数据(59分59秒99以内)可记录10组数据 并可显示当前数据的序号Switch=0时 显示C 数据序号 分 分 Switch=1时 秒 秒 0.1秒 0.01秒
9、(5) 实验结果的测试和仿真 仿真波形如下:Counter10Counter6Counter3BellRadio 实验结果及说明: (1) 正常走时模式Switch=1 时显示 分分:秒秒Switch=0时显示 时时:分分;(2) 手动校时模式 ad=1 set=0 swo=0使ad=1,每按一下 switch=1,每按一下循环加一(分分秒秒) A7 M4 C11 G12 A7 M4 C11 G12 switch=0,每按一下循环加一(时时分分) A7 M4 C11 G12例如设定为20:12:08(3) 闹钟设定和开关模式 (brcl) N3 ->闹铃(led灯 )开关 闹铃响时 M1
10、1 M5亮灯以10MHZ 闪烁 闹铃设定 ad=0 set=1 swo=0 设置方法和校时方法共用键(A7 M4 C11 G12) 方法相同(4) 秒表模式 ad=0 set=0 swo=1(swp) 暂停键 低电平有效A7 清零键 (包括数据清零)M4 记录数据键 每按一次 记录一个时间数据(59分59秒99以内)可记录10组数据 并可显示当前数据的序号Switch=0时 显示C 数据序号 分 分 Switch=1时 秒 秒 0.1秒 0.01秒 C11 () 数据减键 序号循环减一 最小为1G12(+) 数据加键 序号循环加一 最大为9 序号即为数据记录 的顺序(5) 其他按法 皆为正常走
11、时模式6实验总结与感想通过多功能时钟的设计过程,我深刻的感觉到复杂电路设计的思路和方法特别重要,好的方法不仅省时省力,也可使程序运行更稳定快速高效。此次的多功能时钟分为好几个大的模块,怎样能恰当好处的连接这些模块是需要经验的,通过这次试验我也初步积累到了一些经验:端口尽量不要太多,能调用模块尽量调用,可省时省力,模块与模块之间尽量独立,但又要设置好端口之间的连接,中间变量不宜过多,但适当的中间变量省下不好麻烦。例如我就设置啦显示的中间变量temp【31:0】 通过不同的模式转换将不同的值赋给temp变量,这样显示的代码就可重复使用。与此同时,在设计中也还有值得改进的地方,就是按钮使用过多,操作
12、方法显得有些复杂,可以进一步优化改进。 遇到的最主要的问题:秒表设计模块中的1/100秒在数码管上无法正常快速显示(由于led灯的余辉效应造成)记录数据时的准确度也就下降 ,人们正常按键时间或大于0.01秒 所以秒表的十分位为准确位 百分位不准确7参考文献【1】 Verilog hdl与数字asic设计基础8.4 和8.5(罗杰主编)(8)附录(源代码) module top(set,ad,swo,swp,switch,bcrl,rcrl,scrl,clk,adj,segs,a,led); input ad,set,swo,bcrl,rcrl,scrl,swp,switch,clk;/定义输入
13、端口 input 3:0 adj; output 6:0 segs;/数码管 output 3:0 a;/扫描输出 output 7:0 led;/led灯 reg 3:0 a; reg 6:0 segs;/shu ma guan reg 31:0 temp; wire 23:0 cnt;/走时模式和校时模式临时变量 wire 23:0 cnt1;/闹钟模式临时变量 wire 31:0 cnt2;/ 秒表模式临时变量 /使能信号 initial begin a=4'b1110; end /chu shi hua wire eno,enp1,enp2,enp3,enp4,enp5; in
14、50MHz_out1Hz u0(clk,cp1);/输出频率1HZ in50MHz_out1kHz u7(clk,cp2);/输出频率1kHZ扫描信号 in50MHz_out10Hz u8(clk,cp3);/输出频率10HZ in50MHz_out100Hz u12(clk,cp4);/100Hz counter10 u1(en0,0,cp,cnt3:0); /second个位计数 counter6 u2(enp1,0,cp,cnt7:4);/second十位计数 counter10 u3(enp2,0,cp,cnt11:8);/minutes个位计数 counter6 u4(enp3,0,
15、cp,cnt15:12);/minutes十位计数 counter10 u5(enp4,0,cp,cnt19:16);/hours个位计数 counter3 u6(enp5,0,cp,cnt23:20); /hours十位计数 bell u9(switch,set,bcrl,adj,cp3,cnt,cnt1,led1:0);/闹钟模块 radio u10(rcrl,cnt15:0,cp1,cp3,led7:3);/仿真报时模块 stopwatch u11(swo,scrl,swp,adj,cp4,cp3,cnt2);/秒表模块 assign cp= ad?cp3:cp1, en0=(ad)|(
16、switch&adj0), enp1=ad?(cnt3:0=4'h9):(adj1&switch),/产生second十位计数使能信号 enp2=ad?(cnt7:4=4'd5)&(cnt3:0=4'd9):(adj0&switch=0),/产生minutes个位计数使能信号 enp3=ad?(enp2&(cnt11:8=4'd9):(adj1&switch=0),/产生minutes十位计数使能信号 enp4=ad?(enp3&(cnt15:12=4'd5):(adj2&switch=0)
17、,/产生hours个位计数使能信号 enp5=ad?(enp4&cnt19:16=4'd9):(adj3&switch=0),/产生hours十位计数使能信号led2=0; always(ad or set or swo) /显示模式选择 if(ad)&set&(swo) begin temp15:0<=cnt115:0;temp31:16<=cnt123:8;end else if( (ad)&(set)&swo) temp<=cnt2; else begin temp15:0<=cnt;temp31:16<
18、;=cnt23:8;end always(posedge cp2) / 扫描信号循环变化 if(a=4'b1110) a<=4'b1101;/J12 else if(a=4'b1101) a<=4'b1011;/M13 else if(a=4'b1011) a<=4'b0111;/k14 else a<=4'b1110;/F12 always(posedge cp2) /数码管显示译码 if(switch=1'b0) begin if(a=4'b1110) begin case(temp19:16)
19、 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b1111000;4'd8:
20、segs <= 7'b0000000;4'd9: segs <= 7'b0010000;default segs <= 7'b1111111; endcase end else if(a=4'b1101) begin case(temp23:20) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4
21、'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;default segs <= 7'b1111111; endcase end else if(a=4'b1011) begin case(temp27:24)/hours个位 4'h0: segs <= 7'b1000000;4'h1: segs <= 7'b1111001;4'h2: segs <= 7'b0100100;4'h3: segs <=
22、7'b0110000;4'h4: segs <= 7'b0011001;4'h5: segs <= 7'b0010010;4'h6: segs <= 7'b0000010;4'h7: segs <= 7'b1111000;4'h8: segs <= 7'b0000000;4'h9: segs <= 7'b0010000;4'ha: segs <= 7'b0001000;default segs <= 7'b1111111
23、; endcase end else begin case(temp31:28)/hours十位 4'h0: segs <= 7'b1000000;4'h1: segs <= 7'b1111001;4'h2: segs <= 7'b0100100;4'h3: segs <= 7'b0110000;4'h4: segs <= 7'b0011001;4'h5: segs <= 7'b0010010;4'h6: segs <= 7'b0000010
24、;4'h7: segs <= 7'b1111000;4'h8: segs <= 7'b0000000;4'h9: segs <= 7'b0010000;4'ha: segs <= 7'b0001000;4'hb: segs <= 7'b0000011;4'hc: segs <= 7'b1000110;default segs <= 7'b1111111; endcase end end else if(switch=1) begin if(a=4
25、39;b1110) case(temp3:0) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7&
26、#39;b1111000;4'd8: segs <= 7'b0000000;4'd9: segs <= 7'b0010000;default segs <= 7'b1111111; endcase else if(a=4'b1101) case(temp7:4) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'
27、;b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b1111000;4'd8: segs <= 7'b0000000;4'd9: segs <= 7'b0010000; default segs <= 7'b1111111; endcase else if(a=4'b1011) case(te
28、mp11:8) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b1111000;4
29、39;d8: segs <= 7'b0000000;4'd9: segs <= 7'b0010000; default segs <= 7'b1111111; endcase else case(temp15:12) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <=
30、7'b0011001;4'd5: segs <= 7'b0010010;default segs <= 7'b1111111; endcase endendmodule / counter10.v(09) module counter10(en,ncr,clk,q); input en,ncr,clk;output 3:0 q;reg 3:0 q;always(posedge clk )beginif(ncr) q<=4'd0;/ncr=0时,同步清零else if(en) q<=q;/ EN=0,暂停计数else if (q=4
31、'b1001) q<=4'b0000; else q<=q+1;/计数器加1endendmodule/ counter6.v(05)module counter6(en,ncr,clk,q); input en,ncr,clk;output 3:0 q;reg 3:0 q;always(posedge clk )beginif(ncr) q<=4'b0000;/NCR=0,同步清零else if(en) q<=q;/EN=0,暂停计数else if(q=4'b0101) q<=4'b0000;else q<=q+1
32、39;b1;/计数器增1endendmodule/counter3.vmodule counter3(en,ncr,clk,q); input en,ncr,clk; output 3:0 q; reg 3:0 q; always(posedge clk )begin if(ncr) q<=4'b0000;/NCR=0,同步清零 else if(en=0) q<=q;/EN=0,暂停计数 else if(q=4'd2) q<=4'b0000; else q<=q+1'b1;/计数器增1 endendmodule/分频模块1Hzmodule
33、 in50MHz_out1Hz(in_50MHz,out_1Hz); input in_50MHz; output out_1Hz; reg out_1Hz; reg 31:0cnt; /use cnt to count always(posedge in_50MHz) begin if(cnt < 32'd24999999)/计数到24999999begin cnt <= cnt + 1'B1; end else begin cnt <= 32'b0; out_1Hz <= out_1Hz; /频率为1HZ end end endmodule/
34、分频模块1KHzmodule in50MHz_out1kHz(in_50MHz,out_1kHz); input in_50MHz; output out_1kHz; reg out_1kHz; reg 31:0cnt; /use cnt to count always(posedge in_50MHz) begin if(cnt < 32'd24999)/计数到24999begin cnt <= cnt + 1'B1; end else begin cnt <= 32'b0; out_1kHz <= out_1kHz; /频率为1kHZ end
35、 endendmodule module in50MHz_out10Hz(in_50MHz,out_10Hz); input in_50MHz; output out_10Hz; reg out_10Hz; reg 31:0cnt; /use cnt to count always(posedge in_50MHz) begin if(cnt < 32'd2499999)/计数到2499999begin cnt <= cnt + 1'B1; end else begin cnt <= 32'b0; out_10Hz <= out_10Hz; /频
36、率为10HZ end endendmodule module in50MHz_out100Hz(in_50MHz,out_100Hz); input in_50MHz; output out_100Hz; reg out_100Hz; reg 31:0cnt; /use cnt to count always(posedge in_50MHz) begin if(cnt < 32'd249999)/计数到249999begin cnt <= cnt + 1'B1; end else begin cnt <= 32'b0; out_100Hz <=
37、 out_100Hz; /频率为100HZ end endendmodule module bell(switch,set,crl,p,clk,cnt,cnt1,led ); /闹钟模块 input switch,set,crl,clk; input 23:0 cnt; input 3:0 p; output 23:0 cnt1; output 1:0 led; reg led; reg cl; adjust f(clk,set,switch,p,cnt1); always(negedge clk) if(cnt>=cnt1)&(cnt1+22'h59>=cnt)&
38、amp;crl) cl=1; else cl=0; always(negedge clk) if (cl) led<=led; else led<=2'b00; endmodulemodule adjust(clk,ad,switch,adj,cnt1); /闹钟里面的定时模块 input switch,ad,clk; input 3:0 adj; output 23:0 cnt1; reg 23:0 cnt1; always(posedge clk) if(switch=0&ad=1) case(adj) 4'b0001:begin if(cnt111:8
39、=4'd9) cnt111:8<=4'd0; else cnt111:8<=cnt111:8+1'd1;end 4'b0010:begin if(cnt115:12=4'd5) cnt115:12<=4'd0; else cnt115:12<=cnt115:12+1'd1;end 4'b0100:begin if(cnt119:16=4'd9) cnt119:16<=4'd0; else cnt119:16<=cnt119:16+1'd1;end 4'b1000:
40、begin if(cnt123:20=4'd2) cnt123:20<=4'd0; else cnt123:20<=cnt123:20+1'd1;end default cnt1<=cnt1; endcaseelse if(switch=1&ad=1) case(adj) 4'b0001:begin if(cnt13:0=4'd9) cnt13:0<=4'd0; else cnt13:0<=cnt13:0+1'd1;end 4'b0010:begin if(cnt17:4=4'd5)
41、cnt17:4<=4'd0; else cnt17:4<=cnt17:4+1'd1;end 4'b0100:begin if(cnt111:8=4'd9) cnt111:8<=4'd0; else cnt111:8<=cnt111:8+1'd1;end 4'b1000:begin if(cnt115:12=4'd5) cnt115:12<=4'd0; else cnt115:12<=cnt115:12+1'd1;end default cnt1<=cnt1; endcase
42、 else cnt1<=cnt1;endmodule/radio.vmodule radio(rcrl,cnt,clk1,clk2,led); /仿真报时模块 input rcrl,clk1,clk2; input 15:0 cnt; output 4:0 led; reg c; reg c2; reg led; always(cnt) if(cnt15:8=8'h59) case(cnt7:0) 8'h50, 8'h52, 8'h54, 8'h56: c<=1; 8'h59: c2<=1; default :begin c&l
43、t;=0;c2<=0;endendcaseelse begin c<=0;c2<=0;end always(posedge clk1) if(c&c2&rcrl) case(cnt7:0) 8'h50:led4:1<=4'b1000; 8'h52:led4:1<=4'b0100; 8'h54:led4:1<=4'b0010; 8'h56:led4:1<=4'b0001; default: led4:1<=4'b0000; endcase else led4:1
44、<=4'b0000; always(posedge clk2) if(c&c2&rcrl) led0<=1;else led0<=0;endmodule/stopwatch.v /秒表模块module stopwatch(start,crl,en,p,clk1,clk2,temp ); input start,crl,en,clk1,clk2; input 3:0 p; output 31:0 temp; wire 23:0 cnt; wire enp0,enp1,enp2,enp3,enp4,enp5,cp1,cp2,cp3; reg 23:0 temp1,temp2,temp3,temp4,temp5,temp6,temp7,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全教育主题课件
- 安全技术课件
- 安全常识课件
- 河南省洛阳市2022-2023学年高一下学期期中语文试题 无答案
- 浙江省杭州二中五校2023-2024学年高三下学期联考生物试题 无答案
- 安全培训课件网盘资源
- 中文成语文字排版设计
- 行政管理内部控制试题及答案
- 护理技术创新与实践应用的结合方式试题及答案
- 中国文化发展历程试题及答案
- 中国特色社会主义+综合练习(三)-2025届中职高考政治一轮复习高教版(2023版)
- 2024年新疆巴楚县事业单位公开招聘村务工作者笔试题带答案
- 辽宁省名校联盟2025年高三5月份联合考试语文及答案
- 2025年广东省广州市南沙区中考数学一模试卷
- 小学四年级家长会班主任发言稿模版
- 配电网故障识别技术的研究和应用
- 2025-2030中国聚甲醛(POM)行业市场发展趋势与前景展望战略研究报告
- 民营经济高质量发展评价指标体系构建与区域差异比较研究
- 2024年江西省气象部门招聘考试真题
- 2025年一年级分批入队闯关活动
- 医务科依法执业自查表
评论
0/150
提交评论