推荐-基于FPGA出租车计费系统的设计 精品
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京大学金陵学院
本科毕业
院系信息科学与工程系
专业电子信息科学与技术
题目基于FPGA出租车计费系统的设计
提交日期20XX年6月3 日
摘要
通过出租车计费系统的设计,详细介绍了如何使用硬件描述语言Verilog HDL设计复杂逻辑电路的步骤和过程,以及应用美国ALTERA公司的Quartus II 9.0软件进行系统设计、仿真和下载实现的方法。
通过设计,可以看到在EDA平台上用CPLD器件构成该数字系统的设计思想和实现过程。
论述了计费模块、时钟模块、动态显示模块、计费形式判断模块、控制模块等的设计方法和技巧。
关键词:CPLD/FPGA; 电子自动化设计; Verilog HDL硬件描述语言; 出租车计费器; Quartus II 9.0软件
ABSTRACT
Taxi billing system through the design, details how to use the hardware
des-cription language Verilog HDL design plexity and the process logic and the applicatio-n of the U.S. pany's Quartus II 9.0 ALTERA software system design, simulation, anddownload the realization of the method. By design, you can see in the EDA platform usi-ng CPLD devices constitute the digital system design and implementation process. Discuss-es the billing module, clock module, dynamic display module, billing forms to judge mod-ule, control module and other design methods and techniques.
Keywords: CPLD/FPGA; EDA; Verilog HDL; Taxi Billing Machine; Quartus II 9.0
目录
第一章引言
随着科技日新月异的发展,科技带来的改变无处不在。
尤其是计算机技术带来了人类科技的许多重大的飞跃,特别是集成电路的应用已经渗透到生产和生活中的各个方面,有力的推动了社会的发展。
近几年,中国集成电路产业取得了飞速发展。
中国集成电路产业已经成为全球半导体产业关注的焦点,即使在全球半导体产业陷入有史以来程度最严重的低迷阶段时,中国集成电路市场仍保持了两位数的年增长率,凭借巨大的市场需求、较低的生产成本、丰富的人力资源,以及经济的稳定发展和宽松的政策环境等众多优势条件,以京津唐地区、长江三角洲地区和珠江三角洲地区为代表的产业基地迅速发展壮大,制造业、设计业和封装业等集成电路产业各环节逐步完善。
采用FPGA设计ASIC(Application Specific Integrated Circuit,集成电路界被认为是一种为专门目的而设计的集成电路)电路,用户不需要投片生产,就能得到合用的芯片,FPGA内部有丰富的触发器和I/O引脚,FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一,FPGA采用高速CHMOS 工艺,功耗低,可以与CMOS、TTL电平兼容。
其性能和效率不断提高,应用范围越来越广,在计算机应用领域已占日益重要的地位。
它的应用程度已经成为衡量一个国家科学技术水平的一项重要指标。
出租车计费器就是FPGA的一个可行的应用。
现在市面上的出租车计价器品种繁多,功能强大。
作为一个的课题,我本着从大处着眼,从小处入手的原则,对FPGA的应用做了一些初步的尝试和探讨。
我利用FPGA芯片、32.768KHz
晶振、七段LED数码管,初步实现了市面上的出租车计费器的一些基本功能。
第二章Verilog HDL硬件语言简介
Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。
前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。
两种HDL均为IEEE标准。
Verilog HDL就是在使用广泛的C语言的基础上发展起来的一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
它是GDA(Gateway Design Automation)公司的Phil Moorby在1983年提出,经过不断的完善和发展,直至1995年才成为IEEE标准,即IEEE Standard 1364-1995。
IEEE 20XX 年重新修订了Verilog HDL的IEEE标准。
此前硬件描述语言通过IEEE标准的只有VHDL(1987)。
2.1 Verilog HDL语言的特点
1.Verilog HDL最大特点是易学易用。
只要有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握。
2.Verilog HDL设计与工艺无关。
可以使其设计好的模块重复使用,大大方便复杂电子系统的设计,缩短了设计的周期。
3.Verilog HDL简单而优美。
描述硬件单元的结构简单且易读。
相比较而言,VHDL的描述长度是Verilog HDL的两倍。
2.2 Verilog HDL语言的基本结构
一个电子系统或电路,通常要对输入的信号进行处理得到输出信号,Verilog HDL就是用语言来描述输入和输出的借口和内部处理功能的实现。
一个设计部论是简单还是复杂,都用Verilog HDL模块来表示。
模块的基本结构如下:module 模块名(端口列表);
<端口定义属性,如input,output等>
<逻辑功能描述>
endmodule
其中<模块名>是模块唯一的标识符;<端口列表>列出端口名称,<端口定义属性>指明端口是属于输入、输出还是双向端口,这些端口用来与其它模块进行连接。
<逻辑功能描述>是模块设计中最重要的部分,可使用不同形式的过程块来实现。
下面看个简单的例子。
例1.1 上升沿触发D触发器(时序电路)
module dff(q,clk,data);
input clk,data;
output q;
reg q;
always@(posedge clk)
begin
q=data;
end
endmodule
从上面的例子可以看出:
(1)Verilog HDL程序是由模块构成的,每个模块的内同都是嵌在module和
endmodule两个语句之间,每个模块实现特定的功能,模块可以进行层次嵌套;
(2)每个模块要进行端口定义,<端口列表>说明输入输出或双向端口,这些端口
用与其他模块进行连接;
(3)Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句可以分多
行写;
(4)除了endmodule语句为,每个语句和数据定义的最后必须有分号;
(5)可以用//*……*//或//……对Verilong HDL程序的任何部分作注释;
(6)Verilog HDL对大小写敏感,空格很重要,是用来界定各个标志的,关键字都
是以小写形式表示。
2.3 CPLD/FPGA的设计流程
用HDL语言开发CPLD/FPGA的完整流程为:
图1.2
1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
2.功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正
确。
3.逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布
尔表达式和型号的连接关系。
4.布局布线:将.edf文件调入CPLD/FPGA厂家提供的软件中进行布线,即把
设计好的逻辑安放到CPLD/FPGA内。
5.时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的
时序。
6.编程下载:确认仿真无误后,将文件下载到芯片中
通常以上过程可以都在CPLD/FPGA厂家提供的开发工具(如QuartusII,ISE 中完成。
下面我们以Altera公司的QuartusII 9.0软件来简单说明一下CPLD/FPGA的开发流程。
下图是一个典型的基于QuartusII的CPLD/FPGA开发流程。
图1.2 基于QuartusII的典型CPLD/FPGA设计流程
(1)建立工程是每个开发过程的开始,QuartusII(QII)以工程为单元对设计过程进
行管理。
(2)建立顶层图。
可以这样理解,顶层图是一个容器,将整个工程的各个模块包
容在里面编译的时候就将这些模块整合在一起。
(3)采用ALTERA公司提供的LPM宏功能模块。
QII软件环境里包含了大量的
常用功能模块,例如计数器、累加器、比较强、译码器等等;在充分利用已有模块的基础上,通过,一个设计中一般只有极少部分的模块需要自己从零设计。
(4)自己建立功能模块。
可以用硬件描述语言也可以用原理图的输入方法。
可以
把它们独立的当做一个工程来设计,并生产模块符号(Symbol),然后再顶层图中使用这个模块的符号,并将源文件(实现该模块的原理图或HDL文件)拷到顶层图所在的工程目录下。
(5)将顶层图的各个功能模块用两线连起来。
这个过程类似电路图设计,把各个
芯片连接起来,组成电路系统。
(6)系统的功能原理图至此已经基本出炉了,下一步要为该设计选择芯片载体,
才能真正在物理上实现系统的功能。
这一步的主要工作是:(1)选择芯片型号;
(2)为顶层图的各个输入输出信号分配芯片管脚;(3)设置编译选项,目的是让
编译器知道更多的信息。
(7)编译。
这个过程类似软件开发里的编译,在类似QII这样的集成环境里面,
这些过程都是一气呵成,集成环境自动完成了几个步骤的工作。
(8)编译后生成*.sof或*.pof文件,前者可以通过JTAG下载到CPLD/FPGA内部,
设计无误的话技能实现预期的功能,但断电后CPLD/FPGA里的这些信息会丢失;后者可以下载到CPLD/FPGA的配置芯片(EEPROM或FLASH芯片),掉电后这些配置信息不会丢失,重新上电以后通过该配置芯片对CPLD/FPGA的内部RAM进行配置.
(9)对于复杂的设计,工程编译了以后可以采用QII的仿真功能或者其他仿真软
件(ModelSim)对设计反复进行仿真和验证,知道满足要求。
第三章Quartus II 9.0软件的简介
3.1 主要功能
Quartus II 9.0 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II 9.0可以在Windows、Linux以及Unix上使用,除了可以使用Tcl 脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II 9.0支持ALTERA 公司全系列器件CPLD:MAX3000、MAX7000、MAX9000 和MAXII 等;FPGA:Stratix、StratixII、StratxIII、Cyclone、CycloneII、CycloneIII、ACEX1K、APEX20K和FLEX10K等。
3.2 使用方法
下面以一个十进制计数器的设计为例,详细介绍原理图输入的设计方法及仿真步骤。
一设计文档的输入
1.建立工程
一个设计对应一个工程项目文件,该工程项目下可包含多个设计模块文件。
运行Quartus II 9.0软件,出现如下界面:
建立工程,File→New Project Wizad 如下图:
点击New Project Wizard 后弹出指定工程名的对话框,在Diectory,Name,Top-Level Entity中如下图填写:
直接按Next进行下一步,选择FPGA器件的型号:
在Family下拉框中,我们选择FLEX10K系列,注意在Filters一栏选上"Show Advanced Devices"以显示所有的型号。
执行下一步出现对话框:
这里是选择其他EDA工具的对话框,我们用QII的集成环境进行开发,因此这里不作任何改变。
按Next进入工程的信息总概对话框:
按Finish按钮即建立一个空项目。
2.建立顶层图
执行File→New,弹出新建文件对话框:
选择"Block Diagram Schematic File"按OK 即建立以个空的顶层图,缺省名为"Block1.bdf",如下图:
3. 添加逻辑元件(Symbol)
双击顶层图图纸的空白处,弹出添加元件的对话框,在Libraries 里寻找需要的逻辑元件,
如果知道逻辑元件的名称的话,也可以直接在Name 一栏敲入名字,右边的预览图即可显示元件的外观,按OK 后鼠标旁边即拖着一个元件符号,在图纸上点击左键,元件即安放在图纸上。
在图纸上分别添加74161、与非门(NAND2)、输入(input)、输出(output)等几
原理图输入工具栏
个symbol。
从上图可以看出,基于原理图的设计输入类似于再protel软件中绘制电路图,上如中粗线属于总线类型,它的宽度必须与原件端口的宽度一致,网络标号相同的线表示相互连接。
我们也可把它另存为(File→Save as)其它名称,也可接受默认的文件名,并将“Add file to current project”选项选上,以使该文件添加到工程中去。
如图所示:
二编译
1. 按主工具栏上的编译按钮即开始编译:
QuartusII 下面的Message窗口会显示一些编译信息,最后编译成功提示:
2. 创建元件模块
执行File→Create/Update→Creat Symbol files for current file,建立该文件的元件符号,可被其它模块调用。
三仿真
1. 创建仿真波形文件,进行时序仿真,选择File→New→Other Files→Vector Waveform File:
进入波形创建区,
编辑窗口分为,左边是信号(组)名称及标定时刻的信号值,右边是对应信号的波形图,最左侧为波形编辑工具栏。
2. 输入信号节点。
在信号窗口中双击左键,出现对话框:
选中NodeFinder按钮,出现对话框:
在信号栏中选中“Pins:all”,
点击OK出现波形编辑窗口。
调节输入波形
保存波形文件t10.vwf
3. 仿真
在主工具栏Setting菜单中,点击Simulation文件栏后的按钮。
并可选功能仿真(Functional)或时序仿真(timing)。
如选择功能仿真,则须先在主菜单Processing中Generate Functional Simulation Netlist一栏。
在主菜单中,点仿真按钮,如仿真顺利通过,系统会提示Simulation was successful,观察Simulation Report如下图所示:
如选择时序仿真,
得到仿真结果如下:
结果正确,就可以进行下载验证了。
四下载验证
1.分配管脚
点击下图中的Assignment Editor按钮
出现下图并分配管脚
2. 编译
然后保存,在编译一次,点击右图中的编译按钮
最后编译成功弹出提示:
3. 下载
(1) 下载连接:先将USB Blaster下载线的一头接到PC的USB接口USB Blaster如右图再按如有图按钮
出现对话框并点击Hardware Setup:
(2)将USB Blaster下载线一头与PC连接,另一头插到JTAG口
(3)FPGA实验板上接5V电源
(4)通过JTAG口把芯片的配置信息下载到FPGA芯片内,掉电后配置信息丢失。
(5)点击Start按钮,*.sof文件就下载到FPGA芯片中了
现在可以去到板子上去看结果了。
到此有关Quartus II 9.0的文档输入,编译,仿真,下载的介绍基本结束了。
第四章出租车计费系统
4.1 计费器系统的工作过程简介
4.1.1 计费器的功能描述
从出租车车轮的传感器上导出一个计程脉冲信号,每个脉冲表示行使一定的距离(例如0.5米)。
记录计程脉冲的个数可以记录行使里程。
计费标准是:
a)刚开始计费时,应有起步费。
行驶里程不满3公里时,收费10元。
b)行驶里程满3公里但不超过10公里时,每公里收费2元,超过10公里,
每公里收费3元。
c)夜间11点到早上5点,起步费为13元,10公里内每公里收费2.6元,
超过10公里,每公里收费3.9元。
司机可以控制计费的开始和结束(rstfee)。
计费器有金额(角、元、十元、百元)、时间显示(秒、分钟、小时)的七段数码管显示。
同时为了能够适用于收费标准不同的地方,我在程序中添加了预置功能:能预置起步费、每公里收费, 具体设计中采用了六个七段数码管通过一个按键(switch)切换时间和实时车费。
为了进一步完善系统功能还设计了rsttime时间复位、rstfee计费复位和开始、add1min手动调节时钟(分加1)、add1hor手动调节时钟(时加1)控制按健。
4.1.2 计费器系统分析
系统的输入有计费开始信号(rstfee)、结束信号(rstfee)以及从车轴上引出的计程脉冲(meter)。
输出有费用显示输出和当前时间输出。
计费器的数据处理部分主要是费用的累计和计算。
由于计费形式只有记程模式,也就是说费用只和出租车行驶的里程有关,不考虑在堵车或者等红灯的浪费的时间所带来的对司机的损失,所以仅对计程脉冲计数,这个脉冲进入计费部分,由计费部分计算得出结果后,实时显示当前费用。
当然这个费用还与当前的时间的有关,所以要判断当前的时间和当起步时的时间所在的时间段,然后根据在不同的时间段会有不同大小的费用的加成。
当乘客上车开始计费,正常行驶时显示实时费用,当到达指定地点时,乘客结算费用,司机把计费器清零(rstfee),然后等待下一位乘客。
系统功能框图:
图4.1系统功能框图
如上图:1Hz脉冲由32.768晶振分频而来,还有图中没有出现的刷新频率也是由32.768晶振分频而来的。
当第一开启时时钟为000000,就要用到add1min 和add1hor调节时间,使其正确显示当前时间。
记程脉冲是由出租车的车轴上提供的脉冲(例如0.5m),当车上有乘客时,司机拉下开始健(rstfee),计费模块就开始工作,并且会根据不当前的不同外部情况改变每个计费段的费用的大小,然后将这个费用实时的显示在显示器上。
切换按键的用途是让显示器在显示费用和当前时间之间相互切换。
4.1.3 实现计费系统所用器材和设备
1. PC一台
2. Quartus II 9.0和Protel 99SE软件
3. 爱迪克牌子的AEDK-EDA2实验机
4. 实验仪正面图
B Blaster下载器
5.导线若干
6. 所用到的是晶振模块,FPGA,LED显示,开关部分,电源部分
4.2 计费器系统各模块
4.2.1 时钟模块
由于在不同的时间段起步价和每公里费用都不一样,所以用该模块来提供标准时间,以便计费模块查询载入。
通电初始时间为000000(小时,分钟,秒之间应该有“:”,但由于LED管数量不够所以省略了“:”),要调整时间的话,可以通过两个专门设计的按键(add1hor 和add1min)手动调节时间,要是想要重置时间,可以通过rsttime按键。
60计数
60计数
按键防抖
24计数
用于手动调节时间
图4.2 时钟模块电路图
在时钟模块中,用到了两个60计数、一个24计数、防抖设计和手动调节设
计(与)。
switch选择显示时钟时,当按下add1min后,分钟位置的LED数码管就会累
加数字直到59后变为00,小时位也因此进1,弹出add1min后分钟位置停止累
加。
当按下add1hor后,小时位置的LED数码管就会累加数字直到23后变为00.,
无进位结果,弹出add1hor后小时位置停止累加。
1Hz脉冲是由32.678kHz晶振分频而来,程序如下:
always@(posedge clk)//clk为32.678kHz信号输入
begin
if(count_1==32767)
begin
q_1hz= 1;
count_1=0;
end
else
begin
count_1= count_1 +1;
q_1hz = 0;
end
end
刷新频率为600Hz,远大于24Hz,这样人眼将完全不会感觉到闪烁,关键程
序如下:
always@(posedge clk) //clk为32.678kHz信号输入
begin
if(count_24==55)
begin
q_24hz= 1;
count_24=0;
开始/清零
深夜时段:
在23点到5点之间
正常时段: 在5点到23点
不到3km
3-10km 不到3km
3-10km
起步费10元 2元/km 起步费3元/km
2.6元3.9元选择一个
超过10km
超过10km
NO
清零
YES
end
else begin count_24= count_24 + 1; q_24hz = 0; end
end
在Quartus II 9.0中时钟部分的功能仿真图:
如图LED 数码管上应为显示000001,表示00:00:01时刻。
4.2.2 计费模块
该模块与时钟模块是紧密相连的,因为该模块时时刻刻都在查询当前时间的小时部分,这样才能正确的按照规定的费用计费。
如通过当前时刻确定起步价和
当前每公里费用,再通过对车轴的传感器脉冲进行计数而算
出出租车当前的实时费用。
图4.4 计费模块电路图
下图是确定起步费模块,通过司机按下rstfee
和当前时间的小时部分确定起步费用。
下图是本设计中关键部分之一,该模块主要是通过时刻和出租车所行驶的路程来确定当前每公里的费用,该模块输出只有一个,是费用每产生1角钱,就产生一个脉冲。
但这个脉冲的产生起决于get3km,get10km,hour[7..0],meter
这几个信号。
cacfee_jiao 模块的具体程序代码如下: always@(negedge reset or posedge meter) begin
if(~reset) begin fee1=0; fee2=0; fee3=0; fee4=0; cout1=0; cout2=0; cout3=0;cout4=0; end else
if(hour==8'b00100011||hour==8'b00100100||hour==0||hour==1||hour==2||hour==3||hour==4)//时间在晚上23点到早上5点的深夜时段按照如下标准计费 begin if(~get10km) begin if(get3km) if(fee3==77)//77为计算得出,2.6元/km
cacfee_jiao 10计数
添加起步费
确定起步费模块
fee3=0;
cout3=1;
end
else
begin
fee3=fee3+1;
cout3=0;
end
end
else if(get10km)
begin
if(get3km)
if(fee4==51)//3.9元/km
begin
fee4=0;
cout4=1;
end
else
begin
fee4=fee4+1;
cout4=0;
end
end
end
else//时间在早上5点到晚上23点的正常时段按照如下标准计费begin
if(~get10km)
begin
if(get3km)
if(fee1==100)//2元/km
begin
fee1=0;
cout1=1;
end
else
begin
fee1=fee1+1;
cout1=0;
end
end
else if(get10km)
begin
if(get3km)
if(fee2==66)//3元/km
begin
fee2=0;
cout2=1;
end
else
fee2=fee2+1;
cout2=0;
end
end
end
end
always@(negedge reset or posedge meter)
begin
feeout_jiao=cout1+cout2+cout3+cout4;
end
下图是添加起步费模块,counter[3..0]为角、元、十元、百元的相应的输入口,通过该模块产生cout的脉冲,以至将起步费输出到LED数码管上,这个显示不会和出租车行驶超过3km后的费用累加相冲突,因为起步费的添加在按下rstfee 后的瞬间(大概在0.005s之内完成),所以不会冲突,在弹出rstfee后,又恢复到初始状态。
在Quartus II 9.0中费用部分的功能仿真图:
图中当rstfee按下后,瞬间产生起步费,因为当前时间是00:00:00表示在深夜时段,所以在数码管上显示的结果为130,即13.0元,仿真结果正确。
4.2.3 显示模块
该模块分为两个组成部分,但通过一个模块来实现,可以切换显示当前时间和车费。
利用视觉延迟效应,采用动态扫描电路,同时用switch健切换显示,一般情况下不需要看到当前时刻,乘客只关心当前车费,所以去掉了四个LED 数码管,节约了硬件和能源,将低碳的理念带入工程设计。
同时将扫描频率设为600HZ,看上去毫无闪烁的感觉,给人舒适的感官,将设计以人为本的理念带入本次。
显示处理模块BCD7段译码器
图4.5 显示模块电路图
显示处理模块,是本次设计的关键部分之一,时钟的分秒时和费用的角、元、十元、百元的数据直接输入到该模块,还有两个起到同步作用和选择这些信号输出作用的sel_t[5..0],sel_f[3..0]信号。
通过扫描频率的设计,可以让信号在一个时刻只有一个数据被送到BCD7段译码器,同时通过处理选中对应的数码管,达到动态扫描显示,由于扫描频率远大于人眼能分辩的24Hz,所以看上去一点都不闪烁的。
通过switch切换显示时间和车费,就是在这里实现的,只要控制正确的输出,就可以控制显示。
具体显示处理模块程序代码如下:
always@(sel_t or sel_f)
begin
if(switch==1)//显示时间
begin
case(sel_t)
6'b000001:begin
out=a;
select_abc=3'b001;
end
6'b000010:begin
out=b;
select_abc=3'b000;
end
6'b000100:begin
out=c;
select_abc=3'b011;
end
6'b001000:begin
out=d;
select_abc=3'b010;
end
6'b010000:begin
out=e;
select_abc=3'b101;
end
6'b100000:begin
out=f;
select_abc=3'b100;
end
default:out=4'b1111;
endcase
end
else if(switch==0)//显示车费
begin
case(sel_f)
4'b0001:begin
out=g;
select_abc=3'b000;
end
4'b0010:begin
out=h;
select_abc=3'b001;
end
4'b0100:begin
out=i;
select_abc=3'b010;
end
4'b1000:begin
out=j;
select_abc=3'b011;
end
default:out=4'b1111;
endcase
end
end
4.3 计费系统顶层电路图及SCH、PCB图
图4.6 计费系统顶层电路图
图4.7 Taxifee.sch
图4.8 Taxifee.pcb
4.4 管脚分配
在下载程序前先用Quartus II9.0软件管脚分配工具给程序的输入输出引脚分配管脚,将其与芯片的引脚对应起来。
程序下载到AEDK-EDA2实验箱中FEP10K10144-4芯片上,管脚分配情况如下表:
4.5 程序下载及占用硬件资源分析
在开始下载程序前,先将芯片中使用到的管脚用跳线和实验箱连接起来,并选用实验箱中50kHz脉冲源(本应该用32.678kHz的,但是试验箱上没有,就用50kHz代替,不会有太大影响),将其和clk1端连接起来,再选用实验箱中的1kHz 脉冲源和clk2连接起来,当作是汽车的记程脉冲。
在Quartus II 9.0中,通过USB Blaster对FLEX器件进行在线配置,当Verilog HDL程序编译通过后便生成一个*.sof目标文件,然后将USB Blaster连接到PC 机的USB接口和FPGA的JTAG接口,准备下载。
在Quartus II 9.0中打开programer窗口选择start命令,即可自动下载该文件。
下载结束后,在AEDK-EDA2工具箱上操作一些按钮,通过观察LED数码管的显示数据来验证设计。
最后我们对系统的硬件资源占用情况作了一个分析,如下表。
结束语
通过这次对出租车记程系统的设计,可以看到应用EDA技术的功能强大,可以在短时间内完成较为复杂的设计,因此它的出现就是用来弥补传统的电路原理图输入法设计的不足。
与之相比,EDA技术使用硬件描述语言的形式,大大缩短了开发的周期,而且Verilog HDL语言和C语言极其相似,方便人们学习和使用。
因为在它的系统内硬件的功能可以象软件一样编程来配置它,所以可以进行灵活和方便的更改和开发。
致谢
本文的完成,要感谢的首先是高健老师,是在他的热情关切和精确指导下完成的,同时也要感谢他在本科实验课时对我的教育与熏陶,才能有我现在独立完成这个较为复杂的设计。
在本文完成过程中,本人还得到了本系老师和卢少雄同学等的热心帮助,本人向他们表示深深的谢意。
感谢我的父母长期以来对我的教育的支持,还有朋友们的无私帮助。
最后向在各位专家、老师表示衷心的感谢。
参考文献
[1] 李晨现代电子技术实验VerilogHDL设计技术
[2] 高健,刘向峰,赖谨,戴路红. 基于Verilog HDL出租车计费系统的研制
[3] 徐洋,黄智宇,李彦,陈卓. 基于Verilog HDL的FPGA设计与工程应用人民邮
电出版社。