ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:607.35KB ,
资源ID:1407814      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1407814.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大规模集成电路设计报告.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

大规模集成电路设计报告.docx

1、大规模集成电路设计报告大规模专用集成电路实验报告 基于FPGA芯片的函数发生器基于FPGA芯片的函数发生器冯宏 刘明均 楼韬 徐德森1系统总体设计方案及实现方法1.1 任意波形发生器基本功能和技术指标1.1.1 基本功能本论文设计的任意波形发生器所要实现的基本功能:(1)输出波形的种类:正弦波、方波、三角波、锯齿波、脉冲波、手绘任意波形、任意公式波形。(2)输出波形每一通道的频率、幅值、偏置都可以由用户调节,并且可以设置多个通道信号之间的相位差。(3)编辑波形的方式有:设置参数、输入公式、手工绘制通信波特率的全部功能在PC机上实现。此外根据研制开发具有产生任意周期信号的智能型信号发生器的协议规

2、定,我们研制该仪器应具有的功能有图形显示和RS232接口功能,键盘式输入功能,菜单式选择周期波形种类等功能。除了通过上位机软件来设置波形参数外,还可以通按键来本地设置波形参数。LCD字符型液晶显示器,用来显示一些参数和运行状态。1.1.2 技术指标(1)最大输出频率:25MHz。(2)频率分辨率: 0.1Hz(3)存储深度:4K/通道(4)输出幅度:Vpp为12V(5)幅值分辨率:16位(6)接口:UART接口和USB接口1.2 系统总的设计方案和实现原理整个系统由两大部分组成:智能函数发生器和PC机软件系统。二者的通信接口采用了UART。波形发生器实现的功能有:对仪器各部分的初始化、接收上位

3、机的波形数据、数据处理,人机交互等。主要的模块有:微处理器、波形存储器、地址发生器、频率合成器、地址选择器、译码电路、低通滤波器、偏置电路、驱动电路等。PC端软件系统实现的功能有:图形化的人机界面,波形数据的编辑、波形的打开和保存、系统控制及通信波特率的控制等。 图1.1系统总体方案图整个系统具体实现方式,首先是在Altera公司Cyclone系列FPGA上构建一个基于Nios的SOPC系统,完成系统控制、DDS信号发生和与PC机通讯等功能;PC端软件由LabVIEW编程实现,完成图形用户界面(GUI)、编辑产生波形数据、频率控制和与片上系统通讯等功能。D/A转换完成将片上系统数字输出转换为模

4、拟输出。滤波电路主要实现运放、滤波和幅度控制的功能;外接键盘实现对系统参数的设置和控制,LCD液晶模块用来指示系统运行状态。系统的核心是SOPC片上系统,具体结构图如图1.2所示:图1.2 函数发生器固件原理图如图所示,实线框中的部分是在FPGA中构建的SOPC片上系统。实线框外表示的是外部设备。1.2.1 外部设备外部设备包括外部扩展存储器,按键,RS232接口,LCD,外部时钟和D/A转换器件等。外部存储器包括4M的串行配置芯片,用来存储硬件配置文件。4Mbytes的FLASH,作为程序存储器。8Mbytes的SDRAM作为数据存储器。LCD为1602的字符型液晶显示器,用来显示系统参数和

5、运行状态。除了通过上位机软件来设置波形参数外,还可以通按键来本地设置波形参数。外部时钟由50MHZ的有源晶振来提供。1.2.2 片上系统片上系统由FPGA内部生成,是一个基于Nios的SOPC系统,包括Nios模块、DDS模块、PLL等模块。(1)处理器模块处理器模块通过在SOPC Builder中调用IP库组件实现,主要由NiosCPU、UART接口、SDRAM控制器、FLASH控制器和PIO接口等组成。处理器模块对DDS模块的控制和对片上RAM模块的读写都通过PIO接口实现。(2)DDS模块DDS模块是整个系统工作的核心,信号的产生和调制均由该部分来完成。DDS模块包含相位累加器、幅度调制

6、器、波形存储ROM和D/A控制器等几个部分。该模块通过VHDL语言直接编程,用于完成频率控制字的相位累加和截断输出,从而实现波形数据的输出和频率调制功能。(3)PLL模块PLL模块的作用是消除时钟输入焊盘和器件内部时钟输入引脚间的畸变。并自动地调整时钟延迟单元。保证到达内部触发器的时钟边沿与到达时钟输入端的时钟边沿严格同步,这一闭环系统有效地消除了时钟传输延迟。其次PLL可以有效的滤掉时钟中的毛刺,对外部时钟有很好的提纯作用。另外通常用于调整SDRAM控制器内核与SDRAM芯片之间的时钟相位差。PLL另外一个重要的作用是对外部时钟分频和倍频。2智能函数发生器SOPC片上系统的设计2.1片上系统

