文档详情

毕业设计(论文)基于FPGA的航空设备综合检测仪

痛***
实名认证
店铺
DOC
1.48MB
约69页
文档ID:41767006
毕业设计(论文)基于FPGA的航空设备综合检测仪_第1页
1/69

南昌航空大学学士学位论文1 绪论1.1 引言随着新技术的发展,航空维修检测技术经历了从原始的五官检测到现今的机内自检测、自诊断技术与人工智能测试的过程在这个过程中,机载设备日益增多,航空装备日趋复杂,比如现今飞机在电气控制中大量采用电磁阀、电动机构、控制活门等控制设备,分别用于操纵、燃油、环控等系统中这些设备的起动电压、工作电压、门限电压以及各状态下的电压和电流值等性能参数在其安全范围内能保证飞机安全飞行,但性能指标一旦超出安全范围,如果不能被及时检测并更换设备,将会干扰和危害飞机的飞行控制、通信导航等系统,降低设备的带负载能力,严重时会导致飞机失灵,从而酿成不可挽回的重大飞行事故所以设备性能参数超标与否是威胁飞行安全的重要因素之一,并受到越来越多机务维护工作者的关注在高技术条件下,为了及时、准确、定性的判断设备性能参数超标与否,需要研制一种切实可行的航空设备检测方法,设计一种客观、准确、快速、方便的航空设备综合检测仪而航空设备综合智能检测仪必须有一个与所有被测设备均能相互连接的复用接口,本文就对航空设备综合检测仪复用接口进行了分析,设计了一种航空设备综合检测仪的复用接口 通常航空设备综合检测仪的复用接口的控制电路由传统的集成电路组成,因此带来了体积大、成本高、可靠性低等缺点,本文采取了VHDL硬件描述语言[1] 设计了一种基于FPGA的航空设备综合检测仪的复用接口。

本设计的特色就在于使用了VHDL硬件描述语言大概来说,VHDL语言具有如下优点:可读性强、可移植性强、与工艺无关、覆盖面广、成本低、具有多层次描述功能VHDL语言硬件描述能力强,设计效率高,具有较高的抽象描述能力设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述其使用期长,不会因工艺变化而使描述过时,因为VHDL的硬件描述与工艺无关,当工艺改变时,不必像电路原理图一样要重新设计而造成资源浪费,只需修改相应程序中的属性参数即可一般来说,一个大规模的设计很难由一个人独立完成,必须将设计任务分解为各个模块,再由多人共同承担相应模块的设计任务,而VHDL支持大规模设计的分解和已有设计的再利用,这就为大规模设计提供了很大的方便在使用VHDL语言时,应该注重理解其三个精髓:软件的数据类型与硬件电路的唯一性、硬件行为的并行性决定了VHDL的语言的并行性、软件仿真的顺序性与硬件行为的并行性1.2 航空设备检测技术简介 检测技术[14]是一门科学,是航空维修工程技术的重要组成部分维修检测技术的发展,直接影响到维修思想、维修方式,甚至维修体制的变革检测是应用一定手段(检测设备、工具和方法),按照一定的标准,对装备的状况进行判断的过程。

航空技术装备的检测是维修性设计的极为重要的组成部分按照检测目的,通常划分为鉴定性检测、诊断性检测和预防性检测检测如按发展过程又可分为离位检测、原位检测、故障机内检测、综合测试与维修系统,以及人工智能专家系统另外,无损检测也是检测中的一项重要技术,它是针对航空技术装备中材料方面的裂纹故障和缺陷故障而使用的一项检测技术无损检测现在主要使用的技术手段可分为超声波、磁粉、电涡流、渗透、X射线等这几年有些公司又采用了激光全息照相技术、超声C扫瞄和连续运动X射线照相设备超声C扫瞄比非自动化设备效率高10倍,连续运动X射线照相设备比静止的高4倍,而全息照相设备还可以检查复合材料面板与夹芯之间的胶接质量 随着科技的日益发展,航空测试新技术更是接踵而来比如新型传感器技术就有智能传感器、光纤传感器、机器人传感器以及磁传感器和红外传感器还有新发现的声、光、磁方面的最新技术手段都可用与测试领域总之现代测试领域的技术综合利用了各种高技术成果,诸如低功耗高速高密度器件,大容量存储器件、人工智能器件、容错芯片、高性能微处理机,内有丰富控制程序与选进控制算法的数字式控制器以及激光与光纤技术等在这些高技术产品为基础上,还发展了先进的传感器技术、人工智能技术以及动态实时建模技术。

