课程设计——基于FPGA的出租车计价器设计1_第1页
课程设计——基于FPGA的出租车计价器设计1_第2页
课程设计——基于FPGA的出租车计价器设计1_第3页
课程设计——基于FPGA的出租车计价器设计1_第4页
课程设计——基于FPGA的出租车计价器设计1_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、××大学××学院××课程设计××大学××学院××课程设计基于FPGA的出租车计价器设计 学生姓名学 号所 在 系专业名称班 级指导教师成 绩 ××大学××学院二一一年六月摘要:本文介绍了一个以Altera公司的CycloneII可编程逻辑芯片EP2C5T144C8为控制核心、运用VHDL硬件描述语言附加一定外围电路组成的出租车计费器系统。本设计论文主要介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用单片FPGA器件构成该数

2、字系统的设计思想和实现过程。同时,详细论述了人机交互驱动模块、驱动模块、计程模块、计费模块、译码动态扫描模块等的设计方法与技巧。利用FPGA芯片实现一些功能较复杂的电子产品设计,不仅可以增加系统设计的灵活性,利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。同时,在进行SOPC设计的时候,我们可以自由调用NIOS资源模块构建软核,从而减小了系统的功耗,实现产品的强大功能。关键字:FPGA,VHDL,EP2C5T144C8,SOPCAbstract:This paper introduces a Altera company to CycloneII programmab

3、le logic chips EP2C5T144C8 as control core, useing VHDL hardware description language add a certain peripheral circuit of the message accounting device system of a taxi. This design paper mainly introduced the message accounting device taxi system composition and working principle, this paper expoun

4、ds on the platform in EDA using single pill FPGA components, the digital system design thought and the implementation process. At the same time, discusses the human-computer interaction driver modules, driving module, taxi module, billing module, decode dynamic scanning module design methods and ski

5、lls. Use the FPGA chip realize some function is more complex electronic product design, not only can increase the flexibility of the system design, use it for product development, not only the low cost, short cycle, high reliability, and with full intellectual property rights. Meanwhile, during the

6、SOPC design, we can free calls NIOS resource module building soft nuclear, thus reduce power consumption, realizing products of the system of the powerful features.Key words: FPGA,VHDL,EP2C5T144C8,SOPC目 录前言1系统功能软件介绍11.1 QuartusII软件介绍11.2 FPGA芯片介绍11.3 硬件描述语言介绍22总体方案设计32.1 系统框图42.2 基于MCU的出租车计费器42.3 基于

7、FPGA的出租车计费器52.4 总体设计方案53单个模块设计63.1 人机交互驱动模块63.1.1人机交互模块63.1.2人机交互模块仿真73.2 4x4矩阵键盘驱动模块设计73.2.1 4x4矩阵键盘模块83.2.2 4x4矩阵键盘仿真图73.3 二进制BIN转换成BDC(10进制)模块93.4 FILTER驱动模块设计93.5 PLS模块驱动设计103.5.1 PLS模块设计103.5.2 PLS模块设计仿真图113.6 出租车控制驱动模块设计113.7 顶层模块124系统功能134.1 计费功能实现134.2 显示功能实现135. 设计总结146参考文献14附录(主要底层模块驱动)16前

8、言随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLDFPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。本文介绍了一个以Altera公司可编程逻辑芯片EP2C5T144C8为控制核心、附加一定外围电路组成的出租车计费器系统。该电子产品在全国有很多出租车公司中得到了使用,因此出租车市场是庞大的。由于受到油价的影响各大城市推出了运价油价联动机制,所以出租车计价器计价标准的灵活性设定成为未来计费器不可缺少的一部分。现在的计费器大部分是以单片机为开发平台,但是单片机的程序是不通用的,不同的芯片

