简易数字跑表设计_数字跑表设计

2020-02-28 其他范文 下载本文

简易数字跑表设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数字跑表设计”。

西安郵電大学

数字控制系统课程设计报告书

院(系)名称 : 学生姓名 : 专业名称 : 班

级 : 时

自 动 化 学 院

自动化 自动1103 间 : 2014年9月1日 至2014年9月12日

乘法器设计

一、设计要求:

计时精度10ms,计时范围59.99秒。

(1)对单人计时,能实现暂停、显示及清零功能,在数码管上实时显示,设置启动/暂停、清零按键;

(2)对多个人同时计时,在数码管上实时显示,并能回显出六个时间。可控制显示,设置清零、取时按键;

(3)采用状态机设计;

(4)百分秒在数码管上实时显示,秒利用多个数码管显示BCD值。

二、设计过程: 1.方案设计:

1)画状态图:

按键

状态

输出

复位:00

开始:S0

清 零:z=0;

启/停:01

计数:S1

不清零:z=1;

存/回显:10

暂停:S2

存/回显:S3

2)写程序:

·在一个module模块里,有多个always块;

·有分频、计数、存储、输出等模块;

·测试模块的输入输出与源程序的输入输出相反; 2.系统仿真:

Verilog仿真所需仿真环境:modelsim 3.管脚配置:

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;//中间变量 reg [17:0] count1;reg clk1;//100ms reg 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

else if(count1==200000)count1

else count1

end

always @(posedge clk)begin if(!rst)clk1

end //总计时

always @(negedge clk1 or negedge rst)//clk1 begin if(!rst)count2

else if(state==S1)count2

// else if(state==S2)count2

else count2

//存储个数计数

always @(negedge rst or negedge save)begin if(!rst)

count3

else if(next_state==S1)

count3

else if(next_state==S2)

count3

else count3

end

//毫秒低位显示结果

always @(negedge rst or posedge clk)begin

if(!rst)

bd

else if(state==S1)bd

else if(state==S2)

begin case(count3)

3'b000: bd

3'b001: bd

3'b010: bd

3'b011: bd

3'b100: bd

3'b101: bd

default:

bd

endcase

end

else

bd

end

//毫秒高位显示结果

always @(negedge rst or posedge clk)begin

if(!rst)

bg

else if(state==S1)

bg

else if(state==S2)

begin case(count3)

3'b000: bg

3'b001: bg

3'b010: bg

3'b011: bg

3'b100: bg

3'b101: bg

default:

bg

endcase

end

else

bg

end

//秒位显示结果

always @(negedge rst or posedge clk)begin

if(!rst)

md

else if(state==S1)md

else if(state==S2)

begin

case(count3)

3'b000: md

3'b001: md

3'b010: md

3'b011: md

3'b100: md

3'b101: md

default:

md

endcase end

else

md

//十秒位显示结果

always @(negedge rst or posedge clk)

begin

if(!rst)

mg

else if(state==S1)mg

else if(state==S2)

begin

case(count3)

3'b000: mg

3'b001: mg

3'b010: mg

3'b011: mg

3'b100: mg

3'b101: mg

default:

mg

endcase

end

else

mg

end

always @(negedge rst or posedge clk)//定义当前状态

begin if(!rst)state

else

state

end

//状态转移

always @(state or pause or

pause_temp)begin

case(state)

S0:begin if(pause==0&&pause_temp==1)next_state

else next_state

end

S1:begin if(pause==0&&pause_temp==1)next_state

else next_state

S2:begin if(pause==0&&pause_temp==1)next_state

else next_state

default:next_state

endcase

end

//存数

always@(negedge rst or negedge save)begin if(!rst)begin

reg0

else

begin if(count3==0)reg0

else if(count3==1)reg1

else if(count3==2)reg2

else if(count3==3)reg3

else if(count3==4)reg4

else if(count3==5)reg5

else begin reg0

reg3

end end

//取启停键上升沿 always @(posedge clk)begin if(!rst)pause_temp

else

pause_temp

end

//取保存翻看上升沿

always @(posedge clk)begin if(!rst)save_temp

else

save_temp

endmodule

2.测试程序

module paobiao_tp;reg clk,rst,pause,save;wire[3:0] mg,md,bg,bd;parameter DELY=10;paobiao u1(clk,rst,pause,save,mg,md,bg,bd);always #(DELY/2)

clk=~clk;initial

begin clk=0;pause=0;save=0;rst=0;

#DELY rst=1;save=0;pause=0;

#DELY pause=1;

#DELY pause=0;

#DELY save=1;end endmodule

五、实验结果 1.仿真图像

2.硬件电路显示

六、个人完成工作及心得体会

我们组设计的是数字跑表,我负责画状态图和系统程序和仿真。画状态图时由于对状态机理解不到位,画的状态图有点问题,后来经老师指导改正了;我负责写仿真测试程序,这需要对源程序的输入输出很清晰,对其暂停、启停、存储、回显的掌握;再就是系统仿真,先在modelsim 上仿真,出来波形后再在开发板上仿真,刚开始程序分频、计数输出都有问题,后来逐项排除错误代码,仿真才出来。

课设过程中,我学到了很多关于Verilog的知识,比如写程序要注意的分频、计数、输入输出等问题,仿真时要注意时间长短的选择、进制间的转换等等,还有最后往开发板下载程序时注意的问题等。认识比较深刻的是:一个小组,只有相互帮助、团结努力,才能很好地完成任务。

《简易数字跑表设计.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
简易数字跑表设计
点击下载文档
相关专题 数字跑表设计 设计 跑表 简易 数字跑表设计 设计 跑表 简易
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文