您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > FPGA课设-手机自动拨号器
11.绪论1.1FPGA简介FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。时至今日,FPGA(现场可编程逻辑器件)产品的应用领域已经从原来的通信扩展到消费电子、汽车电子、工业控制、测试测量等广泛的领域。而应用的变化也使FPGA产品近几年的演进趋势越来越明显:一方面,FPGA供应商致力于采用当前最先进的工艺来提升产品的性能,降低产品的成本;另一方面,越来越多的通用IP(知识产权)或客户定制IP被引入FPGA中,以满足客户产品快速上市的要求。此外,FPGA企业都在大力降低产品的功耗,满足业界越来越苛刻的低功耗需求。1.2AlteraQuartusII简介AlteraQuartusII是一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。当前官方提供下载的最新版本是v13.0。AlteraQuartusII(3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。工程师使用同样的低价位工具对StratixFPGA进行功能验证和原型设计,又可以设计HardCopyStratix器件用于批量成品。系统设计者现在能够用QuartusII软件评估HardCopyStratix器件的性能和功耗,相应地进行最大吞吐量设计。2Altera的QuartusII可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。1.3VerilogHDL简介VerilogHDL是一种硬件描述语言(HDL:HardwareDescriptionLanguage),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。VerilogHDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由GatewayDesignAutomation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。2.设计任务及要求2.1设计任务设计一个自动重复拨号器电路。当按下拨号键后,该电路能够自动地、重复地输出一个11位的手机号码(本课题用于学生本人的手机号、固定电话号加拨027)。并用数码管显示该号码。显示的数码清晰明亮,无闪烁。2.2设计要求1、选择FPGA开发板。2、定义输入输出变量。33、编写FPGA程序。4、仿真并测试系统功能。5、规定的格式(见附录),写出课程设计报告。3.电路的设计过程3.1设计思路本次课程设计的主要任务就是要将一个手机号码自动重复地输出,并且用数码管显示出来。因此,可以将本次的设计电路分为两大模块:循环计数模块和译码模块。前者负责产生循环的手机号码输出,后者则负责对输出的信号进行译码以便用于数码管显示。最后我们可以加上一个D触发器对输出信号进行寄存输出,以使输出信号更加稳定。在本次设计中,采用的语言为VerilogHDL。3.2模块设计原理3.2.1循环计数输出模块①原理概述:考虑到我们要对一个手机号码进行循环地输出,而手机号往往是没有太强规律性的一串数字,因此我们可以用状态机中的每一个状态分别代表每一位号码,从而利用状态的循环输出达到设计要求的目的。另外我们还需要对输出进行一定的控制,在这里我们加入一个RESET信号进行复位,当RESET有效时(本次设计中为低电平有效),计数从头开始。图3.1中每一个状态都分别对应着一位手机号的输出,通过这11个状态的循环切换,即可以实现手机号码的循环输出。4RESET=0图3.1状态转换图②状态机的选用在设计本模块时,我们用到了有限状态机(FiniteStateMachine)。这是一种重要的时序电路,在数字系统设计中有着非常重要的地位和作用,使用它可以较容易设计出复杂的数字系统,包含组合逻辑电路。有限状态机可以描述和实现大部分的时序电路。这里所谓的有限状态机实际上就是一种算法思想,它能够根据控制信号按照有序方式遍历预先定义的状态序列,它由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。有限状态机根据输出信号与当前状态以及输入信号的关系来分,可以分为Moore型和Mealy型两种。其中输出信号只和当前状态有关的状态机称为Moore型状态机;输出信号不仅与当前与状态有关,而且也和输入信号有关的状态机称为Mealy型状态机。由于Moore状态机与mealy状态机相比,由于其状态输出与输入无关,而只与当前状态有关,所以它可以避免由输入信号引起的毛刺,一般建议使用Moore状态机。因此在本次设计中选用了Moore状态机进行设计。③状态机的编码st0St0st2st1st3st4st5st6st6st7st8st9st105常用的编码有三种:二进制编码、Gray码、one-hot编码。另外,还可以自定义编码,比如在高速设计中以状态编码作为输出。FSM几种常用的编码实例如表3.1所示。表3.1FSM几种常用的编码实例几种编码的特点:顺序编码、Gray码使用最少的Flip-Flop(触发器);One-Hot编码使用最多的Flip-Flop;FSM的编码方式、各个具体状态的编码形式决定了FSM所需要的Flip-Flop数目及FSM的输出逻辑、状态转换逻辑的复杂性。采用顺序编码、Gray码、Johnson编码,FSM的状态转换逻辑、输出逻辑较复杂,逻辑延时级数较多;采用One-Hot编码,FSM的转态转换逻辑、输出逻辑相对简单,速度快,但Flip-Flop的使用数量最多;必要时,须对FSM的状态数目加以划分。6在本次设计中只是要实现简单的手机号各位状态的转换和输出,每个状态的跳转只有一个分支,我们可以使用格雷码进行编码,它使用的触发器较少,而且在这种情况下有着良好的抗毛刺效果。④模块程序设计Moore状态机的结构图如图3.2所示。图3.2Moore状态机结构图状态机的代码编写一般有三种风格:一段式、两段式、三段式。一段式将状态转移寄存、状态译码和输出放在一个always块中;二段式有两个always块,一个完成状态转移寄存、另一个完成状态译码和输出;三段式中两个always块,一个完成状态转移、另一个完成状态译码和输出,还对状态输出进行了寄存,有可能使用三个always,也有可能是两个(本身已经对状态输出进行了寄存)。一段式描述可读性差,更重要的是这种风格不能被综合工具很好的识别,因而比较难被优化。二段式把组合逻辑和时序逻辑分开,有较好的可读写,能被优化,但可能出现毛刺。三段式在保留二段式有点的基础上,可以有效滤除毛刺,提高工作频率,只是资源占用略多,三段式中两个always块,一个完成状态转移、另一个完成状态译码和输出,还7对状态输出进行了寄存,有可能使用三个always,也有可能是两个(本身已经对状态输出进行了寄存)。因此在本次设计中使用了三段式写法。根据以上选定的设计方案,得到程序流程图如图3.3所示。开始等待时钟(clk)上升沿或复位(reset)下降沿是复位if(!reset)否次态逻辑完成状态转移输出逻辑根据pre_state决定pres_state=next_state;根据pres_statenext_state决定相应输出图3.3循环计数模块流程图8基于以上分析编写模块程序,所得的模块电路符号如图3.4所示:图3.4循环计数模块符号3.2.2译码模块在循环计数模块中我们一般采用的是二进制或BCD码的形式进行输出。在此次设计中,我们需要的是一个BCD—七段数码管的译码器。LED数码管的结构如图3.5所示。图3.5LED数码管9根据数码管的结构,我们就可以进行相应的译码。BCD七段译码的真值表如表3.2所示。表3.2BCD七段译码真值表根据真值表,译码模块的逻辑比较容易实现,只要利用case语句以各个输入状态为条件进行判断选择相应的输出即可。编写模块程序,所得模块电路符号如图3.6所示。10图3.6BCD七段译码模块符号3.2.3D触发器模块在组合电路中,由于输入变量不在同一时间改变,会有设计外的信号产生,形成“毛刺”。即两个信号的变化有先有后,而不是同时变化,将会导致有一瞬间的毛刺。在电路最后的译码输出上再加上D触发器,可以有效地对输出的组合信号进行同步,从而有效地消除毛刺影响,使得输出信号更加稳定。在VerilogHDL中,要实现D触发器,只需要利用always@(posedgeCLK)语句对输出进行控制即可。编写模块程序所得模块电路符号如图3.7所示。图3.7D触发器模块符号11利用VerilogHDL语言和Quartusii软件对各模块分别编写相应的程序(见附录),再利用软件进行分析综合以及编译,即可得到各个模块的电路符号。在BDF文件中对模块进行连接,我们就得到了电路的完整模型,如图3.8所示。图3.8总电路仿真模型图4.电路仿真结果通过quartusii软件我们可以对所设计的电路进行波形仿真。由图4.1我们可以知道电路的输入包括clk和reset,输出data_out和Q6分别为译码前的计数输出和译码后的计数输出。Q则为经过D触发器寄存后的输出。这几个部分的仿真结果如图4.1、4.2、4.3和4.4所示。12图4.1总体仿真波形图4.2循环计数输出波形图4.3七段译码输出波形13图4.4D触发器输出波形5.仿真结果分析从仿真波形我们可以看出,循环计数模块输出的正好是我们设定好的手机号码,而且能够不断地循环输出。当我们提供了一个RESET有效(低电平)时,可以看到循环计数输出又开始从头计数。译码器的输出波形与译码真值表相一致。设计中要求用数码管显示结果,且要求数码显示清晰明亮,因此我们需要对输出频率进行相应调整,对此我们只需要将时钟周期设为1s左右即可。另外本次仿真所用的模式为时序模式,从仿真结果可以看到,输出的波形还存在着细微的毛刺现象。但对比七段译码输出和D触发器的输出波形可以发现,经过D触发器的寄存输出得到的波形更加平滑,因而输出的信号也更加稳定。综上可知,本次设计能够达到目的,满足了设计的要求。146.心得体会通过本次所做的课程设计,我学到了很多。例如我在程序中一些时序问题,还有程序并行的问题等等。同事由于本次实验要用quartusII软件,对软件不熟悉导致了许多错误和问题的发生。通过这次实验,我不但熟悉了quartusII软件,也了解了开发的最基本流程和方法,也进一步加深了对Verilog编程语言的理解。这是一次颇有收获的实训,这次的实训中,我们更进一步体会到自主学习和团队合作的乐趣与必要性。为了完成项目,在网络上找到了许多相关资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解,这才知道老师的良苦用心。相信以后的我不管是做网络亦或是从事软、硬件开发,都会有一个扎实的基础和良好的开发习惯的。同时在此次FPGA课设的过程中,我越来越认识到一点,编写程序对项目
本文标题:FPGA课设-手机自动拨号器
链接地址:https://www.777doc.com/doc-5466483 .html