9、有不同的指令集,因此设计研发比较困难。而FPGA等数字可编程器件的出现彻底解决了这个问题,而且更稳定、设计更灵活、能实现较为复杂的功能,运用EDA软件可方便在电脑上实现设计和仿真,由于本设计采用的可编程器件ALTERA公司的CYCLONEII系列FPGA( EP2C5T144C8)。QuartusII化和易学易用的可视化设计环境 ,并具有符合工业标准的 EDA 工具接口 ,能在各种平台上运行. 它支持 VHDL、VHDL、AHDL(AL TERA HDL)等硬件描述语言.使用QuartusII软件和硬件描述语言VHDL来实现LCD显示(包括时钟、车速、等待时间、行驶路程、开始计费和停止、参数设

10、置菜单以及营运额统计显示切换)、计价标准灵活设定自动计价、统计功能等。1系统功能软件介绍1.1 QuartusII软件介绍QuartusII是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Q

11、uartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,QuartusII通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平。1.2 FPGA芯片介绍随着现代芯片工艺的改进,FPGA的等效系统门达到到几百万门,而且工作频率

12、也随之提高。FPGA也就大量的在电子产品中出现。在通信行业,传输网,医疗仪器,各种电子仪器,安防监控,电力系统,汽车电子,消费类电子中都大面积的使用。随产品研发周期的逐步缩短,定制型产品的开发使FPGA在后面的应用面越来越广。例如在2G通信,3G通信,以后的4G通信,wimax等等通信类的设备中它与DSP,MPU一起大量出现在其中。尤其是通信的数字化,软件无线电等概念涌现到电子行业的各个领域,芯片设计的工艺的改进,45nm工艺的出现,使得FPGA成为必不可少的流行的实惠的器件。FPGA最大的特点就是灵活,实现你想实现的任何数字电路,可以定制各种电路。减少受制于专用芯片的束缚。真正为自己的产品量

13、身定做。在设计的过程中可以灵活的更改设计。而且它强大的逻辑资源和寄存器资源可以让你轻松的去发挥设计理念,其并行执行,硬件实现的方式可以应对设计中大量的高速电子线路设计需求。 FPGA比DSP拥有更快的速度,可以实现非常复杂的高速逻辑,FPGA比ASIC(专用芯片)有更短的设计周期和灵活性,免去昂贵的开版费用,而且可以随时裁减,增加你想要的功能达到规避设计风险,回避芯片厂商的限制。另外知识产权的概念不断涌现,仿制别人抄袭,FPGA完全让设计的智慧得以保护。让公司的利益在较长时间内得到保证。随FPGA芯片供应商的重视和第三方公司的重视,现在有非常现成的IP核被提供,进一步缩短设计周期缩短,减小开发

14、成本。现在很多免费的软IP核和硬 IP核的出现更是压缩了成本。在当前的FPGA器件提供商中XILINX和ALTEAR这两家公司是份额最大的供应商,估计占90%以上。这两家都有强大的技术支持,芯片的稳定性和产品系列都特别的多。涵盖了高中低几个设计层次。如果要追求高可靠比如军工,航天,强电磁干扰等条件下的设计可以考虑ACTEL公司的 FPGA,不过价格很贵。如果想一味的追求成本可以考虑LATTIC公司的FPGA,就是稳定性和相同条件下的布线成功率较差。下面介绍一下FPGA的几大优点:FPGA运行速度快:FPGA内部集成锁项环,可以把外部时钟倍频,核心频率可以到几百M,而单片机运行速度低的多.在高速

15、场合,单片机无法代替FPGA;FPGA易于实现大规模系统:单片机IO口有限,而FPGA动辄数百IO,可以方便连接外设.比如一个系统有多路AD/DA,单片机要进行仔细的资源分配,总线隔离,而FPGA由于丰富的IO资源,可以很容易用不同IO连接各外设;FPGA能处理更复杂功能:单片机程序是串行执行的,执行完一条才能执行下一条,在处理突发事件时只能调用有限的中断资源;而FPGA不同逻辑可以并行执行,可以同时处理不同任务,这就导致了FPGA工作更有效率;FPGA大量软核方便进行二次开发:FPGA甚至包含单片机和DSP软核,并且IO数仅受FPGA自身IO限制。所以,FPGA又是单片机和DSP的超集,也就

