ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:402.17KB ,
资源ID:3625202      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3625202.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数电实习报告中国石油大学.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数电实习报告中国石油大学.docx

1、数电实习报告 中国石油大学20112012学年第二学期数字电子技术课程设计设计报告 专业班级 自动化104 姓 名 孙勇 学 号 10051421 开课系室 电工电子学教学中心 设计日期 2012年7月10日-15日 设计题目:基于FPGA的出租车计费器一、设计任务及要求:本设计要求设计一个基于FPGA的出租车计费器,其具体要求如下:1、能够实现计费的功能 费用是按行驶的里程进行计算,设出租车的起价为6元,当里程小于3km时,按起价计算费用;当里程大于3km时每km按1元计费。2、能够实现显示的功能1)左边四个数码管显示里程:用四位数字显示,显示方式为“XXXX”,单位为km 。里程范围为09

2、999km,里程分辨率为1km。2)右边四个数码管显示费用:用四位数字显示,显示方式为“XXXX”,单价为元。计价范围为09999元,费用分辨率为1元。二、设计原理与方案:(一)、顶层设计方案:原理框图:(包括原理框图及其工作原理说明等内容)。工作原理: 实际设计共4个模块,分别为显示学号模块、分频模块、里程费用计量电路模块、动态扫描显示模块。详细功能如下:1、 显示学号模块:该模块设计了一个3位二进制计数器,三个输出端sel0、sel1、sel2表示这八位数从000111循环。每个二进制数分别对应3-8译码器的一个输出端Y,从而点亮此输出端对应的数码管。由于视觉暂留效果,当频率为1khz时,

3、貌似8个数码管同时点亮,从而显示出学号。2、 分频模块:此模块的功能是对输入的1000Hz进行分频,分出的频率供里程费用计量电路模块使用,每来1000个脉冲输出一个脉冲。3、 里程费用计量电路模块:里程每1km记一次数,最大可计9999km。同时按行驶里程收费,起步费为6元,并在车行3公里后按1元/km,最大可计9999元。4、 动态扫描显示模块:通过动态扫描显示车费和里程数。将十进制数转化为四位十进制数,(如将9999转化为四个9)分别在8个数码管上显示出来。(二)、显示学号电路设计方案首先设计一个3位二进制计数器,有三个输出端sel0、sel1、sel2,表示000111八位数的循环。每个

4、二进制数分别对应3-8译码器的一个输出端Y,从而点亮此输出端对应的数码管。上电后由于视觉暂留效果,当频率为1khz时,貌似8个数码管同时点亮,从而显示出学号。这一部分与下一部分里程费用计量模块的衔接非常重要,因为学号的显示的停止意味着里程费用计量模块开始运行。而这两部分共用的是同样的八个数码管,并且同时受s1牵制。所以就需要把显示学号模块与显示里程计费模块综合到一个模块中,通过判断语句选择性执行。(3)里程费用计量电路电路设计方案该模块由两个子模块构成:第一个小模块是里程计费模块,包含控制按钮S1、S2、S3。上电后,当按下按钮S1时,此电路模块开始运行。出租车开始计量里程和相应费用。起步价为

5、6元,3千米以内为6元;当超过3千米后,按1元/千米计量。当按下S2,里程计费停止计时,数码管显示相应数值。当按下S3,里程计费清零。第二个小模块是小数点控制计数模块。.里程和计费分别从0开始,一直可计数到9999.9。当里程不满1Km时,按整数部分计费(例如当里程显示3.3km时,费用为6元)。(四)、译码、动态扫描显示电路设计方案: 该模块也由两个子模块构成:第一个小模块将十进制里程和费用数值转换为四位十进制数(因而在定义里程的费用的寄存器位数时是15:0而不是13:0),分别用八个数码管显示。第二个小模块控制信号输入时,每个数码管分别应显示的数值。 三、电路设计、仿真与实现:(一)、顶层

6、设计实现: 1、顶层原理图文件;2、顶层设计功能仿真波形。(2)、显示学号模块1、基于Verilog的设计源文件:module cnt_8(clk,k);input clk;output2:0 k;reg2:0 k;always(posedge clk) begin if(k7) k=k+1; else k=4b000; endEndmodule2、功能仿真波形(二)、分频模块1、基于Verilog的设计源文件module fenpin(clk,q,r);input clk;output q,r;reg9:0 q;reg r;always(posedge clk) begin if(q10b1

7、111101000) begin q=q+10b0000000001;r=0; end if(q=10b1111101000) begin q=10b0000000000;r=1; end endEndmodule2、功能仿真波形。(三)、里程和费用计量电路电路的设计实现: 1、基于Verilog的设计源文件及功能仿真波形模块一(里程费用计量)module taxi(clk,s1,s2,s3,dis,mon); input clk; output 15:0 dis; output 15:0 mon; reg 15:0 dis; reg 15:0 mon; input s1,s2,s3; reg

8、 1:0k; initial begin k=0; dis=16b0001_0000_0000_0101; mon=16b0001_0100_0010_0001; end always (negedge s1 or negedge s2 or negedge s3) if(!s3)k=2b11; else if (!s2)k=2b10; else if (!s1)k=2b01; else k=0; always(posedge clk) begin if(k=3) begin dis=0; end else if(k=1) begin if(dis=16b0001000000000101) d