不久,现代测试系统将是一种非常灵活的系统,可按需要随意组配成大、中、小型系统,而且其应用将深入到各个领域 1.3 课题研究内容及方案随着人类对太空领域的不断探索,对航空设备的要求也越来越高在航空领域中,任何疏忽都会造成重大损失甚至人员伤亡纵观诸多因素,除对操作者素质的要求比较高之外,对智能仪器的依赖也十分大因此,具有体积小、成本低、可靠性高等特点的设备越来越受到人们的青睐,尤其是可靠性和体积方面鉴于此,本文提出了一种基于FPGA航空设备综合检测仪复用接口的设计方案虽然,该复用接口只是航空检测仪的一部分,但因为设计的接口多样而使工作变得繁重本文复用接口集成在单芯片中,包括了普通设备的四位数据接口、八位数据接口、十六位数据接口及三十二位数据接口,其中各接口除了具备传统的串行和并行接口外,还加入了串并转换接口和并串转换接口功能设计方案如下:(1)用矩阵开关来切换各接口,完成接口地址寻址的功能并输出状态信息和控制信息2)根据不同接口设计不同的接口电路3)将各子模块综合到一个模块中并用Quartus II软件进行仿真,根据仿真情况对电路进行修改,直到实现功能2 设计要点2.1 数字系统设计技术近些年数字系统的设计方法发生了深刻的变化。

传统的数字系统通常是采用搭积木式的方式设计的,即由一些固定功能的器件加上一定的外围电路构成模块,由这些模块进一步形成各种功能电路,进而构成系统构成系统的“搭积木”是各种标准芯片,如74/54(TTL)、4000/4500系列(CMOS)芯片等,这些芯片的功能是固定的,用户只能根据需要从这些标准器件中选择,并按照推荐的电路搭成系统在设计时,几乎没有灵活性可言,设计一个系统的芯片种类多且数量大PLD器件和EDA技术的出现,改变了这种传统的设计思路,使人们可以立足于PLD芯片来实现各种不同功能的电路,新的设计方法能够由设计者自己定义器件内部逻辑和引脚,将原来由电路板设计完成的工作大部分放在芯片设计中进行这样不仅可以通过芯片设计实现各种数字逻辑功能,而且由于管脚定义的灵活性,减轻了原理图和印制电路板设计的工作量和难度,增加了设计的自由度,提高了效率同时这种设计减少了所需芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的可靠性在基于EDA技术的设计[11]中,通常有两种设计思路,一种是自顶向下的设计思路,一种是自底向上的设计思路1) Top-down设计Top-down设计,即自顶向下的设计。

这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计在功能级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,然后用综合工具转化为具体门电路网表,其对应的物理实现可以是PLD器件或专用的集成电路(ASIC)由于设计的主要仿真和调试是在高层次完成的,这一方面有利于早期发现结构设计上的错误,避免设计工作的浪费,同时也减少了逻辑功能仿真的工作量,提高了设计工作的一次成功率在Top-down的设计中,将设计分成几个不同的层次:系统级、功能级、门级、开关级等,按照自上而下的顺序,在不同的层次上,对系统进行设计与仿真Top-down的设计必须经过“设计—验证—修改—再验证”的过程,不断反复,直到得到的结果能够完全实现所需要的逻辑功能,并且在速度、功耗、价格和可靠性方面实现较为合理的平衡不过,这种设计也并非绝对的,在设计过程中,有时也需要自下而上的方法,就是在系统化分和分解的基础上,先进行底层单元设计然后再逐步向上进行功能模块、子系统的设计,直至构成整个系统2)Bottom-up设计Bottom-up设计,即自底向上的设计,这是一种传统的设计思路这种设计方式,一般是设计者选择标准集成电路,或者将各种基本单元,如各种门以及加法器、计数器等模块做成基本单元库,调用这些基本单元,逐级向上组合,直到设计出满足自己需要的系统为止。

这样的设计方法就如同一砖一瓦建造金字塔,不仅效率低、成本高,而且容易出错Top-down的设计由于更符合人们逻辑思维的习惯,也容易使设计者对复杂的系统进行合理的划分与不断优化,因此是目前设计思想的主流而Bottom-up的设计往往使设计者关注了细节,而对整个系统缺乏了规划,当设计出行问题时,如果要修改的话,就会比较麻烦,甚至前功尽弃,不得不从头再来因此,在数字系统的设计中,主要采用Top-down的设计思路,而以Bottom-up设计为辅3)IP复用技术与Soc当电子系统的设计越来越向高层次发展的时候,基于IP复用(IP Reuse)的设计技术越来越显示出优越性IP(Intellectual Property),其原来的含义是指知识产权、著作权等,在IC设计领域可将其理解为实现某种功能的设计,IP核则是指完成某种功能设计的模块IP核分为硬核、固核和软核三种类型软核指的是在寄存器级或门级对电路功能用HDL进行描述,表现为VHDL或Verilog HDL代码,软核与生产工艺无关,不涉及物理实现,为后续设计留有很大的空间,增大了IP核的灵活性和适应性用户可以对软件的功能加以裁剪以符合特定的应用,也可以对软核的参数进行设置,包括总线宽度、存储器容量、使能或禁止功能块等。