16、是说,单片机和DSP能实现的功能,FPGA一般都能实现。1.3 硬件描述语言介绍VHDL语言的优点是语法严谨,层次结构清晰。缺点是熟悉时间长,不够灵活。FPGA的优点是设计周期短、灵活。适合用于小批量系统,提高系统的可靠性和集成度,所以本设计使用了VHDL语言,它的英文全称是Very_High_Speed Integrated Circuit Hardwere Description Language 被称为是最标准的硬件描述语言,有专家认为在以后VHDL和Verilog HDL语言将承担几乎全部的数字系统的设计。VHDL语言主要用于数字系统的结构|行为、功能和接口。除了含有许多具有硬件特征的

17、语句外,VHDL的语言形式和描述风格与语法十分类似于一般的计算机高级语言,VHDL语言的结构程序特点是将一项工程设计,或被称为设计实体(可以是一个元件、一个电路模板或一个系统)分成外部(或称为可视部分)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦内部开发完成后,其他的设计可以直接调用这个实体。这种设计将内外部分的概念是VHDL系统设计的基本点。使用VHDL设计系统方法是自顶向下的系统设计方法,在设计过程中,首先从整体上对系统设计做详细的规划,然后完成电路系统功能行为方面的设计。随着DEA技术的发展,使用硬件描述语言设计FPGA成为一种趋势

18、,使用QuartusII软件用VHDL语言开发FPGA的完整流程为:文本编辑:用任何的文本编辑器可以,也可以用专用的HDL编辑环境,通常VHDL保存为.vhd文件;功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确;逻辑综合:将源文件调入逻辑综合器进行综合,即把语言综合成最简单的布尔表达式和信号的链接关系;布局布线:将综合得到的文件调入软件中进行布线,把设计好的逻辑安放到FPGA内;时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序;编程下载:确认仿真没有错误后,将文件下载到芯片中观察。2总体方案设计2.1 系统框图图1 出租车计价器系统框图2.2 基于M

19、CU的出租车计费器硬件各个模块的功能:键盘控制功能是启动出租车的计价器,改变出租车计价器的状态如运行、等待计时、不同计费模式的切换;里程计算单元是通过安装传感器检测到得信号,送到单片机,经处理计算,送给显示单元;利用单片机丰富的I/O端口,实现基本的里程计价功能和价格调节、时钟显示功能;利用单片机实现出租车计价器的开发。外围电路较多,试调复杂,抗干扰能力差,特别这种计程车的额计价器需要长时间的不间断运作的而系统,由于主要是软件运作,容易出错,造成系统不稳定,硬件总原理框图如图2所示。图2 出租车计价器的总原理框图2.3 基于FPGA的出租车计费器基于FPGA的出租车计费器是由外部输入模块、控制

20、模块和显示模块三部分组成。控制模块是整个系统的核心。它由分频模块,控制模块,计量模块和译码显示模块构成。分频模块:是由系统对系统时钟进行分频以得到低频信号;控制模块:主要是完成对计费器状态的控制;计量模块:它完成计价,计时和计程的功能;译码显示模块:译码显示模块完成计价,计时和计程的显示。计费据送入译码显示模块译码,最后送至以百元、十元、元、角为对应单位的数码管上显示。计时数据送入译码显示模块,最后送至以分为单位对应的数码管上显示。计程数据送入译码显示模块进行译码,最后送至以千米为单位的数码管上显示。2.4 总体设计方案方案一:它的开发及制作成本较低,能较大程度的利用资源,但外围电路较多,试调

