数字跑表的设计与仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA设计与应用课程设计:数字跑表的设计与仿真学院:机械与电子工程学院
专业:电子科学与技术
班级:1221402
学号:201220140225
姓名:傅越
2014年11月
一、设计目的
(1)进一步学习更复杂的EDA项目设计,更熟练地掌握VHDL语言设计。(2)学习动态数码管的VHDL编程。
(3)更加熟练计时显示、进位和校时的编程方法。
二、设计要求
(1) 设计一个具有‘分’、‘秒’、‘百分秒’的十进制的数字跑表。(2) 要有控制计数器的直接清零、启动和暂停/连续计时功能。
三、设计内容
(1)方案
数字跑表设三个输入端,分别为时钟输入(clk),复位(zero),启动、暂停按键(pause)。复位信号高电平有效,可对跑表异步清零;当启动、暂停键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的数值基础上继续计数。数字跑表的结构示意图如下:
2)模块电路设计
计时电路:计时电路又分为百分秒计时电路、秒计时电路和分计时电路三个模块。百分秒计时电路是一个100进制的计数器,以clk1输入信号作为计数时钟,其进位信号作为秒计数电路的计数时钟,当秒计数器计满时,产生的进位信号又作为分计数电路的计数时钟。电路的暂停和复位信号用于控制计时的开始、停止和清零。
四、设计程序
检查后修改的程序
module paobiao(clk,pause,zero,ms0,ms1,s0,s1,m0,m1); input clk;input pause;input zero;
output reg [3:0] m1;
output reg [3:0] m0;
output reg [3:0] s1;
output reg [3:0] s0;
output reg [3:0] ms1;
output reg [3:0] ms0;
wire zero;
reg clk1;
reg mscin0;
reg mscin1;
reg scin0;
reg scin1;
reg mcin0;
always @ (*)
begin if(!pause) clk1<=clk;end
always @ (posedge clk1 or posedge zero)
begin if (zero) begin ms0<=0; mscin0<=0; end
else if(ms0==9) begin ms0<=0; mscin0<=1;end
else begin ms0<=ms0+1; mscin0<=0;end
end
always @ (posedge mscin0 or posedge zero)
begin if (zero) begin ms1<=0; mscin1<=0;end
else if(ms1==9) begin ms1<=0;mscin1<=1;end
else begin ms1<=ms1+1; mscin1<=0;end end
always @ (posedge mscin1 or posedge zero)
begin if (zero) begin s0<=0; scin0<=0;end
else if (s0==9) begin s0<=0;scin0<=1;end
else begin s0<=s0+1;scin0<=0;end end
always @(posedge scin0 or posedge zero)
begin if(zero) begin s1<=0;scin1<=0;end
else if(s1==5) begin s1<=0;scin1<=1;end
else begin s1<=s1+1;scin1<=0;end
end
always @ (posedge scin1 or posedge zero)
begin if (zero) begin m0<=0;mcin0<=0;end
else if (m0==9) begin m0<=0;mcin0<=1;end
else begin m0<=m0+1;mcin0<=0;end
end
always @ (posedge mcin0 or posedge zero)
begin if (zero) begin m1<=0;end
else if (m1==5) m1<=0;
else m1<=m1+1;
end
endmodule
功能仿真结果
五、心得体会
在这一个星期的课程设计中,我感觉自己对EDA这门学科又加深了理解,在上理论课时,学的是零散知识,做实验,是将所学的理论知识结合应用起来,系统总体的分析思考,对于学好EDA是个好机会。
刚开始看到设计要求时,自己想了一段时间,感觉有点思路,但又写不完整,后来看书上的程序,感觉很长,又有几个点看不懂,就去网上找资料,然后就参照资料和课本的程序自己编写,有些模块写不出来,就去问同学,这样慢慢磨出来了,然后编译,又有错误,再修改,最后得到了没有错误的程序,但在后面的功能仿真时暂停和清零却没有作用,又得再次从头检查,发现输入没定义好,修改之后终于有了作用,功能仿真成功。
在此次课程设计中,我得到了不少锻炼。设计程序时让我拣起了不少不太熟悉和有些遗忘的知识,在电脑上连接仿真查错到很晚,但是我还是坚持将程序仿真成功。这让我理解了科学研究的严谨认真的态度和踏踏实实做事的习惯。
星期四我驾照考试没有来,所以在星期五检查了。在老师检查时,一看就发现了问题,源程序中重复了一部分,计数器模块的输入信号都有个重复,后来在寝室修改了。本来检查的时候我自信满满的,一下就发现自己还是有很多不足,只是自己没发现,让我明白了自己还需认真努力学习,对于知识的应用,用的越多才越熟练。