您好,欢迎访问三七文档
FPGA结课论文学院:信息工程学院专业:电子信息工程班级:10级2班姓名:王君学号:10671182411前言随着电子技术的发展,人们的生活水平和质量不断提高,生活设备的智能化程度也越来越高,这些都离不开电子产品的进步。现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要因素是生产制造技术和电子设计技术的发展。前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管。后者的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作:IC设计,电子电路设计,PCB设计。本次设计是基于FPGA/CPLD数控脉冲宽度调制信号发生器实现,该系统主要模块有:时钟产生电路模块、JTAG编程连接模块、电源电路模块,通过连线将各个模块进行连接成最小系统,系统精简,实现方便且功能强大,比起传统的信号发生器有着比较明显的优势。本设计立足系统可靠性及稳定性等高技术要求,采用FPGA芯片实现数控脉冲宽度调制信号发生器的FPGA/CPLD设计,其电路设计比较简单,外围电路少,易于控制和检查,较传统的分离元件实现方式有着明显的优势,尤其是其设计电路实现周期,其抗干扰及调试过程都很简单。FPGA介绍FPGA(Field-ProgrammableGateArray)可以达到比PLD更高的集成度,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展起来的,具有更复杂的布线结构和逻辑实现。PLD器件和FPGA的主要区别在于PLD是通过修改具有固定内连电路得逻辑功能来进行编程,而FPGA是通过修改一根或多根分割宏单元的基本功能块的内连线的布线来进行编程。它一般由可嵌入式阵列块(EAB)、逻辑阵列块(LAB)、快速互联通道(FastTrack)、IO单元(IOE)组成。AlteraCycloneII采用全铜层、低K值、1.2伏SRAM工艺设计,裸片尺寸被尽可能最小的优化。采用300毫米晶圆,以TSMC成功的90nm工艺技术为基础,CycloneII器件提供了4,608到68,416个逻辑单元(LE),并具有一整套最佳的功能,包括嵌入式18比特x18比特乘法器、专用外部存储器接口电路、4kbit嵌入式存储器块、锁相环(PLL)和高速差分I/O能力。CycloneII器件2扩展了FPGA在成本敏感性、大批量应用领域的影响力,延续了第一代Cyclone器件系列的成功。由于FPGA是基于查找表(LUT)结构的器件,且每个LAB由10个LE组成,一个LE由LUT和寄存器组成,适合于时序逻辑电路的设计。1设计内容设计一个能够均匀输出给定占空比的脉冲宽调制信号,通过两个可加载8位计数器lcnt8.v实现本设计。若初始时D触发器输出为高电平时,U1不能加载A,若已复位只能完成0到255的加计数,在计到255时产生输出cao1,经反相后异步清除d触发器,经反相后,ld1变高,使u1完成加载A,但只能保持加载状态,直到u2计数完成,产生cao2使d触发器输出高电平,ld1变低,u1开始从A的加计数,计到255后,产生输出cao1,经反相后异步清除d触发器,如此循环。D触发器输出高电平使u2加载,但持续的高电平维持加载使u2计数状态维持在B,只有当d触发器清除后,u2开始从B的加计数,计到255后产生输出cao2,使D触发器输出为高电平,如此循环。此设计选用的是8位的计数器进行加计数功能,从0加到255。计数器是数字系统中用的较多的基本逻辑器件,它的基本功能是统计时钟脉冲的个数,即实现计数操作,它也可用与分频、定时、产生节拍脉冲和脉冲序列等。例如,计算机中的时序发生器、分频器、指令计数器等都要使用计数器。计数器的种类很多。按构成计数器中的各触发器是否使用一个时钟脉冲源来分,可分为同步计数器和异步计数器;按进位体制的不同,可分为二进制计数器、十进制计数器和任意进制计数器;按计数过程中数字增减趋势的不同,可分为加法计数器、减法计数器和可逆计数器;还有可预制数和可编计数器等等。程序:A、代码顶层:模块pwm_gn.v//PWMgeneratormoduled(clk,rst_n,a,b,pwmout,ld1,ld2,cao1,cao2,pwmint);//pwm_gninputclk;//systemclockinputrst_n;//resetinput[7:0]a;//pulsewidthcontrolinputinput[7:0]b;//pulsewidthcontrolinput3inoutregld1;inoutregld2;outputpwmout;outputcao1,cao2;//onlyforobservation,canberemovedwirecao1;wirecao2;regpwmout;inoutpwmint;regpwmint;//intantiatetwoloadable0~255counterlcnt_8u1_lcnt8(.clk(clk),.rst_n(rst_n),.ld(ld1),.d(a),.cao(cao1));lcnt_8u2_lcnt8(.clk(clk),.rst_n(rst_n),.ld(ld2),.d(b),.cao(cao2));//twoloadablecountercontrolandreloadingcontrolalways@(posedgecao2orposedgecao1)beginif(cao1==1'b1)beginpwmint=1'b0;endelseif(cao2==1)beginpwmint=1'b1;endld1=!pwmint;ld2=pwmint;pwmout=pwmint;end4endmoduleB、8位可加载计数器:lcnt8//8bitloadbleincrementcountermodulelcnt8(clk,rst_n,ld,d,cao);inputclk;inputld;input[7:0]d;inputrst_n;outputcao;reg[7:0]count;regcao;always@(posedgeclk)beginif(!rst_n)begincount=8'b00000000;endelseif(ld)begincount=d;endelsebegincount=count+1'b1;endendalways@(posedgeclk)beginif(count==254)begincao=1'b1;endelsebegincao=1'b0;endendendmodulec语言程序:#includereg52.h5#defineucharunsignedchar#defineuintunsignedintsbitKEY1=P3^4;sbitKEY2=P3^5;sbitKEY3=P3^6;sbitIN1=P1^0;sbitIN2=P1^1;sbitENA=P1^2;sfrldata=0x80;sbitdula=P2^6;sbitwela=P2^7;//sbitlcden=P3^4;//uchartimer,ms,t_set=1;ucharT_N=100;ucharT_N1=100;ucharT_H_N=50;ucharT_H_N1=50;voidmsplay(uchar,uchar);ucharcodex1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ucharcodex2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodex3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//ucharcodex4[]={0x01,0x02,0x04,0x08,0x10,0x20};voiddelay(uintz)//延时函数{uintx;for(x=z;x0;x--);}voidKey_Scan(){if(KEY1==0){delay(20);while(!KEY1);T_H_N++;if(T_H_N=99){T_H_N=99;}}if(KEY2==0)6{delay(20);while(!KEY2);T_H_N--;if(T_H_N=1){T_H_N=1;}}if(KEY3==0){delay(15);while(!KEY3);IN1=~IN1;IN2=~IN2;}}voidMotor_Init(){ENA=0;IN1=1;IN2=0;}voidTimer0_Init(){TMOD=0X12;TH0=(256-50);TL0=(256-50);//TH1=(65535-T_H)/256;//TL1=(65535-T_H)%256;EA=1;ET0=1;TR0=1;}voidmain(){uchark3,k2,k1,k0;Timer0_Init();Motor_Init();while(1){k2=T_H_N/10;k3=T_H_N%10;k1=0;k0=0;7msplay(k0,2);msplay(k1,3);msplay(k2,4);msplay(k3,5);Key_Scan();}}voidtimer0()interrupt1{TR0=0;//TH0=(65536-50)/256;//TL0=(65536-50)%256;T_H_N1--;if(0==T_H_N1){ENA=0;T_H_N1=1;}T_N1--;if(T_N1==0){ENA=1;T_N1=100;T_H_N1=T_H_N;}TR0=1;}voidmsplay(uchary1,uchary2){ldata=x1[y1];dula=1;dula=0;delay(1);ldata=x3[y2];wela=1;wela=0;delay(1);ldata=0x00;dula=1;dula=0;delay(1);ldata=0x0ff;wela=1;8wela=0;delay(1);}2仿真结果A=12,B=12的输出波形A=136,B=128的输出波形3总结本设计采用EDA技术,通过FPGA芯片实现了数控脉冲宽度调制信号发生器的设计,本文采用Verilog硬件描述语言来说明电路,完成对电路的功能仿真。通过D触发器及两个可加载8位计数器lcnt8.v实现本设计。与传统的设计方式相比,本设计由于采用了FPGA芯片来实现,它将大量的电路功能集成到一个芯片中,并且可以由用户自行设计逻辑功能,提高了系统的集成度和可靠性。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控9制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。在本次设计中,我们完成本系统设计的要求及功能。在设计开始前我们对各个模块进行了详细的分析和设计准备工作,设计过程中,我们相互协调,积极参与完成各个技术实现的难点。通过本次设计,我们在对EDA这门技术上有了更深刻的认识,也从实践的例子中去感受到了EDA设计给我们设计带来的改变与进步。我们不仅掌握软件的使用,与此同时,我们还对电子设计的思路有了更多的认识。通过对EDA设计中的TOP-DOWN设计方式的运用,体会到了对于一个大型系
本文标题:FPGA结课论文
链接地址:https://www.777doc.com/doc-6399215 .html