21、复杂,抗干扰能力差,特别对这种计程车的计价器需要长时间不间断运作的系统,由于主要是软件运作,容易出错,造成系统不稳定。方案二:将所有芯片集成在一块芯片上,体积大大减小的同时提高了稳定性,且可以用EDA软件仿真,试调,易于进行功能扩展,外围电路较少,采用硬件逻辑电路实现,器最大的优点是稳定性好,抗干扰能力强,非常适合作为计程车的计价器系统的控制核心。从以上两种方案的比较可以看出基于FPGA的设计方案要优于基于单片机的设计方案,基于FPGA的设计方案稳定性相对于单片机的设计方案来说它更易于将来进行功能扩展。因此我们确定采用基于FPGA的出租车计费器的设计方案。3单个模块设计3.1 人机交互驱动模块

22、本系统当中使用的是以多位数码管实现的人机交互界面来显示出租车当前的计价的情况。多位数码管可以使用动态扫描的方式来实现数据的显示,这样不仅节约了IO口资源,同时也节约的系统的成本。具体的硬件连接如图3所示。图 人机交互硬件连接图3.1.1 人机交互模块人机交互模块利用Verilog HDL硬件描述语言实现了软件驱动,在QuartusII平台下实现了软件部分,同时将软件转换成原理图的形式显示。人机交互模块原理图如图4。图4 人机交互模块原理图3.1.2 人机交互模块仿真人机交互原理是将FPGA处理后的数据经过3-8译码器驱动实现4位LED数码管,然后将数据送到人机界面进行数据的显示。仿真图如图5所

23、示。图5 人机交互模块仿真图3.2 4x4矩阵键盘驱动模块设计本系统当中使用矩阵键盘实现对出租出计价器的一些控制按键。如果只用机械按键的话,不仅浪费了IO口的资源,同时不利于控制。3.2.1 4x4矩阵键盘模块利用逐行扫描的方法实现对4x4矩阵键盘的驱动,利用的是Verilog HDL硬件描述语言实现的矩阵键盘的驱动。Verilog HDL写矩阵键盘的驱动,方便易实现,因为Verilog HDL与标准C语法是很相似的,所以写的矩阵键盘的驱动也十分好用,同时也将软件代码转换成了原理图符号,如图6。图6 4x4矩阵键盘的原理图符号3.2.2 4x4矩阵键盘仿真图图7 4x4矩阵键盘的仿真图3.3

24、二进制BIN转换成BDC(10进制)模块在本系统当中,由于我们计算后的数据是二进制的数据,但是在我们在显示的时候我们会用到的是BCD码的十进制数据。所以,如图8所示为二进制BIN文件到BCD码的十进制数据的一个转换模块。图8 二进制转换成BDC(10进制)原理图符号3.4 FILTER驱动模块设计 本系统当中使用了FILTER模块,使用的是VHDL实现的该模块的设计。VHDL语言简单易用,设计本模块十分简单方便。该模块有两个驱动脉冲,一个是时钟脉冲,另一个是10MS的脉冲。同时,在这个模块里面我们还加入了一个按键脉冲输入,原理图如图9所示。图9 FILTER驱动模块原理图符号3.5 PLS模块

25、驱动设计3.5.1 PLS模块设计 本系统当中使用了一个PLS的模块,该模块的驱动使用的是VHDL硬件描述语言来实现的。本系统主要实现的是产生三个时钟信号,我们板上的使用的是CLOCK是50MHZ,然后进行分频得到1S的脉冲、1MS的脉冲和10MS的脉冲。如图10所示。图10 PLS模块原理图符号3.5.2 PLS模块设计仿真图图11 PLS模块设计仿真图3.6 出租车控制驱动模块设计 本系统是一个出租车的计价器,那么计价器的控制模块肯定是不能少的。在计价器控制模块当中,我们主要利用的是4x4矩阵键盘当中相应的按键来实现控制,比如说出租车开始计价,停止计价,计价器清零和出租车的速度等控制信号的