硬核指的是以版图形式实现的设计模块,它基于一定的设计工艺,通常用GDSII格式表示,不同的客户可以根据自己的需要选用特定生产工艺下的硬核固核是完成了综合的功能块,通常以网表的形式提交客户使用软核使用灵活,但其可预测性差,延时不一定能达到要求;硬核可靠性高,能确保性能,如速度、功耗,能够很快的投入使用 2.2 现场可编程门阵列FPGA全称Field Programmable Gate Array,即现场可编程门阵列[1],它是作为专用集成电路 (ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分FPGA由可编程逻辑单元阵列、布线资源和可编程的I/O单元阵列构成,一个FPGA包含丰富的逻辑门、寄存器和I/O资源一片FPGA芯片就可以实现数百片甚至更多个标准数字集成电路所实现的系统。

FPGA的结构灵活,其逻辑单元、可编程内部连线和I/O单元都可以由用户编程,可以实现任何逻辑功能,满足各种设计需求其速度快,功耗低,通用性强,特别适用于复杂系统的设计使用FPGA还可以实现动态配置、系统重构及硬件软化、软件硬化等功能2.2.1 FPGA的基本特点(1)FPGA的容量较大,包含大量的逻辑单元、内嵌存储器,以及一些其他高级特点,适合比较复杂的时序逻辑的应用,比如,嵌入式CPU、数据处理等,它的现场可编程,还可以配合单片机或DSP工作;(2)FPGA提供了充足的有效逻辑容量密度,不仅大大减少印刷电路板的空间,大大降低系统功耗,同时大大提高了系统设计的工艺可实现性和产品的可取性;(3)FPGA内部采用片段连接(Segment Interconnect),采用这种连接可以充分利用其绕线功能;(4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一;(5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容FPGA除了具有ASIC的特点之外,还具有以下几个优点:(1)随着VLSI工艺的不断提高,单一芯片内部可以容纳上百万个晶体管,FPGA芯片的规模也越来越大,起单片逻辑门数已达到上百万门,它能实现的功能也越来越多,同时也可以实现系统集成;(2)FPGA芯片在出厂之前都做过百分之百的测试,不需要设计人员承担投片风险和费用,设计人员只需在自己的实验室里即可通过相关的软硬件环境来完成芯片的最终功能设计。

所以,FPGA投入小;(3)用户可以反复地编程、擦拭、使用,或者在外围电路不动的情况下用不同软件来实现不同的功能;(4)FPGA在运算执行方式上可以根据现实运算方式的不同而不同,所以其运算的速度远高于单片机 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一2.2.2 Cyclone FPGA简介Altera 在最初阶段,听取了客户的建议,设计了全新的Cyclone器件满足的大批量应用所需的特殊功能、容量、性能和加个水平全球标准、平台趋同、交互和技术改进等新的市场趋势不断促进了对成本核算方案的需求,有史以来成本最低的FPGA-Cyclone器件为某些市场的客户提供了必需的价格水平和功能,在市场上创新是根本,抢先面市就确定了领导对位Cyclone[8]器件采用成优化的全铜1.5VS RAM工艺Cyclone具有多达288Kb的片内RAM并集成了一些复杂的功能Cyclone器件具有多个全功能PLL,能够管理板极的时钟网络和同工业标准外部存储器相连的专用I/O接口Altera的Nios嵌入处理器和完整的IP库也可以用于Cyclone器件开发实际上,在Cyclone器件系列具有容量和性能的极佳组合,每个LE的价格不到1.5美元,是相竞争的FPGA的一半,涉及消费类产品、通信、计算机外设、汽车和工业市场等大批量应用系统。

设计者正在利用可编程逻辑的灵活性、经济性和及时面市的优势本设计选用Atlera公司 Cyclone II系列的EP2C70P896C6芯片,该芯片的核心电压为5V,包含68416个LE单元和1152000个存储单元,具有622个管脚;该芯片所具有的资源足以完成本设计2.3 硬件描述语言2.3.1 硬件描述语言概述硬件描述语言的发展至今已有几十年的历史,并已经成功地应用到系统仿真、验证和设计、综合等方面目前常用的硬件描述语言有VHDL、VerilogHDL、ABEL等其中VerilogHDL起源于集成电路的设计,ABEL起源于可编程逻辑器件的设计,而VHDL则起源于VHSIC计划,这是美国国防部于1980年制定的,目标是为下一代集成电路的设计和制造而制定的一种新的描述方法VHSIC计划和同期的ARPAR(先进的计算机体系结构)计划,成为后来信息高速公路计划的基础VHDL是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持2.3.2 VHDL语言VHDL主要用于描述数字系统的结构、行为、功能和接口,它是目前标准化程度最高的一种硬件描述语言VHDL[10]有两个标准版本,最早是在1987年底,IEEE公布了VHDL的标准版本IEEE-1076。

1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力发面扩展了VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本这两种版本在书写格式上有细微差别,不过绝大部分EDA软件都支持这两种版本的书写格式1997年,能够同时描述数字和模拟集成电路的VHDL语言标准IEEE1076.1发布,即VHDL-AMS VHDL是一种全方位的硬件描述语言,包括从系统到电路的所有设计层次在描述风格上,VHDL支持结构、数据流和行为三种描述形式的混合描述行为描述以过程语句来表达,数据流描述实际上是RTL级语言的扩展,因此VHDL几乎覆盖了以往各种语句描述语言的功能,整个自顶向下或由底向上的电路设计过程都可以用VHDL完成VHDL除具备一般的HDL优点外,其特点是:(1)通用性好,支持面广由于它是工业标准,凡大型CAD软件都推出支持VHDL的设计环境因此用VHDL描述的设计文件,可用不同的设计工具2)复用性好在用VHDL语言设计系统硬件时,没有嵌入与工艺有关的信息当门级或门级以上的层次通过仿真验证后,再用相应的工具将设计映射成不同的工艺(如MOS.CMOS等)这样,在工艺更新时,就无须修改原程序,只要改变相应的映射工具就行了。

因此VHDL设计模块便于在不同的设计场合重复使用3)可靠性好VHDL文件兼技术文档与实体设计于一身,可读性好,既是技术说明,又是设计实现,从而保证了二者的一致性2.4 接口技术概述2.4.1 接口概念接口[2](interface)是微处理器CPU与外部设备、存储器或者两种外部设备之间或者两种机器之间通过系统总线进行连接的逻辑电路,它是CPU与外界进行信息交换的中转站比如原始数据或源程序通过接口从输入设备(例如键盘)输入;运算结果通过接口输出到输出设备(例如打印机、显示器);控制命令通过接口送到被控对象(例如步进电机);现场采集的信息通过接口传送进来(例如温度值或转数值)要使外部设备正常工作,一是要设计正确的接口电路,二是要编制相应的软件可以说微机接口技术是采用硬件和软件相结合的方法来研究微处理器如何与外部世界进行最佳耦合与匹配,以便在CPU与外部世界之间进行高效、可靠的信息交换技术 2.4.2 接口的功能外部设备的种类繁多,可以是机械式的、电子式的、机电式的、磁电式的以及光电式的等输入输出的信息多种多样,有数字信号、模拟信号以及开关信号等;信息传输的速度也不相同,手动键盘输入速度为秒级,而磁盘输入可达1兆字节/秒至数十兆字节/秒,不同外设处理信息的信息也相差悬殊。

另外,微型计算机与不同的外部设备之间所传输的信息格式和电平高低也是多种多样的这就形成了外设接口电路的多样性和复杂性CPU与外设之间的接口主要有如下功能1. 数据的寄存和缓冲功能为了解决主机高速与外设低速的矛盾,避免因速度不一致而丢失数据,使CPU的工作效率得到充分发挥,接口内设置数据寄存器或者用RAM芯片组成数据缓冲区,使之成为数据交换的中转站接口的数据保持能力在一定程度上缓解了主机与外设之间速度差异所造成的冲突,并为主机与外设的批量数据传输创造了条件(“数据口”)2. 对外设的控制和监测能力接口接受CPU送来的命令字或控制字,再有接口电路对命令代码进行识别和分析,并分解成若干个控制命令,实施对外部设备的控制和管理(“命令口”)外部设备的工作状况以状态字或应答信号通过接口返回给CPU,以“握手联络”过程来保证主机与外设输入/输出操作的同步于协调(“状态口”)3. 设备选择功能系统中一般带有多种外设,同一种外设可能也有多台,而CPU在同一时刻只能与一台外设交换信息,这就要借助接口中的地址译码电路对外设进行寻址只有被选中的外设才能与CPU进行数据交换4. 信号转换功能外部设备大都是复杂的机电设备,其所需的控制信号和所能提供的状态信号往往同微机的总线信号不兼容,尤其是连接不同公司生产的芯片时,信号转换就不可避免。

信号转换包括CPU信号与外设信号在模拟数字信号上、时序配合上、数据格式上以及电平匹配上等的转换此外,为了防止干扰,常常使用光电耦合和继电器计数等,使主机与外设在电气上隔离5. 中断管理或DMA管理功能为了满足实时性和主机与外设并行工作的要求,需要采用中断传送的方式;为了提高传送的速率有时又采用DMA传送方式这就要求接口有产生中断请求和DMA请求的能力以及中断管理和DMA管理的能力6. 可编程功能对一些通用的、功能齐全的接口电路,应该具有可编程的能力,即可用软件来选用多功能接口电路的某些功能,以适应具体工作的要求,这也是近代接口电路的发展方向并非每种接口都要求具备上述功能,对不同配置和不同用途的微机系统,其接口功能不同,接口电路的复杂程度也大不相同但是,设备选择、数据寄存于缓冲以及输入/输出操作的同步能力是各接口都应具备的基本功能2.4.3 CPU与外设之间传送的信息一个简单的、基本的外设接口框图如图2.1所示外设接口一边通过三总线(即DB、AB、CB)同CPU连接,一边通过三种信息——数据信息、控制信息、和状态信息同外设联系CPU通过外设接口同外设交换的信息就是这三种1. 数据信息(Data)微机中的数据信息大致包括三种基本类型。

1)数字量 以二进制码形式提供的信息,通常是8位、16位、和32位数据2)模拟量 当微机用于控制时,诸如温度、压力、流量及位移等各种非电量现场信号这些模拟量必须先经过A/D转换后才能输入微机;微机的控制输出先经过D/A转换后才能去控制执行机构3)开关量 这是一些只有两个状态的量,如开关的合与断以及LED的亮与灭等开关量只要用一位二进制数即可表示,故8位数据总线的微机一次输入或输出可控制8个开关量 2. 状态信息表示外设当前所处的工作状态,例如READY(就绪信号)表示输入设备已经准备好数据,BUSY(忙信号)表示输出设备是否能接收信息 3. 控制信息 控制信息是由CPU发出的用于控制外设接口工作方式,以及外设的启动和停止的信息数据信息、状态信息和控制信息通常都以数据形式通过CPU的数据总线同CPU进行传送,这些信息分别存放在外设接口的不同类型的寄存器中CPU同外设之间的信息传送实质上是对这些寄存器进行“读”或“写”操作接口”中这些可以和CPU进行读或写的寄存器被称为“端口”(Port)按存放信息的类型,这些端口可分为“数据口”、“状态口”与“控制口”,分别存放数据信息、状态信息和控制信息。