9、is=0; else if(dis3:0=9) begin dis3:0=4d0; if(dis7:4=9) begin dis7:4=4d0; if(dis11:8=9) begin dis11:8=4d0; if(dis15:12=9) dis15:12=4d0; else dis15:12=dis15:12+1d1; end else dis11:8=dis11:8+1d1; endelse dis7:4=dis7:4+1d1;end else dis3:0=dis3:0+1d1; end else if(k=2)dis=dis; else dis=16b0001000000000101

10、; end always(posedge clk) begin if(k=3) begin mon=16b0000000000110000) begin if(mon3:0=9) begin mon3:0=4d0; if(mon7:4=9) begin mon7:4=4d0; if(mon11:8=9) begin mon11:8=4d0; if(mon15:12=9) mon15:12=4d0; else mon15:12= mon15:12+1d1; end else mon11:8= mon11:8+1d1; end else mon7:4= mon7:4+1d1; end else m

11、on3:0=mon3:0+1d1; end else mon=16b0000000001100000; end else if(k=2)mon=mon; else mon=16b0001010000100001; end endmodule模块二(以小数计量出租车里程和费用)module xiaoshudian(dis,mon,in,D); input 15:0 dis,mon; input2:0in; output D; reg D; always (in2:0 or mon15:0 or dis15:0 or D) begin if(mon=16b0001010000100001 & di

12、s=16b0001000000000101) D=0; else if(in=2|in=6) D=1; else D=0; end endmodule(四)、译码、动态扫描显示电路的设计实现: 1、基于Verilog的设计源文件及功能仿真波形模块一(十进制数值转换)module licheng_jifei(dis,mon,c_in,c_out); input 15:0 dis,mon; input2:0 c_in; output3:0 c_out; reg3:0 c_out; always(c_in or c_out) begin case(c_in) 3b111:c_out=mon3:0;

13、3b110:c_out=mon7:4; 3b101:c_out=mon11:8; 3b100:c_out=mon15:12; 3b011:c_out=dis3:0; 3b010:c_out=dis7:4; 3b001:c_out=dis11:8; 3b000:c_out=dis15:12; endcase endEndmodule模块二(显示数值)module shumaguan(d,out); input3:0 d; output6:0out; reg6:0 out; always(d) begin case(d3:0) 4b0000: out=7b1111110; 4b0001: out=

14、7b0110000; 4b0010: out=7b1101101; 4b0011: out=7b1111001; 4b0100: out=7b0110011; 4b0101: out=7b1011011; 4b0110: out=7b0011111; 4b0111: out=7b1110000; 4b1000: out=7b1111111; 4b1001: out=7b1110011; default: out=7b0000000; endcase endEndmodule四、分析与讨论:经过了为期五天的数字电子技术实习,我学会了很多。这些天精力几乎全部放在了编程上,有几个晚上甚至在图书馆熬夜

15、到凌晨两点钟,虽然并不是每一份付出都会带来满意的结果,但过程是快乐的。虽然只有短暂的五天,但我们一起奋斗的日子,我觉得很充实,很开心。同样,在这几天的实习中我也发现了自己的很多不足,一些问题总是眼高手低,总以为自己很明白这些方面,但真正做起来却没有那么简单。 实习工程中我的程序出现了很多错误。去调试的时候,发现学号数码管竟然不显示。然后同学的一句话将我点醒了,学号显示与后面的里程模块是有衔接的。我又将程序拿回来认真的进行修改,然后再点报上进行了一次总体仿真,发现S1的使用就是非常关键的一点。当按下S1时,学号显示模块就应该在整个运行过程中结束了,即使无论随后按钮S1、S2、S3处于何种状态,都

16、不能再影响到学号显示。所以我又开始进行修改,查证了一次逻辑后,才发现原来是在赋值时存在逻辑错误,然后将逻辑顺序调整后,又进行过了仿真,这一次就没有问题了。在编写程序的过程中,我对always语句和initial语句理解上存在错误。用的时候不知道该用那一个,分不清楚改什么时候用所以在编程过程中出现了一些错误,主要是显示数的不同,如应该显示59,却显示了60 。然后经过同学的讲解我真正搞明白了两种语句的不同,要想真正的掌握 Verilog语言,还得自己下功夫认真自学一下。再一个印象比较深刻的错误就是因为quartus版本不同上电调试时浪费了好多时间。因为自己电脑上安装的软件是7.2,而试验箱上要求7.0,当我兴冲冲的将前一天晚上编好的程序上电调试时,所有文件都打不开了。浪费了时间,浪费了机会,给老师带来了麻烦,对此深表歉意。在这几天的实习中不断编程,不断调试,不断修改,虽然很辛苦,但最后我的程序下载到实验板上也实现了,这令我非常高兴。其实一个人的成功背后有多个人的汗水。当问题频频出现,自己已经没有信心再继续下去的时候,身边的同学就会站出来鼓励你,帮助你找出无论怎么调试都发现不了的错误,那一刻,心里真的有很多感动。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1