26、输入,具体原理图如图12所示:图12 出租车控制原理图符号3.7 顶层模块 本系统的顶层模块也是利用VHDL硬件描述语言来实现的,同时我们可以由下图可以看到该系统的顶层模块十分简单,各个底层模块的引脚映射都是在顶层模块里面实现的,具体的实现如图13所示。图13顶层模块原理图符号4系统功能4.1 计费功能实现费用的计算是按行驶里程收费,设出租车的起步价是5.00元,当里程小于3km里时,按起步价收费;当里程大于3km时每公里按1.3元计费。等待累计时间超过2min,按每分钟1.5元计费。所以总费用按下式计算:总费用=起步价+(里程-3km)*里程单价+等候时间*等候单价。4.2 显示功能实现显示

27、汽车行驶里程:用四位数字显示,显示方式为“XXXX”,单价为km。计程范围为099km,计程分辨率为1km。显示等候时间:用两位数字显示分钟,显示方式为“XX”。计时范围为059min,计时分辨率为1min。显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。计价范围为999.9元,计价分辨率为0.1元。5.设计总结基于FPGA的出租车计价器电子产品设计已经广泛应用到出租车行业,该设计是一种相对比较流行的产品设计。该设计对于里程和等待时间的计数都使用的是计数器的原理,通过fin和stop信号的不同值实现在不同情况下的计数;通过分频产生的1秒、10毫秒等对应的周期频率关系,由1HZ的

28、信号控制计量模块,由控制器选择产生的信号作为计费模块的输入信号,所以计费模块的输入信号是13HZ、15HZ的信号之一,计量模块每完成一次计数,计费模块完成13次或者15次计数,即为实现1.3元或1.5元的计费。VHDL硬件描述语言和EDA基础实验教程是设计中对于各个模块的设计是基础,首先要分析清楚各个模块的功能,然后分别进行编程设计、验证,然后使用VHDL语言中的元件例化语句,将各个模块组合到一起,实现总的设计功能。在硬件实现过程中,当进行等待计时计费时,发现计时很慢,初步分析是因为计时的驱动频率不大,需要选择256HZ以上的频率;更改以后,计时正常,但同频率下行驶计费速度较快,不便观察,因此

29、要注意观察的点和频率的选择。在本次设计当中,本人成功实现了该设计的各个底层模块的设计,而各个模块使用了不同的硬件描述语言,有Verilog HDL和VHDL两种。同时,与各个组员共同配合完成了设计等文章的书写。在本次设计当中,我学到了将理论与实践相结合,同时与团队的精神才是强大的,只有与各个组员共同配合才可能做出真正的电子设计。在这里,也要感谢××教授和××老师的不断耐心指导,才得以完成了本次的设计任务。所以,在这里非常感谢两位老师的严谨细致、一丝不苟的作风。老师循循善诱的教导和不拘一格的思路给予我无尽的启迪,这次课程设计的每个实验细节和每个数据,都离不

30、开老师您的细心指导。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。6参考文献1谭会生、瞿遂春,EDA技术综合应用实例与分析,西安电子科技大学出版社,2004,P.201-2302高有堂,EDA技术及应用实践,清华大学出版社,2006,P.201-2303亿特科技,CPLD/FPGA应用系统设计与产品开发,人民邮电出版社,2005,P.201-2304指导书 刘春阳 赵世彧,DA技术实践,人民邮电出版社,2003,P.201-2305潘松 黄继业,EDA技术实用教程,科学出版社,2004,P.201-230附录(主要底层模块驱动)多位数据管软件驱动:module s

31、eg( input i_clk, input i_rst_n, input 7:0 i_turn_off, / 熄灭位2进制 input 7:0 i_dp, / 小数点位2进制 input 31:0 i_data, / 欲显数据16进制 output 7:0 o_seg, / 段脚 output 2:0 o_sel, / 使用74HC138译出位脚 output o_cs / 74HC138选择位);/+/ 分频部分 开始/+reg 15:0 cnt; / 计数子always (posedge i_clk, negedge i_rst_n) if (!i_rst_n) cnt <= 0;

