FPGA出租车计价器设计
更新时间:2023-04-09 20:44:01 阅读量: 实用文档 文档下载
EDA课程设计目标
1.掌握用Verilog HDL语言的设计方法;
2.掌握Verilog HDL语言程序的基本结构,学习编写简单的Verilog HDL设计
实用程序;
3.了解Quartus II软件的基本使用方法,数字电路系统的设计流程,掌握Quartus
II的使用方法;
4.在Quartus II环境下,对其设计功能进行编程、仿真、并下载到EDA试验箱
的FPGA芯片,验证其设计的正确性。
1 、设计任务及要求
设计一个出租车计价器,要求显示里程和金额。
(1)出租车启动和停驶由司机控制;
(2)行程小于基本里程时,显示起步价,基本里程设3公里,起步价设5元;
(3)行程大于基本里程时,每多行一公里,在起步价上加2元;
(4)当出租车等待时,由司机按下等候键,每等待一分钟加1元,不足一分钟的按一分钟计算;
(5)此处用脉冲信号模拟轮胎的转数,设每计一个脉冲汽车前进100米,系统中所需脉冲均由50MHz晶振分频提供。
2、设计原理及总体框图
(1)设计总体框图
图1.总设计框图
(2)设计总原理图
图2.设计总原理图
设计总原理:测控FPGA芯片通过采集速度传感器脉冲信号WCLK进行行驶里程计算,利用外部脉冲信号CLK1产生标准时钟信号,用来计算等待时间,最后根据行驶里程、等待时间来计算计价值。并用译码电路显示行驶里程、等待时间和计价值。
3、程序设计
1.VHDL语言简单介绍
VHDL 的英文全名是Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言,被认为是标准的硬件描述语言,有专家认为,在新世纪中,VHDL与Verilog HDL语言将承担起几乎全部的数字系统设计任务。
VHDL 主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL 的语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦内部开发完成后,其他的设计可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL 系统设计的基本点。
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
基于以上种种优点,VHDL作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。
2、模块及相应程序说明
(1)消除抖动模块
module xiaodou(clk,kaishi,ks,zanting,zt,jieshu,js); //消抖模块input clk,kaishi,jieshu,zanting; //clk为全局时钟50MHZ,按键的输入分别是:开始,结束,暂停
output ks,js,zt; //输出的是开始、结束、暂停的有效信号
reg ks_reg1,zt_reg1,js_reg1;
reg ks_reg2,zt_reg2,js_reg2; //ks_reg1,ks_reg2分别是扫描得到的输入信号
reg ks,zt,js;
reg [25:0] count1; //计数器
always @( posedge clk)
begin
count1<=count1+1'b1;
if(count1==500000) //扫描频率100Hz
begin
ks_reg1<=kaishi;
zt_reg1<=zanting;
js_reg1<=jieshu;
count1<=0;
end
ks_reg2<=ks_reg1;
zt_reg2<=zt_reg1;
js_reg2<=js_reg1;
ks<=ks_reg2&(!ks_reg1);
zt<=zt_reg2&(!zt_reg1);
js<=js_reg2&(!js_reg1); //当扫描得到的两个信号不同时,说明按键按下则输出高电平脉冲
end
endmodule
消除因其他原因导致输出无效的信号引起系统误启动。
(2)状态模块
module zhuangtai(clk,ks,zt,js,state); //状态模块
input clk,ks,zt,js; //输入的是开始、暂停、结束的有效信号
output state;
reg [1:0]state; /*state是不同的运行状态,0时显示hello及led8,1时运行并显示路程模块及led6,2时运行并显示时间模块及led10*/
initial
begin
state=0; //初始时显示stste0及led8
end
always @ (posedge clk)
begin
if(ks==1) state=1; //按下开始键后,state转换到1
if((!state==0)&&zt==1) //当state非0时,每次按暂停,state加1;同时确保暂停键只在路程或时间模块有效
begin
state=state+1;
while(state>2); state=1; //保证按下暂停时只在路程和时间模块之间转换
end
if(js==1) state=0; // 按下结束键时,转到state0
end
endmodule
控制计价器正常工作,停车等待,等不同工作状态下的计费。
(3)行车速度模块
module sudu(clk,clksd); //速度模块
input clk; //输入的是50MHz脉冲
output clksd; //输出的是100Hz的模拟速度脉冲
reg clksd;
reg [27:0]count2; //计数器
always@ (posedge clk )
begin
count2=count2+1;
if(count2==12500000) begin clksd=~clksd; count2=0;end //每6249000翻转一次,即周期是0.25s,4Hz
end
endmodule
(4)时间模块
module shijian( clk,state,min,sec); //时间模块
input clk;
input [1:0]state;
output [6:0]min;
output [6:0]sec; //输出的是等待时间的分和秒
reg [6:0]sec;
reg [6:0]min;
reg [25:0] count3; //计数器
always @(posedge clk)
begin
if(state==0) //state为0时,分和秒置零
begin
min<=0;
sec<=0;
end
if(state==2) //state为2时,运行时间的累计
begin
count3=count3+1'b1;
if(count3==49999999) //每计数50 000 000次,计秒一次
begin
count3=0;
sec<=sec+1'b1;
end
if(sec>59) //每60秒,分加1
begin
min<=min+1'b1;
sec<=0;
end
end
end
endmodule
在停车等待时开始计时,记录停车等待的时间长短,当再次开始行车时停止计时,恢复正常计费。
(5)行车路程模块
module lucheng( clksd,state,lck,lcm); //路程模块
input clksd; //输入的事模拟速度脉冲
input [1:0]state;
output [6:0]lck; //输出以千米为基数的整数部分
output [6:0]lcm; //输出以十米为基数的小数部分
reg [6:0]lck;
reg [6:0]lcm;
always @(posedge clksd )
begin
if(state==0) //当state为0时,使两个输出都置零
begin
lck<=0;
lcm<=0;
end
if(state==1) //当state为1时,进行路程的累计
begin
lcm<=lcm+1'b1;
if(lcm>99) //小数部分每99向整数部分进1
begin
lck<=lck+1'b1;
lcm<=0;
end
end
end
endmodule
记录行车的路程长短,输出以千米为基数的整数部分以及输出以十米为基数的小数部分,在停车等待时暂停记录,恢复正常行车状态是恢复路程记录。(6)总价模块
module zongjia(clk,min,lck,zj); /*总价模块,起步价4元,包含3公里,超过3公里每累计1公里1元,
不到1公里不算,等待时间每累计1分钟1元,不到一分钟不计算*/
input clk;
input [6:0]min,lck; //输入路程的整千米数和时间的整分数
output zj;
reg [7:0]zj;
always @(clk)
begin
if(lck<3)
zj=5+min*1; //3公里内,总价为4+等待时间的整分数*1
else
zj=5+(lck-3)*1+min*1; //3公里外,总价为4*路程减二+等待时间的整分数*1
end
endmodule
价格显示模块,起步行驶不超过3公里只收起步价4元(包含3公里),超过3公里每多行1公里价格增加1元。
(7)显示模块
module led_drive(clk,state,sec,lck,lcm,zj,ksled,ztled,jsled,a,b,dp); input clk;
input [1:0]state;
input [6:0]sec,lck,lcm;
input [7:0] zj;
output a,b,dp,ksled,ztled,jsled;
reg[0:7]c;
reg [3:0] i;
reg dp,ksled,ztled,jsled;
reg [0:6] a; //a数码管选段
reg [0:7] b; //b数码管选位
reg [0:6] mem[0:9]; //数码管显示内容
reg [17:0] count4 ; //扫描计数器
initial
begin //显示从0~9
mem[0]=7'b0000001;
mem[1]=7'b1111001;
mem[2]=7'b0010010;
mem[3]=7'b0000110;
mem[4]=7'b1001100;
mem[5]=7'b0100100;
mem[6]=7'b0100000;
mem[7]=7'b0001111;
mem[8]=7'b0000000;
mem[9]=7'b0000100;
i=0;
end
always @(posedge clk)
begin
count4=count4+1'b1;
if(count4==100000) //计数器计数起到分频作用,降低扫描频率实现稳定的动态显示
begin
i=i+1'b1;
count4=0;
end
case(state)
0:case(i) //显示state为0时的状态及led
0:begin a=8'b1111111;b=8'b01111111;dp=1;end
1:begin a=8'b1001000;b=8'b10111111;dp=1;end
2:begin a=8'b0110000;b=8'b11011111;dp=1;end
3:begin a=8'b1110001;b=8'b11101111;dp=1;end
4:begin a=8'b1110001;b=8'b11110111;dp=1;end
5:begin a=7'b0000001;b=8'b11111011;dp=1;end
6:begin a=8'b1111111;b=8'b11111101;dp=1;end
7:begin a=8'b1111111;b=8'b11111110;dp=1;end
8:begin ksled=0;ztled=0;jsled=1;end
endcase
1:case(i) //显示state为1时的状态及led
0:begin a=mem[lck/10];b=8'b01111111;dp=1;end
1:begin a=mem[lck%10];b=8'b10111111;dp=~dp;end
2:begin a=mem[lcm/10];b=8'b11011111;dp=1;end
3:begin a=mem[lcm%10];b=8'b11101111;dp=1;end
4:begin a=7'b1111110;b=8'b11110111;dp=1;end
5:begin a=mem[zj/100];b=8'b11111011;dp=1;end
6:begin a=mem[zj/10];b=8'b11111101;dp=1;end
7:begin a=mem[zj%10];b=8'b11111110;dp=1;end
8:begin ksled=1;ztled=0;jsled=0;end
endcase
2: case(i) //显示state为2时的状态及led
0:begin a=7'b1111111;b=8'b01111111;dp=1;end
1:begin a=7'b1111111;b=8'b10111111;dp=~dp;end
2:begin a=mem[sec/10];b=8'b11011111;dp=1;end
3:begin a=mem[sec%10];b=8'b11101111;dp=1;end
4:begin a=7'b1111110;b=8'b11110111;dp=1;end
5:begin a=mem[zj/100];b=8'b11111011;dp=1;end
6:begin a=mem[zj/10];b=8'b11111101;dp=1;end
7:begin a=mem[zj%10];b=8'b11111110;dp=1;end
8:begin ksled=0;ztled=1;jsled=0;end
endcase
endcase
if(i>8)i=0; //位选循环
end
endmodule
通过数码管,显示对应的等待时间,行车路程,最终价格。
4 、编译及仿真
(1)仿真软件Quartus II的简单介绍和说明
Max+plus II作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Max+plus II的更新支持。Quartus II 是Altera公司继Max+plus II之后开发的一种针对其公司生产的系列CPLD/FPGA 器件的综合性开发软件,它的版本不断升级,目前已经发布了13.0版本,该软件有如下几个显著的特点:
该软件界面友好,使用便捷,功能强大,是一个完全集成化的可编程逻辑设计环境,是先进的EDA工具软件。该软件具有开放性、与结构无关、多平台、完全集成化、丰富的设计库、模块化工具等特点,支持原理图、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌有综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD、FPGA 设计流程。
Quartus II可以在Windows、Linux以及Unix上使用,除了可以使用TCL脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II支持Altera公司的MAX 3000A系列、MAX 7000系列、MAX 9000系列、ACEX 1K系列、APEX 20K系列、APEX II系列、FLEX 6000系列、FLEX 10K系列,支持MAX7000/MAX3000等乘积项器件。支持MAX II CPLD系列、Cyclone系列、Cyclone II、Stratix II系列、Stratix GX系列等。支持IP核,包含
了LPM/Mega Function宏功能模块库,用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
图3 .QuartusII 软件的开发流程
(2)仿真波形图
图4.消抖模块波形图
图5.状态模块波形
图6.速度模块波形图
图7.时间模块波形图
图8.路程模块波形图
图9.总价模块波形图
图10.顶层文件波形图
图11.引脚分配
图12.资源占用5、实物演示结果
6、心得体会
这次课程设计要求我们熟练掌握EDA理论、velilog语言等相关知识,独立思考完成自己的设计。设计过程中出现很多问题,关于各个不同功能模块设计的实现,程序编写也出现了很多错误。
通过本次设计,我系统的了解了出租车计价器的设计流程,尤其是硬、软件的设计方法,掌握了verilog语言的编程方法,掌握了它的一般原理,也进一步掌握了QuartusⅡ的使用。而且也开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的。
天水师范学院
《基于EDA的出租车计价器设计》
实践报告
学院:物理与信息科学学院
专业:电子信息科学与技术
班级:11级电信二班
姓名:马尚荟,周文举
学号:20111060218,20111060245
2013年12月31日
正在阅读:
FPGA出租车计价器设计04-09
公路工程施工项目成本管理现状与对策分析11-13
河南省教育厅关于公布河南省第八届农村中小学青年教师技能竞赛结12-03
关于墙的话题作文10篇04-01
通信工程认识实习报告格式05-24
春天乍来时作文600字07-10
经典简爱语录11-20
2011年沈阳中考语文试题05-30
七年级上册数学期末复习 有理数07-05
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 计价器
- 出租车
- 设计
- FPGA
- 新课程下,让学生愉悦自信地学习数学-精品文档资料
- 幼儿园重阳节儿歌童谣
- 2022届浙江省宁波市高三新高考选考适应性考试英语试题(解析版)
- 读《穷人》有感范文
- 房地产案名、主题广告语、系列文案大全-doc223页
- 森源电气与西安交大电气工程学院开展电力装备科技开发合作
- 中心学校后勤保障服务中心工作总结,学校后勤服务工作总结_后勤工
- 关于自来水水质处理的建议和思考
- Java基础入门及提高
- 基础生物学实验讲义1
- 2022年七年级生物下册 第二章 人体的营养 第三节 关注合理营养与
- 2022高考英语复习之高考真题阅读词块精析(三十三)
- 美丽的妈妈_五年级作文
- 企业医院剥离后工会工作现状调研报告
- 北京邮电大学_dsp_matlab实验报告卢跃凯
- 部编版五年级道德与法治上册期末测试题(含答案)
- 2022年同济大学法学院857法学综合二(含法理学、刑法学)之刑法学
- 2022年科研管理处个人工作总结
- 寻找顾客方法课堂讲授案例 (1)
- 计算机二级数据库Acess上机题库配1套真题加答案