1、 1)画状态图: 按键 状态 输出 复位:00 开始:S0 清 零:z=0; 启/停:01 计数:S1 不清零:z=1; 存/回显:10 暂停:S2S32)写程序: 在一个module模块里,有多个always块;有分频、计数、存储、输出等模块;测试模块的输入输出与源程序的输入输出相反;2.系统仿真: Verilog仿真所需仿真环境:modelsim 3.管脚配置: 1.4、软件设计:源程序 module paobiao(clk,rst,pause,save,mg,md,bg,bd);/秒高,秒低,百分秒高,百分秒低 input clk,rst,pause,save; output reg 3
2、:0 mg,md,bg,bd;reg 15:0 zd,zz,zg;/中间变量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=2b00,S1=2b01,S2=2b11;/分频always (posedge clk or negedge rst) begin if(!rst) count1=0; else if(
3、count1=200000) count1/200000 else count1=count1+1; end always (posedge clk )rst) clk1else if(count1=99999) clk1=clk1;/99999else clk1=clk1;end/总计时always (negedge clk1 or negedge rst)/clk1rst) count2 else if(state=S1) count2=count2+1; / else if(state=S2) count2=count2; else count2 end/存储个数计数always (ne
4、gedge rst or negedge save)rst) count3 else if (next_state=S1) count3=count3+1; else if (next_state=S2) count3=count3-1; else count3=count3; /毫秒低位显示结果 always (negedge rst or posedge clk) begin if(!rst) bd else if(state=S1) bd=count2%10; else if(state=S2) begin case (count3) 3b000: bd=reg0%10;b001:=re
5、g1%10;b010:=reg2%10;b011:=reg3%10;b100:=reg4%10;b101:=reg5%10; default: endcase else bd=bd;/毫秒高位显示结果 rst) bg else if(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; else bg=bg; /秒位显示结果 rst) md else if(state=S1) md=(count2/100)%10; e
6、lse if(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 else md=md;end /十秒位显示结果 rst) mg else if(state=S1) mg=(count2/1000)%10; begin mg else mg=mg;always (negedge rst or posedge clk)/定义当前状态rst) state=S0;/异步复位,S0为初始状态 el
7、se state=next_state; /状态转移always (state or pause or pause_temp ) case (state) S0:begin if(pause=0&pause_temp=1) next_state=S1; else next_state S1:=S2; S2:next_state/存数always(negedge rst or negedge save )rst) begin reg0 reg1 reg2 reg3 reg4reg5 else begin if(count3=0) reg0 else if(count3=1) reg1 else
8、if(count3=2) reg2 else if(count3=3) reg3 else if(count3=4) reg4 else if(count3=5) reg5 else begin reg0reg1reg2reg4 /取启停键上升沿rst) pause_temp else pause_temp=pause; /取保存翻看上升沿 rst) save_temp else save_temp=save;endmodule 2.测试程序module paobiao_tp;reg clk,rst,pause,save;wire3:parameter DELY=10;paobiao u1(c
9、lk,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; #DELY pause=1; #DELY pause=0; #DELY save=1;endmodule五、实验结果1. 仿真图像2.硬件电路显示六、个人完成工作及心得体会 我们组设计的是数字跑表,我负责画状态图和系统程序和仿真。画状态图时由于对状态机理解不到位,画的状态图有点问题,后来经老师指导改正了;我负责写仿真测试程序,这需要对源程序的输入输出很清晰,对其暂停、启停、存储、回显的掌握;再就是系统仿真,先在modelsim 上仿真,出来波形后再在开发板上仿真,刚开始程序分频、计数输出都有问题,后来逐项排除错误代码,仿真才出来。 课设过程中,我学到了很多关于Verilog的知识,比如写程序要注意的分频、计数、输入输出等问题,仿真时要注意时间长短的选择、进制间的转换等等,还有最后往开发板下载程序时注意的问题等。认识比较深刻的是:一个小组,只有相互帮助、团结努力,才能很好地完成任务。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2