在一个外设接口中往往需要有几个端口才能满足和协调外设工作,CPU通过访问这些端口来了解外设的状态、控制外设的工作以及外设之间的数据传输CPU数据端口控制端口状态端口译码外设CBDBAB接口电路数据信息控制信息状态信息图 2.1 接口、端口作用示意图3 开发平台介绍3.1 开发软件Quartus II[9]是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL等多种设计输入形式,内嵌自带的综合器以及仿真器,可以完成从设计到硬件配置的完整PLD设计流程它可以在Windows XP、Linux以及UNIX上使用,除了可以使用Tcl脚本完成设计流程外,它还提供了完善的的用户界面设计形式;具有运行速度快,界面统一,功能集中,易学易用等特点3.2基本设计流程3.2.1编辑设计文件及创建工程 (1)建立工程文件任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与其相关的所有设计文件的文件夹,此文件夹将被EDA软件默认为工作库一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中在建立文件夹后就可以将设计文件通过Quartus II文本编辑器编辑并存盘。

Altera公司的Quartus II 提供的各种原理图库进行设计输入是一种最为直接的输入方式若要使用这种输入方式,应采用自顶向下逻辑分块,把大规模的电路划分成若干小块一般而言,如果对系统很了解,并且系统速率较高,或在大系统中对时间特性要求较高的部分,可以采用这种方法原理图输入效率较低,但容易实现仿真,便于信号的观察以及电路的调整,在此不作详述2)创建工程使用New Project Wizard命令可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称,还可以指定要在工程中使用的设计文件、其他源文件、用户库和EDA工具以及目标器件系列和具体器件等建立工程后,可以在工具栏的Project ADD/Remove Files Project页在工程中添加、删除和设计其他文件,在执行Quartus II的 Analysis &Synthesis 期间,Quartus II将按ADD/Remove Files Project页中显示的顺序处理文件3.2.2 全程编译Quartus II编译器是由一系列处理模块构成的,这些模块负责对设计项目的检错,逻辑综合、结构综合、输出结果的编辑配置,以及时序分析。

