通信工程应用技术课程设计FPGA.docx
- 文档编号:9513370
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:32
- 大小:327.52KB
通信工程应用技术课程设计FPGA.docx
《通信工程应用技术课程设计FPGA.docx》由会员分享,可在线阅读,更多相关《通信工程应用技术课程设计FPGA.docx(32页珍藏版)》请在冰豆网上搜索。
通信工程应用技术课程设计FPGA
摘要
本设计在对闹钟系统的原理及其功能进行分析的基础上,采用自顶向下的设计方法,以现场可编程门阵列(FPGA)作为硬件基础,对闹钟系统进行电路设计。
本文的研究目的也是利用EDA技术来实现带闹钟功能的24小时计时器。
分别介绍发展历史、发展动态、设计思路、系统原理、系统功能分析、系统结构、各个模块分析与设计以及主要工作过程,并且经实际电路测试与仿真从而实现了一种基于FPGA的精确可靠的数字闹钟系统。
关键字:
VHDL,QuartusII,FPGA,闹钟
Abstract
Thedesignisbasedontheanalysisofthealarmsystemanditsfunctions,usingtop-downdesignapproachtofieldprogrammablegatearray(FPGA)asahardwarefoundation,onthealarmsystemcircuitdesign.PurposeofthispapermakesuseofEDAtechniquestoachievethealarmclockfunctionwiththe24-hourtimer.Thepaperintroducestheresearchbackground,thedevelopmenthistory,thedevelopmenttendency,theresearchmentality,thesystemprinciplethesystemfunctionanalysis,thesystemstructure,eachmoduleanalysisprinciple,thesystemfunctionanalysis,thesystemstructure,eachmoduleanalysisandthedesignaswellastheprimetaskprocessseparately.AndbytheactualcircuittestingandsimulationinordertoachieveanaccurateandreliablebasedonthenumberofFPGAalarmsystem.
Keywords:
VHDL,QuartusII,FPGA,alarmclock
1绪言
1.1课题的研究背景及意义
当今社会是数字化的社会,是数字集成电路广泛应用的社会。
数字集成电路本身在不断地进行更新换代。
它由早期的电子管、晶体管、小中规模集成电路,发展到超大规模集成电路(VLSIC,几万门以上)以及许多具有特定功能的专用集成电路。
但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。
系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
在许多仪器仪表中都用到闹钟定时,目前通常是采用专用的数字闹钟芯片,但是这种芯片功能固定,不利于嵌入式应用。
而且,在仪器仪表的许多应用场合已经采用了FPGA可编程芯片。
这样一来,为我们在使用硬件空间的FPGA器件中在嵌入一个计时闹钟提供了极大的方便,而且不会增加成本,并可以使系统结构更加简单,体积更小,成本更低,具有更好的嵌入式和可移植特性。
1.2闹钟系统发展概述
六十年代末,七十年代初带闹钟的电子钟表已悄悄在起步,因为客观存在成本低,精度高,显示直观方便(不用上发条)的优点冲击了传统机械表的统治地位。
到底90年代初基本垄断了钟表市场。
而随着时代的发展,在生产生活中对计时工具的要求也逐渐增高,高效节能理念的深入人心,功耗大开发周期长的传统电子表已经显然不适合时代的要求。
20世纪末数字电子技术得到飞速发展,数字电子技术的应用已经渗透到人类生活的各个方面。
从计算机到手机,从数字电视到数字电话,从家用电器到军用设备,从自动化到航天技术都广泛的采用了数字电子技术。
现代电子设计技术的核心是EDA技术。
EDA技术就是领先功能强大的电子计算机,在EDA工具软件平台上,对硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动的逻辑编译、化简、分割、综合、优化和仿真直到下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC芯片中,实现既定的电子电路设计功能。
EDA技术使得电子闹钟设计工作仅限于利用硬件描述语言和EDA软件平台完成对系统硬件功能的实现,极大地提高设计效率,缩短了设计周期,节省设计成本。
本设计就是运用EDA技术,根据闹钟要实现的功能:
计时功能、闹钟功能、设置新的计时器时间、设置新的闹钟时间、显示所设置的闹钟。
采用高层硬件描述语言VHDL进行设计。
首先程序文本输入,处理(编译、检查、逻辑优化与综合。
适配、分割、布局、布线、生成编程数据文件),然后进行功能仿真和时序仿真,最后下载到FPGA器件中并进行功能测试,进行输入操作、查处输入结果验证设计电路。
2FPGA简介
2.1FPGA简述
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
2.2FPGA工作原理
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。
现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。
FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。
FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
2.3FPGA的基本结构
FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。
FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。
这3种可编程电路是:
可编程逻辑模块(CLB--ConfigurableLogicBlock)、输入/输出模块(IOB--I/OBlock)和互连资源(IR—InterconnectResource)。
可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。
1.CLB是FPGA的主要组成部分。
图2是CLB基本结构框图,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。
CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G’、F’和H’。
G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。
这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。
逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G’和F’,而另一个输入信号是来自信号变换电路的输出H1。
这个函数发生器能实现3输入变量的各种组合函数。
这3个函数发生器结合起来,可实现多达9变量的逻辑函数。
图1CLB基本结构
CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。
这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。
CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。
F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出。
另一方面,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制。
2.输入/输出模块IOB。
IOB提供了器件引脚和内部逻辑阵列之间的连接。
它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。
每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。
当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。
缓冲器的输出分成两路:
一路可以直接送到MUX,另一路经延时几纳秒(或者不延时)送到输入通路D触发器,再送到数据选择器。
通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。
当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:
一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。
IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通Vcc、地线或者不接通,用以改善输出波形和负载能力。
3.可编程互连资源IR。
可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。
IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。
2.4FPGA系统设计流程
一般说来,一个比较大的完整的项目应该采用层次化的描述方法:
分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOPDOWN(自顶向下)的设计方法。
目前这种高层次的设计方法已被广泛采用。
高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,工艺转换变得轻而易举。
CPLD/FPGA系统的工作流程如图2所示。
图2FPGA设计流程
3主要模块设计
3.1分频模块
分频的关键在于设置不同进位规则的计数器。
模块开始定义了count1、count2、count3、count4位宽不同的寄存器,分别用于四种输出信号的计数。
以1s信号输出为例,在always引导的过程语句中设置了negedgeclk条件,即当时钟下降沿到来时执行always块中的语句,即count1计数器加1,然后通过if语句判断count1是否到达24’d1*******,即是否达到0.5s。
若达到则清零计数器并将sec_1取反。
通过上述过程便实现了将24Mz信号分频成1Hz秒信号的目的。
另外三种信号的产生机制与秒信号一样,只是改变了计数器的范围。
3.1.1分频模块源代码
分频模块源代码如下:
modulefenpin(clk,rst_n,en_1s,en_1ms);//产生1s,1ms的分频
inputclk;//FPGA晶振50Mhz
inputrst_n;
outputen_1s;
outputen_1ms;
reg[31:
0]jishu_1s;
reg[15:
0]jishu_1ms;
parametercnt_1s=49999999;
parametercnt_1ms=49999;
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
jishu_1s<=32'b0;
elseif(jishu_1s jishu_1s<=jishu_1s+1'b1; else jishu_1s<=32'b0; end always@(posedgeclkornegedgerst_n) begin if(! rst_n) jishu_1ms<=16'b0; elseif(jishu_1ms jishu_1ms<=jishu_1ms+1'b1; else jishu_1ms<=16'b0; end assignen_1s=(jishu_1s==cnt_1s)? 1'b1: 1'b0;//1s assignen_1ms=(jishu_1ms==cnt_1ms)? 1'b1: 1'b0;//1ms endmodule 3.1.2分频模块仿真 分频模块的RTL视图如图4所示,可以看出输出端en_1ms与en_1s与输入端clk和rst_n的逻辑关系。 图4分频模块的RTL视图 1ms时钟信号的输出,如图5所示,相邻脉冲之间相隔1ms。 图51ms时钟信号的仿真 1s时钟信号的输出,如图6所示,相邻脉冲之间相隔1s。 图61s时钟信号的仿真 3.2按键模块 本设计的按键模块主要作用是校时作用,可以调整时间与闹钟时间,同时作为时间模式与闹钟模式的切换。 本模块用于当有按键按下时,采用软件消抖的办法去除按键抖动。 模块的实现方法是先判断是否有按键按下,如有按键按下则延时一段时间,待抖动过去之后再读行线状态,如果仍有低电平行线,则确定有按键按下,然后产生一个有按键按下的信号。 该模块有一个时钟输入端口,输入时钟信号是分频出来的50MHZ的时钟;有一个输入端口与行线相连,用于输入行线状态;一个输出端口,用于输出有按键按下的信号。 3.2.1按键模块源代码 按键模块的部分源代码如下(以一个按键为例): module//按键控制部分 anjian(clk,rst_n,key1,key2,key1_low,key2_low,key3,key3_low); inputclk; inputrst_n; inputkey1;//分加 inputkey2;//分减 inputkey3;//界面选择 outputkey1_low;//按键按下消抖后的标志位 outputkey2_low; outputkey3_low; regreg0_key;//key1消抖 regreg1_key; regreg2_key;//key2消抖 regreg3_key; regreg4_key;//key3消抖 regreg5_key; always@(posedgeclkornegedgerst_n) begin if(! rst_n) begin reg0_key<=1'b1; reg1_key<=1'b1; end else begin reg0_key<=key1; reg1_key<=reg0_key;//根据非阻塞赋值的原理,reg1_key存储的值是reg0_key上一个时钟的值 end end //脉冲边沿检测法,当寄存器key1由1变为0时,key1_an的值变为高,维持一个时钟周期 wirekey1_an; assignkey1_an=reg1_key&(~reg0_key); always@(posedgeclkornegedgerst_n) begin if(! rst_n) begin reg2_key<=1'b1; reg3_key<=1'b1; end else begin reg2_key<=key2; reg3_key<=reg2_key; end end reg[19: 0]cnt_key1;//计数寄存器 always@(posedgeclkornegedgerst_n) begin if(! rst_n) cnt_key1<=20'd0;//异步复位 elseif(key1_an) cnt_key1<=20'd0;//led1_an=1,按键确认按下,cnt_key1从0开始计数 else cnt_key1<=cnt_key1+1'b1; end //以下为消抖程序 regreg_low; regreg1_low; always@(posedgeclkornegedgerst_n) begin if(! rst_n) begin reg_low<=1'b1; end elseif(cnt_key1==20'hfffff)//时钟50mhz的话大约计时是20ms begin reg_low<=key1; //led_an=1,按键确认按下,cnt_key从0开始计数,这时候还有消抖动,计数20ms后抖动滤除了此时再锁存一下key1的值 end//这时key1的值就稳定了 end always@(posedgeclkornegedgerst_n) begin if(! rst_n) reg1_low<=1'b1; else reg1_low<=reg_low; end assignkey1_low=reg1_low&(~reg_low);//当寄存器reg_low由1变为0时,key_low的值变为高,维持一个时钟周期 //以一个按键为例,省略其余两个按键 endmodule 3.2.2按键模块仿真 按键模块的RTL视图如图7所示,可以看出输出端Key1_low、Key2_low、Key3_low与输入端Key1和Key2、Key3、clk、rst_n的逻辑关系。 图7按键模块的RTL视图 3.3时间模块 时间模块的作用是: 利用分频模块产生的精确的秒时钟信号,给时钟秒位计时,设置好时分秒的进位;利用按键模块的控制,给时钟校时,给闹钟设置时间。 3.3.1时间模块源代码 按键模块的部分源代码如下: //时、分、秒 moduleshijian(clk,rst_n,en_1s,key1_low,key2_low,key3_low,shi,fen,miao,nao_shi,nao_fen,nao_miao,moshi); inputclk; inputrst_n; inputen_1s; inputkey1_low; inputkey2_low; inputkey3_low; output[5: 0]shi; output[5: 0]fen; output[5: 0]miao; output[5: 0]nao_shi; output[5: 0]nao_fen; output[5: 0]nao_miao; outputreg[1: 0]moshi;//0时显示时间1时显示闹钟 reg[5: 0]shi; reg[5: 0]fen; reg[5: 0]miao; reg[5: 0]nao_shi; reg[5: 0]nao_fen; reg[5: 0]nao_miao; always@(posedgeclkornegedgerst_n)//key3按键选择模式 begin if(! rst_n) beginmoshi<=1'b0; end elseif(key3_low) begin moshi<=moshi+1'b1; end end always@(posedgeclkornegedgerst_n) begin if(! rst_n) begin shi<=6'b000001;//1 fen<=6'b011000;//24 miao<=6'b0;//0 nao_shi<=6'b000001;//1 nao_fen<=6'b011110;//30 nao_miao<=6'b010100;//20 end elseif(en_1s) begin miao=miao+1'b1; if(miao==60) begin miao=0; fen=fen+1'b1; if(fen==60) begin fen=0; shi=shi+1'b1; if(shi==24) shi=0; end end end elseif(! moshi&&key1_low)//时间模式下按加键 begin fen=fen+1'b1; if(fen==60) begin fen=0; shi=shi+1'b1; if(shi==24) shi=0; end end elseif(! moshi&&key2_low)//时间模式下按减键 begin fen=fen-1'b1; if(fen==0) begin shi=shi-1'b1; fen=59; end end elseif(moshi&&key1_low)//时间模式下按加键 begin nao_fen=nao_fen+1'b1; if(nao_fen==60) begin nao_fen=0; nao_shi=nao_shi+1'b1; if(shi==24) shi=0; end end elseif(moshi&&key2_low)//闹钟模式下按减键 begin nao_fen=nao_fen-1'b1; if(nao_fen==0) begin nao_shi=nao_shi-1'b1; nao_fen=59; end end else begin shi<=shi; fen<=fen; miao<=miao; nao_shi<=nao_shi; nao_fen<=nao_fen; nao_miao<=nao_miao; end end endmodule 3.3.2时间模块仿真
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信工程 应用技术 课程设计 FPGA
![提示](https://static.bdocx.com/images/bang_tan.gif)