7、各部分的实现NiosII系统设计中,适当的将一些组件设计成主端口,可以绕过CPU对从外设直接发起数据传输,这种工作方式类似于DMA,可以很大的减轻CPU的负担并提高系统的效率。DDS组件负责按指定频率和指定模式对波形RAM进行寻址,它实际担当的角色是相位发生器的角色。它与相幅转换电路共同组成一个完整的DDS模块。DDS组件拥有一个主端口和一个从端口。地址选择模块负责波形RAM输入地址线的仲裁工作。当任意波形发生器正在输出波形的时候,它输出由DDS组件传来的相位地址。当任意波形发生器正在往波形RAM内写入波形数据的时候,它输出由RAM控制器传来的地址线。这种设计方法的好处在于使得NiosII可以

8、像写内存一样往RAM中直接写入波形数据。在操控的设置上,一个仪器总是希望拥有一个友好的人机界面,因此在本设计中采用了一个LCD模块。LCD模块通过LCD控制器与总线相连。LCD控制器的作用就是按照规定时序将显示数据传递给LCD进行显示。LCD控制器是一个全数字结构,可以在FPGA中实现。因此在这里选择了自行实现LCD控制器。为了能够减轻NiosII的负担,这里也将LCD控制器设计为一个主外设。显示数据由NiosII先写入在系统内存中开辟的显示缓存中,LCD控制器再负责从这个缓存中读取显示数据。这样,LCD控制器无需驱动就可以正常工作。键盘控制器外接一个4*4的键盘,它可以直接将当前按键转换成相

9、应的键值储存于它内部的寄存器中,然后通过申请中断来通知NiosII读取这个键值系统中。其他组件均是SOPC Builder中自带的标准组件,例如SDRAM控制器、FLASH控制器以及UART接口等。同样也是数字电路的SDRAM和FLASH都选择了片外器件,这是因为FPGA不是专门用来存储的芯片,它内置的RAM资源主要用来实现数字逻辑,容量有限,而用LE(Logic Element,FPGA中的一种资源)资源去实现存储器代价太高。除了存储器外,其他数字器件全都在一片FPGA内设计完成,相比采用单独CPU加上FPGA设计的DDS芯片组合的方案,大大简化了物理硬件的设计与电路连接。(1)NiosII

10、软核及其外部接口的定制该系统所涉及的NiosII硬件系统及其外部接口包括如下模块:NiosII处理器核;外部SDRAM;外部FLASH;EPCS串行配制器件;双口RAM控制器;Avalon三态桥;24位输出PIO(用于频率控制字K的输出);3位输出PIO(滤波通道选择);按键PIO;16*2LCD;系统ID;定时器(Timer);串口UART;所有的外设都添加完毕,整个NiosCPU模块如图2.2所示: 图2.2 NiosCPU模块(2)DDS模块的设计DDS模块采用VHDL语言编写,所以必须将其转换为图形符号,加入设计顶层图中。DDS模块由CLK时钟输入触发而不断进行相位累加,相位累加器值为

11、N,不断累加FSW。FSW值由CPU进行输入。当累加器累加到规定值时,相位累加器清零。在本设计中,为了提高精确度,同时兼顾片上资源,相位累加器最后将高12位,即第17位到第28位截断作为地址,读取RAM中的波形数据。双口的RAM具有读写两个端口,通过两套地址系统,对片上RAM进行读写操作。处理器模块对RAM进行写操作,更新波形数据;DDS模块对RAM进行读操作,读取波形数据,产生幅度量化序列。本设计中的片上RAM地址位为12位,数据位为16位,空间大小为4KB,即存储了4096个16位数据。我们可以根据片上RAM资源的情况,改变RAM地址位和数据位的宽度,从而提高系统设计的精度。DDS模块的输

12、入端为CLK时钟和24位FSW频率控制字,输出端为12位片上RAM寻址线。其中,输入端FSW频率控制字对系统的输出频率进行调制,输出端W位地址线对存储于片上RAM的波形数据进行输出。添加好的DDS模块如图2.3所示。图2.3 DDS模块首先模块由CLK时钟输入触发而不断进行相位累加,相位累加器值为N,不断累加FSW。24位FSW值由NiosCPU进行输入。当累加到规定值时,相位累加器清零。然后将相位累加器高12位,即第17位到第28位截断赋予W,最后输出。在RAM读时序信号的配合下,周期的从波形存储器中读取数据,地址自动加一,周而复始的产生地址信号,并送入高速D/A转换器件,完成波形转换。在D