在这一过程中,将设计项目适配到FPGA/CPLD目标器中,同时产生多种用途的输出文件,如功能和时序信息文件、器件编程的目标文件等编译器首先检查出工程设计文件中可能的错误信息,供设计者排除;然后产生一个结构化的以网表形式的电路原理图文件编译前首先选择Processing菜单的Start Compilation 命令,启动全程编译,这里所谓的全程编译(Compilation)是指以上提到的Quartus II对设计输入的多项处理工作,其中包括排错、数据网表文件提取、逻辑综合、适配、装配文件(仿真文件和编程配置文件)生成,以及基于目标器件的工程时序分析等编译过程中要注意工程管理下方的Processing栏中的编译信息,如果工程的文件有错,启动编译后在下方的Processing处理栏中显示出来对于Processing栏中显示的语句格式错误,可双击错误信息条文,即弹出对应的VHDL文件,在深色标记条处即为文件中的错误,再次进行编译直至排除所有错误如果编译成功,可以看到工程管理窗的左上角显示了工程的层次结构和其中的结构模块耗用的逻辑宏单元数;在此栏下是编译处理流程,包括数据网表建立、逻辑综合、适配、配置文件装配和时序分析等;最下栏是编译处理信息;中栏(Compilation Report)是编译报告项目选择菜单,单击其中各项可以详细了解编译与分析结果。