32、 else cnt <= cnt + 1'b1;wire seg7_clk = cnt15; / (216/25M = 2.6114)ms /-/ 分频部分 结束/-/+/ 动态扫描, 生成seg7_addr 开始/+reg 2:0 seg7_addr; / 第几个seg7always (posedge seg7_clk, negedge i_rst_n) if (!i_rst_n) seg7_addr <= 0; else seg7_addr <= seg7_addr + 1'b1; /-/ 动态扫描, 生成seg7_addr 结束/-/+/ 根据seg7_

33、addr, 译出位码 开始/+reg 2:0 o_sel_r; / 位选码寄存器/ 开发板上SEG7的方向是低位在左,高位在右/ 但是实际上我们看数的方向是高位在左,低位在右/ 故此处将第0位对应DIG7,第7位对应DIG0always case (seg7_addr) 0 : o_sel_r = 3'b111; / SEG77 1 : o_sel_r = 3'b110; / SEG76 2 : o_sel_r = 3'b101; / SEG75 3 : o_sel_r = 3'b100; / SEG74 4 : o_sel_r = 3'b011; /

34、SEG73 5 : o_sel_r = 3'b010; / SEG72 6 : o_sel_r = 3'b001; / SEG71 7 : o_sel_r = 3'b000; / SEG70 endcase/-/ 根据seg7_addr, 译出位码 结束/-/+/ 根据seg7_addr, 选择熄灭码 开始/+reg turn_off_r; / 熄灭码always case (seg7_addr) 0 : turn_off_r = i_turn_off0; 1 : turn_off_r = i_turn_off1; 2 : turn_off_r = i_turn_off

35、2; 3 : turn_off_r = i_turn_off3; 4 : turn_off_r = i_turn_off4; 5 : turn_off_r = i_turn_off5; 6 : turn_off_r = i_turn_off6; 7 : turn_off_r = i_turn_off7; endcase/-/ 根据seg7_addr, 选择熄灭码 结束/-/+/ 根据seg7_addr, 选择小数点码 开始/+reg dp_r; / 小数点码always case (seg7_addr) 0 : dp_r = i_dp0; 1 : dp_r = i_dp1; 2 : dp_r

36、= i_dp2; 3 : dp_r = i_dp3; 4 : dp_r = i_dp4; 5 : dp_r = i_dp5; 6 : dp_r = i_dp6; 7 : dp_r = i_dp7; endcase/-/ 根据seg7_addr, 选择小数点码 结束/-/+/ 根据seg7_addr, 选择待译段码 开始/+reg 3:0 seg_data_r; / 待译段码always case (seg7_addr) 0 : seg_data_r = i_data3:0; 1 : seg_data_r = i_data7:4; 2 : seg_data_r = i_data11:8; 3 :

37、 seg_data_r = i_data15:12; 4 : seg_data_r = i_data19:16; 5 : seg_data_r = i_data23:20; 6 : seg_data_r = i_data27:24; 7 : seg_data_r = i_data31:28; endcase/-/ 根据seg7_addr, 选择待译段码 结束/-/+/ 根据熄灭码/小数点码/待译段码/ 译出段码,开始/+reg 7:0 o_seg_r; / 段码寄存器/ 共阴always (posedge i_clk, negedge i_rst_n) if (!i_rst_n) o_seg_

38、r <= 8'h00; / 送熄灭码 else if(turn_off_r) / 送熄灭码 o_seg_r <= 8'h00; else if(!dp_r) case(seg_data_r) / 无小数点 4'h0 : o_seg_r <= 8'h3f; 4'h1 : o_seg_r <= 8'h06; 4'h2 : o_seg_r <= 8'h5b; 4'h3 : o_seg_r <= 8'h4f; 4'h4 : o_seg_r <= 8'h66; 4&#

39、39;h5 : o_seg_r <= 8'h6d; 4'h6 : o_seg_r <= 8'h7d; 4'h7 : o_seg_r <= 8'h07; 4'h8 : o_seg_r <= 8'h7f; 4'h9 : o_seg_r <= 8'h6f; 4'hA : o_seg_r <= 8'h77; 4'hB : o_seg_r <= 8'h7c; 4'hC : o_seg_r <= 8'h39; 4'hD : o_se