13、DS波形输出状态下,NiosCPU的工作只是不断查询接收缓冲区有无PC机传来的数据,如果有,就禁止DDS状态,并设置系统状态为波形更新状态,进行新一轮的波形参数更新。 a.相位累加器的设计相位累加器是DDS的核心部分,用于完成频率控制字的相位累加,随频率控制字的改变进而实现调频的功能。该功能容易用编程实现,只要出现一个时钟上升沿,从键盘输入的相位控制字就累加一次。对于相位累加器的位宽,我们可以根据基准时钟fclk来设定。由下面的公式可得出输出信号频率fout与基准时钟fclk之间得关系式如下:fout = K fclk / 2N其中K表示输入的频率控制字(只能取整数),N为相位累加器的宽度。本

14、次设计中所用的基准时钟fclk为系统时钟,使用的是Nios核心板提供的时钟:fclk=50106Hz。而2N无论N取何值都不会与50106相等,所以fclk/2N的结果总会有小数产生。在此提出以下改进方案:如果不把2分成2N份而是分成fclk*30份(即1.5109份),则此时输出频率fout等于输入的频率控制字K/30。1.5109转化成二进制数为1101000000000000000000000000B,共28位二进制数,则取累加器的长度为28位。在累加过程中,如果相位累加器累加值小于1101000000000000000000000000B,则相位累加器继续累加。如果大于11010000

15、00000000000000000000B,则相位累加器减去此值,使得相位累加器循环累加以保证相位连续。此时按照下式计算输出频率为。fout = K fclk / 2N = K / 30由于输入的频率控制字K为整数,所以输出频率为整数。当K=3时,输出频率fout =0.1Hz。这样,我们从PC端软件或者键盘输入的频率值经CPU处理转化为28位二进制数,再输出到DDS累加器的频率控制字的输入端,由公式可知,DDS的输出频率即为我们所设定的频率值。输入的频率为基准时钟,相位累加器就按输入的频率控制字累加,截取相位累加器的高12位作为ROM的读地址,读地址也连续增加。相位累加器是通过硬件来实现的,

16、VHDL代码如下:library IEEE;use IEEE. STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity add isport(clk:in STD_LOGIC;IDATA:in STD_LOGIC_VECTOR(23 downto 0);ODATA:out STD_LOGIC_VECTOR(11 ownto 0);end add;Architecture BHV of add issignal add:STD_LOGIC_VECTOR(27 downto 0);

17、signal bdd:STD_LOGIC_VECTOR(27 downto 0);beginprocess(clk)beginif clkevent AND clk=1 thenadd1101000000000000000000000000 then /加上最大值的补码add=add+0010111111111111111111111111; /加上补码相当于减去这个值end if; /为了保证波形相位的连续end if;end process;process(clk)beginif clkevent AND clk=1 THENODATA=add (27 downto 16);end if;

18、end process;end BHV;b.片上双口RAM的实现该模块通过调用Quartus内嵌的器件函数实现,用来存储一个周期的波形数据。本设计中,模块具有读写两个端口,通过两套地址系统,对片上RAM进行读写操作。Nios模块对RAM进行写操作,更新波形数据;DDS模块对RAM进行读操作,读取波形数据,产生幅度量化序列。片上RAM地址位为12位,数据位为16位,空间大小为4KB,即存储了4096个16位数据。我们可以根据片上RAM资源的情况,改变RAM地址位和数据位的宽度,从而提高系统设计的精度。Quartus内嵌了许多常用器件的函数,用户只需要进行设置即可直接调用,而不需要自己编程,这大大

19、提高了系统开发的效率。c.其他部分的设计1)PLL模块Cyclone II系列器件具备4个增强型锁相环,提供先进的时钟管理能力,如频率合成、可编程相移、外部时钟输入、可编程占空比、锁定检测、输入时钟扩频和支持高速差分输入输出时钟信号。图2.4为Cyclone II 的PLL的原理图:图2.4 PLL原理图 Cyclone II的 PLL提供了时钟合成功能,允许内部工作时钟与输入时钟频率不同。每个PLL能提供最多3个输入时钟,每个输出时钟的频率可互补。PLL提供两个比例因子分别为m,n的除法计数器,这里m,n和后比例计数可以是1到32中的任何整数。但输入时钟频率范围为11311MHz,而输出频率