3.2.3 时序仿真(1) 打开波形编辑器选择File →New 命令,在New 对话框中选择Other Files中的Vector Waveform Files选项,单击OK按钮,即打开空白的波形编辑器2)设置仿真时间区域,对于时序仿真来说,将仿真时间设置在一个合理的时间区域上十分重要通常设置时间范围在数十微秒间首先在Edit菜单中选择End Time命令,即弹出对话框设置好时间后单击OK按钮结束设置3)将工程的端口信号节点选入波形编辑器中方法是首先选择View菜单中的Utility Windows子菜单中的Node Finder命令在Fliter下拉表中选Pins:all选项(通常已经默认选此项),然后单击List按钮,于是在Nodes Found列表框中显示设计中的工程所有端口引脚名4) 波形文件存盘选择Files→Save As命令5) 编辑输入波形6)总线数据格式设置7)仿真方式的选择在Quartus II软件中有两种仿真方式:功能仿真和时序仿真方法是:在菜单栏中选择Processing→Simulation Tool 命令即弹出仿真方式选择窗口,在窗口Simulation mode处是时序仿真和功能仿真选择窗口。

选择好后,单击Generate Functional Netlist按钮,再单击“确定”按钮,最后单击Start按钮,即完成仿真方式的确定8)仿真器参数设计选择Assignment→Setting命令,即弹出仿真参数设置窗口9)启动仿真器所有设置完毕后,选择Processing→Start Simulation命令10)观察仿真结果仿真波形文件Simulation Report通常会自动弹出仿真结果在窗口中单击右键选择Zoom→Fit in Windows命令则可看到整个屏幕为了能对工程进行硬件测试,应将其输入输出信号锁定在芯片确定的引脚上,编译下载后还必须配置芯片进行编译,完成FPGA的最终开发引脚设定在菜单栏中选择Assigment→Assigment Editor命令,及弹出编辑器窗口,在Category栏中选择Pin选项引脚设定后,必须再编译一次编译后,会生成SOF格式配置文件,对FPGA进行配置模式有:JTAG,Passive Serial,Active Serial和In-Socket.4 复用接口电路设计4.1复用接口电路总体结构设计在本文中,复用接口由矩阵开关电路和接口电路组成。

其中,矩阵开关电路设计主要由三部分组成:键盘接口电路和数字按键显示电路及接口控制电路接口电路设计主要由四部分组成:四位数据接口电路、八位数据接口电路、十六位数据接口电路及三十二位数据接口电路其中,键盘接口电路包括时钟产生电路、键盘扫描电路、键盘译码电路;四位数据接口电路包括并行接口、串行接口、串并转换接口及并串转换接口八位数据接口电路包括并行接口、串行接口、串并转换接口及并串转换接口同样十六位数据接口及三十二位数据接口也包括并行接口、串行接口、串并转换接口及并串转换接口而且各数据接口电路都包含帧同步数字[19]生成模块,实现了数据的帧同步传输本设计复用接口实现的主要功能为:当系统上电后,由矩阵开关输入所要选择的接口相对应的键值,按下键后,就会打开相应的接口,而后被测设备中的数据就可经接口电路传输到微机系统中(键值与接口关系见附录C)4.2 矩阵开关电路设计4.2.1 矩阵式键盘的工作原理矩阵式键盘采用常用的行列格式,5x5矩阵键盘的面板配置及外围接点电路[26]如图4.1所示键盘上的每一个按键是一个开关电路,当有键被按下,且获得相应的扫描信号时,接点会呈现逻辑0状态因为每个输出接口都接到了电压为+5V电源电图4.1 矩阵键盘的面板配置及外围接点电路路上,没有键按下时,则会呈现由电源电路经1K欧姆上拉电阻后给定的高电平状态,即逻辑1状态。

