您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 基于FPGA的函数信号发生器的设计报告
基于FPGA的函数信号发生器的设计报告课题要求1、技术要求(EDA技术,VHDL语言,层次化设计)(1)EDA发展概况电子设计技术的核心就是EDA技术,EDA是指以计算机为工作台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段。中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员开发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平还很有限,需迎头赶上(2)VHDL语言简介VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用VHDL来完成。VHDL还具有以下优点:(1)VHDL的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。VHDL可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。(3)VHDL的层次设计从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求。第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。第三层次是逻辑综合。即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输数字电路课程设计报告1出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。应用逻辑综合工具产生的门网络表,将其转换成PLD的编程码,即可利用PLD实现硬件电路的设计。由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。2、功能要求(1)可以显示正弦波、方波、三角波。(2)可以调幅。(3)可以调频。3、本人的工作我主要负责软件的设计,不过一些子程序我是参考资料的,并不是都是我自己设计的。二、设计方案1、以下为软件内部结构简图:用256进制计数器将50MHz的晶振进行分频通过8选1数据选择器进行频率选择从而实现频率调节。通过波形产生模块产生各个波形,再通过8选1数据选择器选择输出的波形。2、函数信号发生器的整个结构框图及工作原理8选1数据选择器递增锯齿波正弦波方波三角波递减锯齿波阶梯波8选1数据选择器256进制计数器数字电路课程设计报告2通过选择信号,选择要输出的波形输出,再经过D/A转换器将数字信号转换成模拟信号,再用运算放大器将电流信号转换成电压信号输出。三、单元电路设计仿真结果与分析1、内部框图2、频率选择模块256进制计数器(1)程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycout256is时钟信号频率选择D/A转换输出信号选择信号数字电路课程设计报告3port(clk:instd_logic;q7,q6,q5,q4,q3,q2,q1,q0:outstd_logic);endcout256;architectureoneofcout256issignalqi:std_logic_vector(7downto0);beginprocess(clk)beginifclk'eventandclk='1'thenif(qi=255)thenqi=00000000;elseqi=qi+1;endif;endif;endprocess;q7=qi(7);q6=qi(6);q5=qi(5);q4=qi(4);q3=qi(3);q2=qi(2);q1=qi(1);q0=qi(0);endone;(2)波形(3)分析若reset为‘1’,表示复位有效,对波形复位,否则判断脉冲信号输入是否为上升沿。如果为上升沿脉冲,进行加计数,实现256进制计数。频率选择(1)程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymux81isport(sel:instd_logic_vector(2downto0);d0,d1,d2,d3,d4,d5,d6,d7:instd_logic;q:outstd_logic);数字电路课程设计报告4endmux81;architecturetwoofmux81isbeginq=d0whensel=000elsed1whensel=001elsed2whensel=010elsed3whensel=011elsed4whensel=100elsed5whensel=101elsed6whensel=110elsed7whensel=111elsenull;endtwo;(2)波形(3)分析若reset为‘1’,表示复位有效,对波形复位,否则判断脉冲信号输入是否为上升沿。如果为上升沿脉冲,当sel=“000”时,输出q=d0;当sel=“001”时,输出q=d1;当sel=“010”时,输出q=d2;当sel=“011”时,输出q=d3;当sel=“100”时,输出q=d4;当sel=“101”时,输出q=d5;当sel=“110”时,输出q=d6;当sel=“111”时,输出q=d7;数字电路课程设计报告53、递增锯齿波模块(1)程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityjuchizengisport(clk:instd_logic;reset:instd_logic;dout:outstd_logic_vector(7downto0));endjuchizeng;architecturethreeofjuchizengissignalq:std_logic_vector(7downto0);beginprocess(clk,reset,q)beginifreset='1'thenq=00000000;elseifclk='1'andclk'eventthenifq255thenq=q+1;elseq=00000000;endif;endif;endif;endprocess;dout=q;endthree;(2)波形(3)分析若reset为‘1’,表示复位有效,对波形复位,否则判断脉冲信号输入是否为上升沿。如果为上升沿脉冲,将进行计数。在进行计数时,先判断当前计数值是否为“11111111”;若是则将计数值清零,否则进行加1计数。当计数值为255时,清零,再加1计数数字电路课程设计报告64、正弦波模块(1)程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitysineisport(clk:instd_logic;reset:instd_logic;dout:outstd_logic_vector(7downto0));endsine;architecturefourofsineissignalcnt_val:integer;beginu1:process(clk,reset)variablecnt:integerrange0to63;beginifreset='1'thencnt:=0;elsifclk'eventandclk='1'thenifcnt=63thencnt:=0;elsecnt:=cnt+1;endif;endif;cnt_val=cnt;endprocessu1;u2:process(cnt_val)begincasecnt_valiswhen0=dout=11111111;when1=dout=11111110;when2=dout=11111100;when3=dout=11111001;when4=dout=11110101;when5=dout=11101111;when6=dout=11101001;when7=dout=11100001;when8=dout=11011001;when9=dout=11001111;数字电路课程设计报告7when10=dout=11000101;when11=dout=10111010;when12=dout=10101110;when13=dout=10100010;when14=dout=10010110;when15=dout=10001001;when16=dout=01111100;when17=dout=01110000;when18=dout=01100011;when19=dout=01010111;when20=dout=01001011;when21=dout=01000000;when22=dout=00110101;when23=dout=00101011;when24=dout=00100010;when25=dout=00011010;when26=dout=00010011;when27=dout=00001101;when28=dout=00001000;when29=dout=00000100;w
本文标题:基于FPGA的函数信号发生器的设计报告
链接地址:https://www.777doc.com/doc-5666231 .html