简易数字跑表设计_第1页
简易数字跑表设计_第2页
简易数字跑表设计_第3页
简易数字跑表设计_第4页
简易数字跑表设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、西安邮电大学数字控制系统课程设计报告书院(系)名称:自动化学院学生姓名:自动化专业名称:自动11032014年9月1日至2014年9月12日乘法器设计一、设计要求:计时精度10ms,计时范围59.99秒。(1) 对单人计时,能实现暂停、显示及清零功能,在数码管上实时显示,设置启动/暂停、清零按键;(2) 对多个人同时计时,在数码管上实时显示,并能回显出六个时间。可控制显示,设置清零、取时按键;(3) 采用状态机设计;(4) 百分秒在数码管上实时显示,秒利用多个数码管显示BCD值。二、设计过程:1. 方案设计:1) 画状态图:按键状态输出复位: 00开始: S0清 零: z=0;启/ 停:01计

2、数:S1不清零: z=1;存/ 回显:10暂停: S2存/ 回显: S32)写程序:在一个 module 模块里,有多个 always 块; 有分频、计数、存储、输出等模块; 测试模块的输入输出与源程序的输入输出相反;2. 系统仿真:Verilog 仿真所需仿真环境: modelsim3. 管脚配置:1.四、软件设计 :源程序秒高,秒module paobiao(clk,rst,pause,save,mg,md,bg,bd);/低,百分秒高,百分秒低input clk,rst,pause,save;output reg 3:0 mg,md,bg,bd;reg 15:0 zd,zz,zg;/中间

3、变量reg 17:0 count1;reg clk1;/100msreg pause_temp,save_temp;/ 取上升沿reg 13:0 count2,reg0,reg1,reg2,reg3,reg4,reg5;reg 2:0 count3;/reg 1:0 state,next_state;reg cn1;parameter S0=2'b00,S1=2'b01,S2=2'b11;/ 分频always (posedge clk or negedge rst)begin if(!rst) count1<=0;else if(count1=200000) co

4、unt1<=0;/200000 else count1<=count1+1;end always (posedge clk ) begin if(!rst) clk1<=0;else if(count1=99999) clk1<=clk1;/99999else clk1<=clk1;end/ 总计时always (negedge clk1 or negedge rst)/clk1begin if(!rst) count2<=0;else if(state=S1) count2<=count2+1;/ else if(state=S2) count2&l

5、t;=count2;else count2<=count2;end/ 存储个数计数always (negedge rst or negedge save)begin if(!rst) count3<=0;else if (next_state=S1) count3<=count3+1;else if (next_state=S2) count3<=count3-1;else count3<=count3;end/ 毫秒低位显示结果always (negedge rst or posedge clk)begin if(!rst) bd<=0;else if(s

6、tate=S1) bd<=count2%10;else if(state=S2) begin case (count3)3'b000:bd<=reg0%10;3'b001:bd<=reg1%10;3'b010:bd<=reg2%10;3'b011:bd<=reg3%10;3'b100:bd<=reg4%10;3'b101:bd<=reg5%10;default:bd<=reg0%10;endcaseendelsebd<=bd;end/ 毫秒高位显示结果always (negedge rst o

7、r posedge clk)begin if(!rst) bg<=0;else if(state=S1) bg<=(count2/10)%10;else if(state=S2) begin case (count3)3'b000:bg<=(reg0/10)%10;3'b001:bg<=(reg1/10)%10;3'b010:bg<=(reg2/10)%10;3'b011:bg<=(reg3/10)%10;3'b100:bg<=(reg4/10)%10;3'b101:bg<=(reg5/10)%10

8、;default:bg<=(reg0/10)%10;endcaseelseend bg<=bg;end/ 秒位显示结果always (negedge rst or posedge clk)begin if(!rst) md<=0;else if(state=S1) md<=(count2/100)%10;else if(state=S2)begincase (count3)3'b000:md<=(reg0/100)%10;3'b001:md<=(reg1/100)%10;3'b010:md<=(reg2/100)%10;3

9、9;b011:md<=(reg3/100)%10;3'b100:md<=(reg4/100)%10;3'b101:md<=(reg5/100)%10;default:md<=(reg0/100)%10;endcase endelse md<=md;end/ 十秒位显示结果always (negedge rst or posedge clk)begin if(!rst) mg<=0;else if(state=S1) mg<=(count2/1000)%10;else if(state=S2)begincase (count3)3'

10、;b000:mg<=(reg0/100)%10;3'b001:mg<=(reg1/100)%10;3'b010:mg<=(reg2/100)%10;3'b011:mg<=(reg3/100)%10;3'b100:mg<=(reg4/100)%10;3'b101:mg<=(reg5/100)%10;default:mg<=(reg0/100)%10;endcaseendelse mg<=mg;endalways (negedge rst or posedge clk)/ 定义当前状态begin if(!rst

11、) state<=S0;/异步复位, S0 为初始状态else state<=next_state;end/ 状态转移always (state or pause or pause_temp )begincase (state)S0:begin if(pause=0&&pause_temp=1)next_state<=S1;else next_state<=S0;endS1:begin if(pause=0&&pause_temp=1) next_state<=S2;else next_state<=S1;endS2:begi

12、n if(pause=0&&pause_temp=1) next_state<=S1;else next_state<=S2;enddefault:next_state<=S0;endcaseend/ 存数always(negedge rst or negedge save )begin if(!rst) beginreg0<=0; reg1<=0; reg2<=0; reg3<=0;reg4<=0;reg5<=0;endelsebegin if(count3=0) reg0<=count2;else if(count

13、3=1) reg1<=count2;else if(count3=2) reg2<=count2;else if(count3=3) reg3<=count2;else if(count3=4) reg4<=count2;else if(count3=5) reg5<=count2;else begin reg0<=0;reg1<=0;reg2<=0;reg3<=0;reg4<=0;reg5<=0;endendend/ 取启停键上升沿always (posedge clk )begin if(!rst) pause_temp&l

14、t;=0;else pause_temp<=pause;end/ 取保存翻看上升沿always (posedge clk )begin if(!rst) save_temp<=0;else save_temp<=save;end endmodule 2. 测试程序module paobiao_tp;reg clk,rst,pause,save;wire3:0 mg,md,bg,bd;parameter DELY=10;paobiao u1(clk,rst,pause,save,mg,md,bg,bd);always #(DELY/2) clk=clk;initialbegin clk=0;pause=0;save=0;rst=0;#DELY rst=1;save=0;pause=0;#DELY pause=1;#DELY pause=0;#DELY save=1;endendmodule五、实验结果1. 仿真图像2. 硬件电路显示 六、个人完成工作及心得体会我们组设计的是数字跑表, 我负责画状态图和系统程序和仿真。画状态图时由于对状态机理解不到位, 画的状态图有点问题, 后来经 老师指导改正了; 我负责写仿真测试程序, 这需要对源程序的输入输

温馨提示

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

评论

0/150

提交评论