扫描信号由key_drv进入键盘,变化的顺序依次是11110 — 11101 — 11011 — 10111 — 01111 —11110每次扫描一行,依次周而复始若扫描信号为11110,代表目前正在扫描第一行,如果该行没有按键按下,则key_in4…key_in0输出的值为11111;反之,当有键按下时,如“1”按键被按下,则由key_in4…key_in0读出的值为11110同样可列出其它按键与数码的关系,如表4.1所示表 4.1按键键值与数码的关系扫描输入编码key_drv4—key_drv0 键盘输出编码按键编码按键键值key_in4—key_in011110 111101111011110 1 111011111011101 2 110111111011011 3 101111111010111 4 11101 11110 1110111110 5 11101 1110111101 6 11011 1110111011 7 10111 1110110111 8 10111 11110 1011111110 9 11101 1011111101 10 11011 1011111011 11 10111 1011110111 12 10111 111101011111110 13 11101 1011111101 14 11011 1011111011 15 10111 1011110111 16 01111 01111 0111101111 复位其中没有给出定义的键视为扩展键,当要实现其他功能时可对键盘进行扩展。

如果有按键被按下时,则将读出的值送至编码电路进行编码按键具体功能见附录C4.2.2 时钟产生电路及仿真时钟产生电路的结构特点是由存储电路和组合电路两部分组成,或通俗地说由触发器和门电路组成,如图4.2所示时钟电路的状态是由存储电路来记忆的,因而在时钟电路中,触发器是必不可少的组 合 电 路存 储 电 路输入输出图4.2 时钟电路的结构框图在本文中,考虑到数据的传输延迟,将系统时钟作了五十分频,然后作为扫描电路的时钟输入经Quartus II仿真后的结果及生成的RTL电路如图4.3、4.4所示,源程序如下:69library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clkgen isport(clk:in std_logic; clk_scan: out std_logic);end entity clkgen;architecture one of clkgen issignal cnt:integer range 0 to 49;beginprocess(clk)beginif clkevent and clk=1 then if cnt=49 then cnt<=0; else cnt<=cnt+1;end if;end if;end process;process(cnt,clk)begin if clkevent and clk=1 then if cnt>=49/2 then clk_scan<=1; else clk_scan<=0;end if;end if;end process;end;图4.3 时钟产生电路时序仿真波形图图4.4 时钟产生电路RTL电路图从波形图4.3可以看出,clk_sacn得到的波形频率是时钟脉冲信号的1/50,也就是将时钟脉冲信号clk频率除50。

4.2.3 键盘扫描电路设计及仿真扫描电路是用来提供键盘扫描信号(表4.1中的key_drv4 — key_drv0)的电路,扫描信号变化的顺序依次为“11110—1110l—11011—10111—01111 — 11110”,并依次循环扫描扫描时,扫描信号都只会给其中一行赋低电平信号依次分别扫描四列按键,当扫描信号为11110时,扫描第一行按键当扫描信号为11101时,扫描第二行按键当扫描信号为11011时,扫描第三行按键当扫描信号为10111时,扫描第四行按键当扫描信号为01111时,扫描第五行按键每扫描一行按键,都会产生由key_drv4 — key_drv0和key_in4…key_in0组成的键值编码,然后交由键值译码电路完成译码扫描电路仿真波形见图4.5,RTL图见图4.6扫描电路的源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity keyscan isport(clk_scan:in std_logic;key_drv:out std_logic_vector(4 downto 0));end entity keyscan;architecture one of keyscan isconstant S0: std_logic_vector(4 downto 0):="11110";constant S1: std_logic_vector(4 downto 0):="11101";constant S2: std_logic_vector(4 downto 0):="11011";constant S3: std_logic_vector(4 downto 0):="10111";constant S4: std_logic_vector(4 downto 0):="01111";signal present_state:std_logic_vector(4 downto 0);signal next_state:std_logic_vector(4 downto 0);beginprocess(clk_scan)beginifclk_scanevent and clk_scan=1 then present_state<=next_state;end if;end process;process(present_state)begincase present_state iswhen S0=>next_state<=S1;when S1=>next_state<=S2;when S2=>next_state<=S3;when S3=>next_state<=S4;when S4=>next_state<=S0;when others=>next_state<=S0;end case;end process;key_drv<=present_state;end;南昌航空大学学士学位论文图4.5 按键扫描程序波形仿真图图4.6 按键扫描模块的RTL图 观察图4.5扫描电路仿真图可见,该电路实现了扫描功能。