20、范围是10400MHz。该模块也通过调用Quartus内嵌的器件函数实现。2)按键消抖模块其基本功能为消除按键的抖动,使得一次按键只产生一个有效的输入信号。设计原理为,当按键输入端INDATA为高电平时在一个时钟信号的控制下开始计数,当计数到时即输出高电平,再计数时计数器溢出,产生输出低电平,这样就产生了一个CP,也就是消抖后的CP触发信号。如果按键时间足够长的话会触发两次,就像计算机按键按着不放会一直触发的。按键消抖的VHDL代码描述如下:ENTITY anj ISPORT(clk,indata:IN STD_LOGIC;out data:OUT STD_LOGIC);END anj;ARC

21、HITECTURE BHV OF anj ISSIGNAL cnt: STD_LOGIC _VECTOR(19 DOWNTO 0);SIGNAL out_r: STD_LOGIC;BEGINoutdata=out_r;PROCESSBEGINIF clkEVENT AND clk=1THENIF(indata=1) THEN /一旦出现高电平即复位计数器cnt=00000000000000000000; /清0计数器out_r=11101010011000000000)THEN/CLK=50M,约200usout_r=0; /低电平宽度大于200us时输出低电平ELSE /低电平宽度小于200

22、us时输出高电平cnt=cnt +00000000000000000001; /计数器累加out_r=1;END IF;END IF;END PROCESS;END anj;2.2硬件的编译和配置 SOPC Builder创建了NiosII系统,生成的原理图模块可在顶层文件中直接调用。首先,在工程目录中创建一个Block Diagram/Schematic File顶层文件,然后在原理图编辑窗口添加上一节创建的NiosII系统模块。添加完毕后,可以看到模块的外围有很多连接线,需要添加引脚进行连接。添加引脚及其他基本单元可从QuartusII的Libraries库中添加。需要注意:FLASH及S

23、DRAM等数据线上的引脚应设置为双向三态,引脚命名也必须严格规范,例如SDRAM的数据线宽度为16位,则其引脚可命名为sdram_dq15.0。引脚添加和命名完成后,下一步要锁定具体的FPGA引脚。这样,在后期的编译时,可将用户设计中的信号分配到目标器件的特定引脚上。在引脚分配完成后,可以直接在QuartusII具栏中选择Assignment Editor工具,察看整体引脚分配情况。在编译硬件系统之前,应该对未使用引脚,功能复用引脚,编程文件类型等进行设置。注意:Unused Pins设置很重要,如不进行设置,设计可能无法在NiosII开发板上运行,在本系统中应设置为As input tri-

24、stated。选中Auto restart configuration after error复选框,使对FPGA的配制失败后能自动重新配制。在配制标签中有两种编程方式可供选择:主动串行方式(Active Serial)和被动串行方式(Passive Serial),在此选择Active Serial,配制器件选择为EPCS4。默认情况下,编译器总是生成SRAM目标文件(.sof),QuartusII的编译器将用户设计生成的.sof文件下载到目标板上。3 智能函数发生器软件部分的设计3.1 LabVIEW波形编辑软件的设计3.1.2 波形编辑软件的LabVIEW设计任意波形发生器LabVIEW

25、软件设计在系统基本功能中我们曾提到,本文设计的任意波形发生器波形编辑的方式有设置参数、输入公式、手工绘制等方式。根据上述要求,我们把软件部分规划为三个面板:主面板、公式编辑面板和波形绘制面板。以下分析系统各个软件面板的设计。(1)主面板的设计波形编辑软件的主面板是整个软件部分的核心,如图3.1所示。图3.1主程序前面板主面板是软件部分的核心,主要完成的功能有通道选择、波形预览、波形下载和参数设置。可以发生的标准信号类型有正弦波、三角波、方波和锯齿波四种。主面板的拨码开关拨到右边的时候用来更新波形,拨到左边的时候用来更新频率。由于频率的调节范围很宽,从0.1Hz到25MHz。为了解决调节分辨率的

26、问题,我们采用了分档调节方式,在三个档位中分别调节,分别显示频率,同时显示总的频率。幅值、偏置、频率、相位的输入有三种方式可以选择,分别是旋钮、上下箭头和手工输入。此外,点击串口设置可以用来设定设备的通信波特率,并通过UART口下载编辑好的波形。编辑波形公式和手绘波形是另外两种波形编辑方式,按下这两个按钮时可分别弹出公式编辑子面板和波形绘制子面板。设置完波形后,可以点击保存波形数据,把绘制好的波形以二进制文件的形式保存。当下次调用时点击读入波形数据的按钮就可以打开以前的波形了。其程序图如图3.2所示: 图3.2主程序频率分档调节用到了公式编辑器,其程序并未在框图中画出。其中,起始时间t0控制用