40、g_r <= 8'h5e; 4'hE : o_seg_r <= 8'h79; 4'hF : o_seg_r <= 8'h71; endcase else case(seg_data_r) / 加小数点 4'h0 : o_seg_r <= 8'h3f | 8'h80; 4'h1 : o_seg_r <= 8'h06 | 8'h80; 4'h2 : o_seg_r <= 8'h5b | 8'h80; 4'h3 : o_seg_r <= 8

41、'h4f | 8'h80; 4'h4 : o_seg_r <= 8'h66 | 8'h80; 4'h5 : o_seg_r <= 8'h6d | 8'h80; 4'h6 : o_seg_r <= 8'h7d | 8'h80; 4'h7 : o_seg_r <= 8'h07 | 8'h80; 4'h8 : o_seg_r <= 8'h7f | 8'h80; 4'h9 : o_seg_r <= 8'h6f | 8

42、'h80; 4'hA : o_seg_r <= 8'h77 | 8'h80; 4'hB : o_seg_r <= 8'h7c | 8'h80; 4'hC : o_seg_r <= 8'h39 | 8'h80; 4'hD : o_seg_r <= 8'h5e | 8'h80; 4'hE : o_seg_r <= 8'h79 | 8'h80; 4'hF : o_seg_r <= 8'h71 | 8'h80; en

43、dcase/-/ 根据熄灭码/小数点码/待译段码/ 译出段码,结束/-assign o_sel = o_sel_r; / 寄存器输出位选码assign o_seg = o_seg_r; / 寄存器输出段码assign o_cs = 1; / 寄存器输出选择endmodule4x4矩阵键盘软件驱动:module matrixKeyboard_drive( i_clk, i_rst_n, row, / 矩阵键盘 行 col, / 矩阵键盘 列 keyboard_val , / 键盘值 key_pressed_flag); input i_clk; input i_rst_n; input 3:0

44、row; / 矩阵键盘 行 output reg 3:0 col; / 矩阵键盘 列 output reg 3:0 keyboard_val ; / 键盘值 output key_pressed_flag ;/+/ 分频部分 开始/+reg 18:0 cnt; / 计数子always (posedge i_clk, negedge i_rst_n) if (!i_rst_n) cnt <= 0; else cnt <= cnt + 1'b1;wire key_clk = cnt18; / (219/25M = 21)ms /-/ 分频部分 结束/-/+/ 状态机部分 开始/

45、+/ 状态数较少,独热码编码parameter NO_KEY_PRESSED = 6'b000_001; / 没有按键按下 parameter SCAN_COL0 = 6'b000_010; / 扫描第0列 parameter SCAN_COL1 = 6'b000_100; / 扫描第1列 parameter SCAN_COL2 = 6'b001_000; / 扫描第2列 parameter SCAN_COL3 = 6'b010_000; / 扫描第3列 parameter KEY_PRESSED = 6'b100_000; / 有按键按下reg

46、 5:0 current_state, next_state; / 现态、次态always (posedge key_clk, negedge i_rst_n) if (!i_rst_n) current_state <= NO_KEY_PRESSED; else current_state <= next_state;/ 根据条件转移状态always * case (current_state) NO_KEY_PRESSED : / 没有按键按下 if (row != 4'hF) next_state = SCAN_COL0; else next_state = NO_KEY_PRESSED; SCAN_COL0 : / 扫描第0列 if (row != 4'hF) next_state = KEY_PRESSED; else next_state = SCAN_COL1; SCAN_COL1 : / 扫描第1列 if (row != 4'hF) next_state = KEY_PRESSED; else next_state = SCAN_COL2; SCAN_COL2 : / 扫描第2列 if (row != 4'hF) next_state = KEY_PRES

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论