4.2.4 键盘译码电路设计及仿真上述键盘中,每个按健都有自己相应的功能本文中主要分为数字键和复位键,数字按键主要用来输入数字,但是我们知道键值的编码不能直接为我们所用,必须配备一个键盘译码电路来规划每个按健的输出值,以便执行相应动作本设计中键盘译码电路各参数[4]如表4.3所示表4.2 键 盘 参 数 表扫描输入编码key_drv4—key_drv0 键盘输出编码键盘译码数码管编码键值译码输出key_in4—key_in011110 1111001111110000110 00001 1110101111111011011 00010 1101101111111001111 00011 1011101111111100110 00100 11101 11110 01111111101101 00101 11101 01111111111101 00110 11011 01111110000111 00111 10111 01111111111111 01000 10111 11110 01111111110111 01001 11101 00001100111111 01010 11011 00001100000110 01011 10111 00001101011011 01100 10111 11110 00001101001111 01101 11101 00001101100110 01110 11011 00001101101101 01111 10111 00001101111101 10000 01111 01111 01111110111111 10001 在本文译码电路中,所译出的码有两种用途,一种是数码管所需的数码管译码,一种是键值译码,如表4.3所示。

特别强调的是本文把复位功能键的数码管译码译为01111110111111,键值译码为10001源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity keydecoder isport(key_in:in std_logic_vector(4 downto 0); key_drv:in std_logic_vector(4 downto 0); clk:in std_logic; keyvalue: out std_logic_vector(4 downto 0); key_pressed:out std_logic);end entity keydecoder;architecture one of keydecoder issignal temp_preseed: std_logic;signal temp: std_logic_vector(9 downto 0);begintemp<=key_drv&key_in;process(temp)begincase temp iswhen "1111011110"=>keyvalue<=conv_std_logic_vector(1,5);temp_preseed<=1;when "1111011101"=>keyvalue<=conv_std_logic_vector(2,5);temp_preseed<=1;when "1111011011"=>keyvalue<=conv_std_logic_vector(3,5);temp_preseed<=1;when "1111010111"=>keyvalue<=conv_std_logic_vector(4,5);temp_preseed<=1;when "1110111110"=>keyvalue<=conv_std_logic_vector(5,5);temp_preseed<=1;when "1110111101"=>keyvalue<=conv_std_logic_vector(6,5);temp_preseed<=1;when "1110111011"=>keyvalue<=conv_std_logic_vector(7,5);temp_preseed<=1;when "1110101111"=>keyvalue<=conv_std_logic_vector(8,5);temp_preseed<=1;when "1101111110"=>keyvalue<=conv_std_logic_vector(9,5);temp_preseed<=1;when "1101111101"=>keyvalue<=conv_std_logic_vector(10,5);temp_preseed<=1;when "1101111011"=>keyvalue<=conv_std_logic_vector(11,5);temp_preseed<=1;when "1101110111"=>keyvalue<=conv_std_logic_vector(12,5);temp_preseed<=1;when "1011111110"=>keyvalue<=conv_std_logic_vector(13,5);temp_preseed<=1;when "1011111101"=>keyvalue<=conv_std_logic_vector(14,5);temp_preseed<=1;when "1011111011"=>keyvalue<=conv_std_logic_vector(15,5);temp_preseed<=1;when "1011110111"=>keyvalue<=conv_std_logic_vector(16,5);temp_preseed<=1;when "0111101111"=>keyvalue<=conv_std_logic_vector(17,5);temp_preseed<=0;when others=>keyvalue<="ZZZZZ";temp_preseed<=0;end case;end process;process(clk) beginif clkevent and clk=1 then key_pressed<=temp_preseed; end if;end process;end;在译码电路设计中,主要思想是:首先从扫描电路中获得键值编码,然后对编码进行识别,识别后进行相应处理。

比如,若获得键值编码为1111011110,则将keyvalue赋值00001,也即用五位二进制数表示1,此处使用了con_std_logic_vector语句实现该功能另外值得一提的是,每当识别出有键按下时,就会使按键信号处在逻辑1状态,而按键信号得职责就是每当有键按下时,就立即通知微机系统和其他模块有键按下,让它们准备接受数据或做其他工作译码电路的仿真波形如图4.7,键盘译码RTL图见附录图4.7 键盘译码程序波形仿真图 从仿真波形中我们可以看出,当获得键值编码为1111011110时,keyvalue输出值为00001,也即十进制的1,而且temp_preseed变成了高电平由此,该设计实现了功能4.2.5 按键显示电路设计及仿真数字系统内部大多采用二进制或十六进制数据,但是在日常生活中几乎都用十进制因此,为了方便而且能够显示按键值,本设计使用七段数码管作为按键的显示电路七段数码管通常分为共阳极和共阴极两种,它们可以等效为7个LED(不考虑小数点)的连接电路,本文采用了两个共阴极七段显示器其参数如表4.3,源程序及RTL图见附录A 4.3数码管参数表所显示的字符数码管编码seg2seg3gfedcbagfedcba 0101111110000110 0201111111011011 0301111111。

下载提示
相关文档
正为您匹配相似的精品文档