27、到了布尔型Case结构和移位寄存器,并由复位信号来控制。当复位信号为False时,由移位寄存器把输出时间反馈给输入时间,从而实现时间累加,更新t0。当复位信号为True时,起始时间t0固定为0。波形信号参数的产生用到了数字型Case结构,正弦波为0,三角波为1,方波为2,锯齿波为3,根据枚举类型对应的数字,调用相应的波形发生VI子程序,从而产生波形参数。产生波形的相关任务包含在一个While循环内,在这里用到了Continue if true的判断方式,并把布尔型常量False接到了判断端子上。由于VI是在每次循环之后进行条件判断,因此While循环至少循环一次。所以每次只执行一次产生波形的W

28、hile循环就退出,从而继续完成其它任务,如输入数据更新、波形显示等。(2)公式编辑面板程序设计公式编辑面板的前面板如图3.3所示:图3.3 波形公式编辑面板在公式编辑子面板中,我们可以通过在对话框中输入公式,来得到我们想要的波形。为了体现灵活性,在公式中出现的频率参数w和幅值参数a也可以通过旋钮或者手工输入来调节(w=2fs)。当按下确定键时,退出公式编辑子面板,同时用公式编辑好的波形在主面板中显示。和主面板一样,也可以通过设置采样信息和复位信号来观察波形。公式编辑程序框图如图5.4所示。这是其中的一个公式波形发生VI子程序,最外层的While循环并未画出。在这里用到了簇的概念。簇的作用是将

29、混合类型的数据组织在一起,形成一个整体。簇相当于一个容器,是把数据集合成一组的一种数据结构,类似于C语言中的结构。通过调用Cluster子模板中的Bundle函数,把采样信息、公式、幅值、频率打包成一个簇,并通过移位寄存器,把簇的信息不断反馈。如果簇的信息有变化,说明采样信息、公式、幅值、频率之一发生了变化,就调用计算公式VI子程序重新计算波形参数。需要说明的是,w=2fs等变量替换是在计算公式VI子程序中完成的,如果我们编辑的公式中出现了新的变量,就需要在计算公式VI子程序中加入新的变量替换规则。具体的程序结构见图3.4:图3.4 波形函数编辑面板程序(3)波形绘制面板程序设计在波形绘制面板

30、中,可以通过用鼠标在波形绘制面板中手工绘制想要的波形。按住鼠标左键不放,拖动鼠标,此时窗口中就会显示鼠标移动的轨迹;鼠标在窗口中的幅值和采样点值都做到了实时跟踪,并显示在窗口,这样用户可以做到精确绘制。当按下清除键时,窗口中已经绘制好的波形全部被清除。当按下确定键时,退出波形绘制子面板,同时手工绘制好的波形在主面板中显示。波形绘制程序框图如图所示。用到相关技术主要是事件结构(Event Structure)。所谓一个事件,就是在某个时间、某种情况发生的时候给出的一个提示。用户操作界面、外部的I/O和程序的其他部分都可以产生事件。用户界面能利用的事件包括:鼠标的单击、键盘按下、菜单操作、前面板调

31、整等;程序中可以产生的事件有:定时完成、退出某个程序等;外部的I/O事件包括:硬件的计时器、触发信号等。LabVIEW中支持用户界面事件和程序产生事件,不支持外部的I/O事件。波形绘制面板的前面板如图3.5所示: 图3.5 手绘波形面板在本设计中,一共定义了6个用户面板事件:0:鼠标移动;1:鼠标左键按下;2:鼠标松开;3:按下退出键;4:按下清除键;5:按下确定键。另外定义了一个移位寄存器,用来在不同事件中传递鼠标是否按下的信息。鼠标移动事件发生时,如果此时鼠标按下,而且鼠标在绘制窗口范围之内,则调用坐标绘图VI子程序在窗口中绘制波形,否则不绘制波形。鼠标左键按下事件发生时,调用坐标绘图VI子程序绘制波形,同时向移位寄存器传递鼠标按下信息。鼠标松开事件发生时,向移位寄存器传递鼠标松开信息。另外三个事件发生时,都有相应的处理程序。图3.6是手绘波形部分的程序图。图3.6 手绘波形程序3.1.3 通讯部分的设计串行通讯是一种古老但目前仍常用的数据传输方法,它用于计算机与外设,例如一台可编程仪器,或者与另外一台计算机之间的通讯。串行通讯中发送方通过一条通讯线,一次一

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2