简易数字跑表设计Word文档下载推荐.docx
- 文档编号:5927168
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:12
- 大小:264.25KB
简易数字跑表设计Word文档下载推荐.docx
《简易数字跑表设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《简易数字跑表设计Word文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。
1)画状态图:
按键状态输出
复位:
00开始:
S0清零:
z=0;
启/停:
01计数:
S1不清零:
z=1;
存/回显:
10暂停:
S2
S3
2)写程序:
·
在一个module模块里,有多个always块;
有分频、计数、存储、输出等模块;
测试模块的输入输出与源程序的输入输出相反;
2.系统仿真:
Verilog仿真所需仿真环境:
modelsim
3.管脚配置:
1.
4、软件设计:
源程序
modulepaobiao(clk,rst,pause,save,mg,md,bg,bd);
//秒高,秒低,百分秒高,百分秒低
inputclk,rst,pause,save;
outputreg[3:
0]mg,md,bg,bd;
reg[15:
0]zd,zz,zg;
//中间变量
reg[17:
0]count1;
regclk1;
//100ms
regpause_temp,save_temp;
//取上升沿
reg[13:
0]count2,reg0,reg1,reg2,reg3,reg4,reg5;
reg[2:
0]count3;
//
reg[1:
0]state,next_state;
regcn1;
parameterS0=2'
b00,S1=2'
b01,S2=2'
b11;
//分频
always@(posedgeclkornegedgerst)
beginif(!
rst)count1<
=0;
elseif(count1==200000)count1<
//200000
elsecount1<
=count1+1;
end
always@(posedgeclk)
rst)clk1<
elseif(count1==99999)clk1<
=~clk1;
//99999
elseclk1<
=clk1;
end
//总计时
always@(negedgeclk1ornegedgerst)//clk1
rst)count2<
elseif(state==S1)count2<
=count2+1;
//elseif(state==S2)count2<
=count2;
elsecount2<
end
//存储个数计数
always@(negedgerstornegedgesave)
rst)count3<
elseif(next_state==S1)count3<
=count3+1;
elseif(next_state==S2)count3<
=count3-1;
elsecount3<
=count3;
//毫秒低位显示结果
always@(negedgerstorposedgeclk)
beginif(!
rst)bd<
elseif(state==S1)bd<
=count2%10;
elseif(state==S2)begincase(count3)
3'
b000:
bd<
=reg0%10;
b001:
=reg1%10;
b010:
=reg2%10;
b011:
=reg3%10;
b100:
=reg4%10;
b101:
=reg5%10;
default:
endcase
elsebd<
=bd;
//毫秒高位显示结果
rst)bg<
elseif(state==S1)bg<
=(count2/10)%10;
bg<
=(reg0/10)%10;
=(reg1/10)%10;
=(reg2/10)%10;
=(reg3/10)%10;
=(reg4/10)%10;
=(reg5/10)%10;
elsebg<
=bg;
//秒位显示结果
rst)md<
elseif(state==S1)md<
=(count2/100)%10;
elseif(state==S2)
begin
case(count3)
md<
=(reg0/100)%10;
=(reg1/100)%10;
=(reg2/100)%10;
=(reg3/100)%10;
=(reg4/100)%10;
=(reg5/100)%10;
endcase
elsemd<
=md;
end
//十秒位显示结果
rst)mg<
elseif(state==S1)mg<
=(count2/1000)%10;
begin
mg<
elsemg<
=mg;
always@(negedgerstorposedgeclk)//定义当前状态
rst)state<
=S0;
//异步复位,S0为初始状态
elsestate<
=next_state;
//状态转移
always@(stateorpauseorpause_temp)
case(state)
S0:
beginif(pause==0&
&
pause_temp==1)next_state<
=S1;
elsenext_state<
S1:
=S2;
S2:
next_state<
//存数
always@(negedgerstornegedgesave)
rst)begin
reg0<
reg1<
reg2<
reg3<
reg4<
reg5<
else
beginif(count3==0)reg0<
elseif(count3==1)reg1<
elseif(count3==2)reg2<
elseif(count3==3)reg3<
elseif(count3==4)reg4<
elseif(count3==5)reg5<
elsebeginreg0<
reg1<
reg2<
reg4<
//取启停键上升沿
rst)pause_temp<
elsepause_temp<
=pause;
//取保存翻看上升沿
rst)save_temp<
elsesave_temp<
=save;
endmodule
2.测试程序
modulepaobiao_tp;
regclk,rst,pause,save;
wire[3:
parameterDELY=10;
paobiaou1(clk,rst,pause,save,mg,md,bg,bd);
always#(DELY/2)clk=~clk;
initial
beginclk=0;
pause=0;
save=0;
rst=0;
#DELYrst=1;
#DELYpause=1;
#DELYpause=0;
#DELYsave=1;
endmodule
五、实验结果
1.仿真图像
2.硬件电路显示
六、个人完成工作及心得体会
我们组设计的是数字跑表,我负责画状态图和系统程序和仿真。
画状态图时由于对状态机理解不到位,画的状态图有点问题,后来经老师指导改正了;
我负责写仿真测试程序,这需要对源程序的输入输出很清晰,对其暂停、启停、存储、回显的掌握;
再就是系统仿真,先在modelsim上仿真,出来波形后再在开发板上仿真,刚开始程序分频、计数输出都有问题,后来逐项排除错误代码,仿真才出来。
课设过程中,我学到了很多关于Verilog的知识,比如写程序要注意的分频、计数、输入输出等问题,仿真时要注意时间长短的选择、进制间的转换等等,还有最后往开发板下载程序时注意的问题等。
认识比较深刻的是:
一个小组,只有相互帮助、团结努力,才能很好地完成任务。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 跑表 设计