FPGA课设 手机自动拨号器.doc
《FPGA课设 手机自动拨号器.doc》由会员分享,可在线阅读,更多相关《FPGA课设 手机自动拨号器.doc(20页珍藏版)》请在冰豆网上搜索。
![FPGA课设 手机自动拨号器.doc](https://file1.bdocx.com/fileroot1/2022-10/7/0bb3355e-e827-4820-b8fb-55a598f56ec0/0bb3355e-e827-4820-b8fb-55a598f56ec01.gif)
1.绪论
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器件的性能和功耗,相应地进行最大吞吐量设计。
Altera的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、定义输入输出变量。
3、编写FPGA程序。
4、仿真并测试系统功能。
5、规定的格式(见附录),写出课程设计报告。
3.电路的设计过程
3.1设计思路
本次课程设计的主要任务就是要将一个手机号码自动重复地输出,并且用数码管显示出来。
因此,可以将本次的设计电路分为两大模块:
循环计数模块和译码模块。
前者负责产生循环的手机号码输出,后者则负责对输出的信号进行译码以便用于数码管显示。
最后我们可以加上一个D触发器对输出信号进行寄存输出,以使输出信号更加稳定。
在本次设计中,采用的语言为VerilogHDL。
3.2模块设计原理
3.2.1循环计数输出模块
①原理概述:
考虑到我们要对一个手机号码进行循环地输出,而手机号往往是没有太强规律性的一串数字,因此我们可以用状态机中的每一个状态分别代表每一位号码,从而利用状态的循环输出达到设计要求的目的。
另外我们还需要对输出进行一定的控制,在这里我们加入一个RESET信号进行复位,当RESET有效时(本次设计中为低电平有效),计数从头开始。
图3.1中每一个状态都分别对应着一位手机号的输出,通过这11个状态的循环切换,即可以实现手机号码的循环输出。
RESET=0
st0St0
st2
st1
st3
st4
st5
st6st6
st7
st8
st9
st10
图3.1状态转换图
②状态机的选用
在设计本模块时,我们用到了有限状态机(FiniteStateMachine)。
这是一种重要的时序电路,在数字系统设计中有着非常重要的地位和作用,使用它可以较容易设计出复杂的数字系统,包含组合逻辑电路。
有限状态机可以描述和实现大部分的时序电路。
这里所谓的有限状态机实际上就是一种算法思想,它能够根据控制信号按照有序方式遍历预先定义的状态序列,它由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。
有限状态机根据输出信号与当前状态以及输入信号的关系来分,可以分为Moore型和Mealy型两种。
其中输出信号只和当前状态有关的状态机称为Moore型状态机;输出信号不仅与当前与状态有关,而且也和输入信号有关的状态机称为Mealy型状态机。
由于Moore状态机与mealy状态机相比,由于其状态输出与输入无关,而只与当前状态有关,所以它可以避免由输入信号引起的毛刺,一般建议使用Moore状态机。
因此在本次设计中选用了Moore状态机进行设计。
③状态机的编码
常用的编码有三种:
二进制编码、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的状态数目加以划分。
在本次设计中只是要实现简单的手机号各位状态的转换和输出,每个状态的跳转只有一个分支,我们可以使用格雷码进行编码,它使用的触发器较少,而且在这种情况下有着良好的抗毛刺效果。
④模块程序设计
Moore状态机的结构图如图3.2所示。
图3.2Moore状态机结构图
状态机的代码编写一般有三种风格:
一段式、两段式、三段式。
一段式将状态转移寄存、状态译码和输出放在一个always块中;二段式有两个always块,一个完成状态转移寄存、另一个完成状态译码和输出;三段式中两个always块,一个完成状态转移、另一个完成状态译码和输出,还对状态输出进行了寄存,有可能使用三个always,也有可能是两个(本身已经对状态输出进行了寄存)。
一段式描述可读性差,更重要的是这种风格不能被综合工具很好的识别,因而比较难被优化。
二段式把组合逻辑和时序逻辑分开,有较好的可读写,能被优化,但可能出现毛刺。
三段式在保留二段式有点的基础上,可以有效滤除毛刺,提高工作频率,只是资源占用略多,三段式中两个always块,一个完成状态转移、另一个完成状态译码和输出,还对状态输出进行了寄存,有可能使用三个always,也有可能是两个(本身已经对状态输出进行了寄存)。
因此在本次设计中使用了三段式写法。
根据以上选定的设计方案,得到程序流程图如图3.3所示。
开始
等待时钟(clk)上升沿或
复位(reset)下降沿
是
复位if(!
reset)
否
次态逻辑完成状态转移输出逻辑
根据pre_state决定pres_state<=next_state;根据pres_state
next_state决定相应输出
图3.3循环计数模块流程图
基于以上分析编写模块程序,所得的模块电路符号如图3.4所示:
图3.4循环计数模块符号
3.2.2译码模块
在循环计数模块中我们一般采用的是二进制或BCD码的形式进行输出。
在此次设计中,我们需要的是一个BCD—七段数码管的译码器。
LED数码管的结构如图3.5所示。
图3.5LED数码管
根据数码管的结构,我们就可以进行相应的译码。
BCD七段译码的真值表如表3.2所示。
表3.2BCD七段译码真值表
根据真值表,译码模块的逻辑比较容易实现,只要利用case语句以各个输入状态为条件进行判断选择相应的输出即可。
编写模块程序,所得模块电路符号如图3.6所示。
图3.6BCD七段译码模块符号
3.2.3D触发器模块
在组合电路中,由于输入变量不在同一时间改变,会有设计外的信号产生,形成“毛刺”。
即两个信号的变化有先有后,而不是同时变化,将会导致有一瞬间