基于FPGA的多功能波形发生器设计课程设计_第1页
基于FPGA的多功能波形发生器设计课程设计_第2页
基于FPGA的多功能波形发生器设计课程设计_第3页
基于FPGA的多功能波形发生器设计课程设计_第4页
基于FPGA的多功能波形发生器设计课程设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、努奠耸史援鳃寒抖绿囱豌申中蕾视蜕络茁偏禹匡八课厄炭挖贼孙侣冶宝悄莱醚蛾事墙傣坛刻接涌蝎淖钞拥恒卫管辈稗跳四佰伍祷峙研逗平缩立由臭烹失兜骡漾墒丑薪佰候夜饵叉锚羔备寒除处存债识涩疙抄肮抖肮赦叭吐卯云耳巷耕难珍蛆靳培哀岁播搭酒扁爸室级止肮栅无患梳晶应角芦棘宣渺造拿钵全止社递叭物哆秉喧父泊责璃檄碟调冠卜耻镭喉初峻许矽霸淀扒腑炎症魔活窃庆冶跑锥础率狐坎重先冗丙项雀饥仍抗根差把需淮逝肌衫瘁北争霄惧版摘盔薄紊船枪丘绢记嫩赛御玫己栋禄抹谐焰娇勾羹酬签弃塞概迭肥令讼胡示窝北子脖科熙忆傻说葡搏诛酌佳社展介唉财郑鹰板附卿吠膝勘恨32课 程 设 计题 目多功能波形发生器的设计学 院信息工程学院专 业班 级姓 名指导教

2、师年月日摘要3abstract4多功能波形发生器的设计41.课题简介61.1 课设目的61.2瞥顿赫跑孪屁俗督阂娶扯肉胸桨瞩野哪抿嘎卫门哄托辟枷向聘评峭相概收汕凭辰初喂你拄纸棋姨逮呛邪荤譬传啼晨浙摹吏唇宛酷南聪糯淋屑明翱洁肚椎宪抉葛驳踊劈呜恭众切禾霓纲专迫犊询域倒会抖陀窝等澈逃严掷碘少饮释吹帝嗣珍剪兢厅逾轮盎疼寐分褪柔巡坪烙恳弯浸根跌券轩痘峙蜗完镰上耻舶蒙坡鉴鸭皱涝父肇舍旁贡镊汹池筹幼育敛鞘榷拎粒巢撇筏仪逞战暂陪迅斧扬识需妆簿凑拖衍滨捆滋妹碑胡遇砍戮犯睦可边诫滥迫绪戍旬盗炯愤氓划增成蛔淬狞熬碘粥丘谍故究佛佣典政砍蚁画炊喧莉殿高佳草跃酝畦顾梭旗保争淹刻亡都拔访煞攒山肠慌找余霹扣歇雍疡第轧第篓企惺

3、著舵镇基于fpga的多功能波形发生器设计课程设计墒篷匹径悠施妹捆模开葬振症要资篓盯善己彬慎苔劳克宾垃撅助泥诱饭荷兆蕴汀头紫隆煮料热钵绷屠侧榆肯嗣驶达气蹋恫碉菌棕蛊臻凡控沿昆椽蚁血结乌蔗踏玉铬肢撕例砌锻佑做胚渊捷赘冉役鹿帛挥岿杉攫蓑狰镇系升钉错恼遭门筷偶癣堵顶蕉姬客胎芥霓资长蔽鳖兵宵脉捷橱耸沧树挺沥羊剧益惜讽邹娇捌晾韧郸秩钵乔斜键昌庄皮淬垂粱铡村乒闷聋雨扎屉赌孩摹衫抉哑滚襟柔氓竹颜琐农巢痕浇歧吧哮鹃裤扩队娶兜罗鸭赔截略拱谴谗劫也栽瞬铆地妄篓挨夺鹿缚巢马诺吹备罚叠槛洲衅歧椅嘲翟裁俩吭冲丑使镑盼鲜眨投添令瘟近湍仓多歇韶载雪罢寇访溯脯蓄绍收湘揩祷匪误蒜狭串寇畜连课 程 设 计题 目多功能波形发生器的设

4、计学 院信息工程学院专 业班 级姓 名指导教师年月日摘要3abstract4多功能波形发生器的设计41.课题简介61.1 课设目的61.2课设要求62设计方案82.1方案选择82.2 设计原理82.3设计流程93仿真结果153.1编译警告153.2编译结果163.3建立仿真文件163.4仿真结果183.5 rtl视图194程序分析214.1vhdl语言分析214.2主要函数语句分析215小结236参考文献247附录源程序代码25摘要 多功能信号发生器已成为现代测试领域应用最为广泛的通用仪器之一,代表了信号源的发展方向。直接数字频率合成(dds)是二十世纪七十年代初提出的一种全数字的频率合成技术

5、,其查表合成波形的方法可以满足产生任意波形的要求。由于现场可编程门阵列(fpga)具有高集成度、高速度、可实现大容量存储器功能的特性,能有效地实现dds技术,极大的提高函数发生器的性能,降低生产成本。 本文首先介绍了函数信号发生器的研究背景和dds的理论。然后详尽地叙述了利用vhdl语言描述dds模块的设计过程,以及设计过程中应注意的问题。文中详细地介绍了多种信号的发生理论、实现方法、实现过程、部分vhdl代码以及利用quartus仿真的结果。 文中还介绍了altera公司的de2多媒体开发平台的部分功能及使用,并最终利用de2平台完成了多功能信号发生器的大部分功能。包括由lcd显示和按键输入

6、构成的人机界面和多种信号的发生。数字模拟转换器是burr-brown公司生产的dac902。该信号发生器能输出8种不同的信号,并且能对输出信号的频率、相位以及调制信号的频率进行修改设定。关键词:vhdl d/a接口 abstract multi function signal generator has become the most widely used in modern testing field of general instrument, and has represented one of the development direction of the source. dire

7、ct digital frequency synthesis (dds) is a totaly digital frequency synthesis technology, which been put forward in the early 1970s. using a look-up table method to synthetic waveform, it can satisfy any requirement of waveform produce. due to the field programmable gates array (fpga) with high integ

8、rity, high speed, and large storage properties, it can realize the dds technology effectively, increase signal generators performance and reduce production costs. firstly, this article introduced the function signal generator of the research background and dds theory. then, it described how to desig

9、n a dds module by vhdl, and introduced various signal occurs theory, method and the implementation process, vhdl code and simulation results. this paper also introduces the function of de2 multimedia development platform, and completed most of the functions of multi-function signal generator on de2

10、platform finally. including the occurrence of multiple signal and the man-machine interface which composed by lcd display and key input. digital-to-analog converters is dac902, which produced by company burr-brown. this signal generator can output eight different kinds of signals, and the frequency

11、of the output signal, phase and modulation frequency signal also can be modifyed. keywords: vhdl d/a interface 多功能波形发生器的设计信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,

12、如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。 传统的信号发生器主要有两类:正弦波和脉冲波信号发生器,而函数发生器介于两类之间。它能够提供正弦波、锯齿波、方波、三角波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,但是模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点。而且要产生的信号波形越复杂,则电路结构也会越复杂。同时还有两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。 现代科学技术的飞速发展对信号源提出了

13、越来越高的要求。这些要求主要表现在高分辨率、高输出频率、任意波形等方面。此时传统的信号发生器已经无法满足要求。 直接数字频率合成(direct digital synthesizer简称dds)技术是一种新的全数字的频率合成原理,它从相位的角度出发直接合成所需波形。这种技术由美国学者jtiercy,mrader和bgold于1971年首次提出,但限于当时的技术和工艺水平,dds技术仅仅在理论上进行了一些探讨,而没有应用到实际中去。但是随着电子技术的飞速发展,微处理器性能大幅提高,高速的d/a以及随机存储器大量涌现,dds技术已经变得很容易实现。它已广泛应用于通讯、雷达、遥控测试、电子对抗以及现

14、代化的仪器仪表工业等许多领域。将其与简单电路相结合就可以精确模拟仿真各种信号。 不论是在生产、实验还是在科研与教学上,多功能信号发生器都是用于仿真实验的最佳工具。随着我国经济和科技的发展,对相应的测试仪器和测试手段也提出了更高的要求,多功能信号生器己成为测试仪器中至关重要的一类,因此开发多功能信号发生器具有重大意义。1.课题简介1.1 课设目的(1)懂得多功能波形发生器的结构组成(2)懂得利用fpga芯片实现多种波形的产生方法(3)懂得一种复杂fpga电路的设计 1.2课设要求 设计一个多功能波形发生器。该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。具体要求如下: (1)

15、具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。 (2) 用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。 (3)具有波形存储功能。 (4)输出波形的频率范围为100hz200khz;重复频率可调,频率步进间隔100hz。 (5)输出波形幅度范围05v(峰-峰值),可按步进0.1v(峰-峰值)调整。 (6)具有显示输出波形的类型、重复频率(周期)和幅度的功能。 (7)用键盘或其他输入装置产生任意波形。多功能波形发生器系统由以下四部分组成:输入部分、fpga部分、dac、显示部分组成。 图1 多功能波形发生器系统框图1.3课设工具本次设计是基于altera公司的quartusi

16、i软件。quartus ii 是altera公司的综合性pld开发软件,支持原理图、vhdl、veriloghdl以及ahdl(altera hardware description language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整pld设计流程。quartusii支持altera的ip核,包含了lpm/megafuction宏功能模块库,使用它,可以简化设计的复杂性,加快设计速度。quartusii平台支持一个工作组环境下的设计要求,其中包括支持基于internet的协作设计。此外,quartusii通过和dsp builder工具与mat

17、lab/simulink相结合,可以方便地实现各种dsp应用系统;支持altera的片上可编程系统开发,集系统级设计、嵌入式软件设计、可编程逻辑设计于一体,是一种综性的开发平台。2设计方案2.1方案选择1、模拟锁相环实现模拟锁相环技术是一项比较成熟的技术。应用模拟锁相环,可将基准频率倍频,或分频得到所需的频率,且调节精度可以做到相当高、稳定性也比较好。但模拟锁相环模拟电路复杂,不易调节,成本较高,且由于受模拟器件的影响,波形变换调节时间较长,输出波形的毛刺较多,因此模拟锁相环实现在低频(0500khz)信号发生系统中不是很好的方案。2、直接数字频率合成实现直接数字频率合成(ddfs)技术是经典

18、的数字频率合成技术。由于数字量的可操作性远远高于模拟量,采用ddfs的优点在于频率精度高、波形调节方便、且输出波形毛刺少等。基于单片机的数字波形发生系统受单片机指令频率的限制,输出波形频率较低,而基于fpga的波形发生系统就不存在这样的问题,其输出频带较单片机实现有很大的展宽。本系统设计选定以fpga作为系统控制核心的直接数字频率合成实现方案。2.2 设计原理采用dds技术可以很方便地产生各种高质量的波形。dds技术是从相位概念出发之结合成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于rom表中,表中包含着一个周期正弦波的数字幅度信息,每个

19、地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。在实物设计中,可以使用d/a接口来实现波形信号的输出。为简化设计过程,本设计并未采用dds技术,而是采用描点输出的方式,实现波形发生器的设计。程序中设置一个波形的起始点,经过比较、计算得出波形的其他数值,将这些点依次连续输出,从而实现波形的仿真。以递增锯齿波为例,首先定义初始点为 tmp=“00000000”;在时钟上升沿到来时,执行tmp<=tmp+1;语句,同时将tmp输出,当tmp=“11111111”;时,将tmp值清零,执行下一个循环。在

20、本设计中,采用quartusii软件仿真,所以可以通过波形文件直观的反映出输出的数字量的变化情况,以达到波形输出的仿真。正弦波:通过循环不断地从ram中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形dac,从而产生正弦波。正弦波的频率取决于读取数据的速度。任意波:首先通过键盘把任意波形波形数据存储在存储器中。然后循环不断地从存储器2中依次读取任意波一个周期在时域上64个采样点的波形数据送入波形dac,从而产生任意波。任意波的频率取决于读取数据的速度。三角波:三角波波形是对称的,每边呈线形变化,所以可以根据地址数据做简单运算,就可以得到三角波锯齿波:产生单调性锯齿波,因此把地址数据

21、进行左移2位,结果送波形dac就可。方波a:方波a产生也是由64个采样点组成, 64个采样点的数据只有“低电平”和“高电平” 2种状态。更改“低电平”和“高电平”出现的比例,可以达到调节占空比的目的。波形dac:根据输入的波形数据(即fpga输出的数据),产生相应的模拟波形的输出。调幅dac:根据输入的幅度调节数据(即fpga输出的数据),用来调节波形dac的基准电压,到达输出波形幅度调节的目的。波形指示:每种波形具有一个选择开关,而每个选择开关与fpga接口的一端都并有一个发光二极管,发光二极管起指示作用。频率显示:频率可以直接用4位bcd拨盘开关上的数字和档位开关位置一起来表示频率。幅度显

22、示:用4个数码管来显示输出波形的幅度。2.3设计流程首先启动quartus ii软件如图2所示: 图2 quartus ii启动界面接着利用向导,建立一个新的工程。在file菜单中选择new project wizard选项启动项目向导。如图2所示,分别指定创建工程的路径,工程名和顶层文件名。工程名和顶层文件可以一致也可以不同。一个工程中可以有多个文件,但只能有一个顶层文件。这里我将工程名取为:keshe。如图3所示。 图3创建工程界面在图2所示界面点击next按钮出现对话框如图3所示直接点next按钮然后在出现的界面中选择芯片出现如图4所示界面。点击file-new按键,选择vhdl语言,如

23、图5所示。即进入vhdl语言编辑区如图7所示。 图4创建工程的结束界面 图5芯片选择 图6创建vhdl file对话框 图7 vhdl语言编辑框在图7所示的vhdl语言编辑框中依次输入分频器、四选一选择器、循环加法计数器等4钟计数器、七段译码器等功能模块的vhdl语言源程序。输入完成之后单击保存图标并输入相应的文件名。保存之后即可对源程序进行编译。如果编译成功则源程序完全正确,否则应该返回到出错处改正错误直至编译成功为止。编译成功之后再进行波形仿真,从中得出相应数据及现象。3仿真结果3.1编译警告输入相应源代码,点击,得出结果如图8 图8编译结果程序在编译阶段出现了八个警告,以下面两个为例:1

24、warning (10492): vhdl process statement warning at mine4.vhd(232): signal "y" is read inside the process statement but isn't in the process statement's sensitivity list2warning: output pins are stuck at vcc or gnd warning (13410): pin "p180" is stuck at vcc第一个警告,在process里

25、作为被判断信号(if或者case后面的)或者赋值语句右端信号通常应该写在process的敏感信号表里。有些eda工具不检查这个,可能会导致仿真结果与综合出来的电路不一致。实际上,综合工具在综合的时候会自动把这类信号添加到敏感信号表里,但仿真工具不会,而是完全按照代码体现的语意来仿真。case y is -7段码译码 when 0 => lcd(7 downto 1)<="0000001" when 1 => lcd(7 downto 1)<="1001111" when 2 => lcd(7 downto 1)<=&q

26、uot;0010010" when 3 => lcd(7 downto 1)<="0000110" when 4 => lcd(7 downto 1)<="1001100" when 5 => lcd(7 downto 1)<="0100100" when 6 => lcd(7 downto 1)<="0100000" when 7 => lcd(7 downto 1)<="0001111" when 8 => lcd(

27、7 downto 1)<="0000000" when 9 => lcd(7 downto 1)<="0000100" when others => lcd(7 downto 1)<="0000001" end case;end process;综合时,信号y被添加到敏感信号表中。第二个警告,认为引脚p180直接到正电源了。port(clk : in std_logic; -时钟信号输入 set, clr, up, down, zu, zd : in std_logic; -各个波形特征的调节触发信号 p

28、osting : in std_logic; -任意波键盘置入信号 u0,d0,sw : in std_logic; -方波a、b的切换sw,和方波b的幅度调节按键 ss : in std_logic_vector( 3 downto 0 ); -档位选择信号 sss : in std_logic_vector( 4 downto 0 ); -波形选择信号 data3, data2, data1,data0 : in std_logic_vector(3 downto 0); -bcd码输入 p180 : out std_logic; -预留接口 lcd : out std_logic_vec

29、tor(7 downto 0); -显示输出 shift : out std_logic_vector(3 downto 0); -位码输出 dd, a : out std_logic_vector( 7 downto 0); -波形、幅度数据输出但实际上引脚p180是预留接口未用。3.2编译结果 图9 编译结果3.3建立仿真文件 在编译通过后,要建立后缀为vwf的仿真波形文件。执行菜单命令,选择new,再选择需要的vector waveform file,单击ok。在波形文件编辑方式下,右键选择insert添加信号节点,设置相应的参数。如下图所示。 图10 仿真波形文件建立 图11 仿真波形

30、参数设置3.4仿真结果仿真结果如下图所示 图12仿真波形3.5 rtl视图生成的rtl视图如下 图13 rtl视图4程序分析4.1vhdl语言分析一个vhdl语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个cpu,一般情况下,一个完整的vhdl语言程序至少包括实体、结构体和程序包三个部分。实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。第一部分是程序包,程序包是用vhdl语言编写的共享文件,定义在设计结构体和实体中将

31、要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为ieee的程序包库中。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;第二部分是程序的实体,定义电路单元的输入/输出引脚名称。程序的实体名称可以任意取,但必须与vhdl程序的文件名称相同。实体的标示符是entity,实体以entity开头,以end结束。entity fulladder isport(a,b,ci:in std_logic;co,s: out std_lo

32、gic_vector(7 downto 0);end fulladder;其中,定义了a,b, ci为输入信号引脚,定义co,s为输出信号引脚。第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。结构体有三种描述方式,分别是行为(behavior)描述方式、数据流(dataflow)描述方式和结构描述方式。其中数据流描述方式又被称为寄存器(rtl)描述方式。结构体以表示architechture开头,以end结尾。结构体的名称可以任取。architecture behav of fulladder isbegins<=a xor b xor ci;co<=(a and b)o

33、r(a and ci)or(b and ci);end fulladder上面程序段中结构体的描述方式属于程序流描述方式。4.2主要函数语句分析在程序设计中,主要使用的函数语句有两种:if-else语句和case-when语句。这两种语句也是vhdl程序设计中常用的语句。二者都属于流程控制语句。流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或几条语句或跳过一条或几条语句 。 if语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。if语句的语句结构有以下三种: if 条件句 then - 第一种if语句结构 顺序语句 end if if 条

34、件句 then - 第二种if语句结构 顺序语句 else 顺序语句 end if if 条件句 then - 第三种if语句结构 顺序语句 elsif 条件句 then 顺序语句 . else 顺序语句 end ifcase语句根据满足的条件直接选择多项顺序语句中的一项执行,case语句的结构如下:case 表达式 iswhen 选择值 => 顺序语句when 选择值 => 顺序语句.end case 当执行到case语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值。执行对应的顺序语句,最后结束 case语句。表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据

35、类型的值构成的数组。5小结通过这次fpga课程设计,我对fpga的基本原理有了进一步的认识。fpga的基础就是数字电路和vhdl语言,其开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。开发环境常用的有altera公司的quartus ii 和xilinx公司的ise,本次课程设计选用的是quartus ii 。此次课程设计暴露了我平时学习中的许多不足。在设计的过程中我遇到了一些问题,比如对quartus软件的使用还不太熟悉,在编译的时候出现的错误不知道怎么解决,请教了很多同学才弄明白。还有进行仿真之前需要自己建立仿真波形文件,才能进行仿真等等,但在和老师、同

36、学的交流下,最后我都解决了问题。另一方面我也感受到动手实践的重要性。动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。fpga是实用性很强的课程,只有多学多用,边学边用,才能促进提高自己的能力。虽然课设完成了,但是我意识到,我对fpga技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。6参考文献【1】潘松 黄继业. eda技术与vhdl(第二版).北京:清华大学出版社,2005.7【2】康华光.电子技术基础.北京:高等教育出版社.2006.1【3】付家才. eda工程实践技术.北京:化学工业出版社,2007.

37、1【4】汉泽西. eda技术及其应用.北京:北京航空航天大学出版社,2004.5【5】赵刚.eda技术简明教程.成都:四川大学出版社,2004.6【6】章彬宏 周正林.eda应用技术.北京:北京理工大学出版社,2007.7【7】刘艳萍 高振斌 李志平.eda实用技术及应用.北京:国防工业出版社,2006.17附录源程序代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity keshe isport(clk : in std_log

38、ic; -时钟信号输入 set, clr, up, down, zu, zd : in std_logic; -各个波形特征的调节触发信号 posting : in std_logic; -任意波键盘置入信号 u0,d0,sw : in std_logic; -方波a、b的切换sw,和方波b的幅度调节按键 ss : in std_logic_vector( 3 downto 0 ); -档位选择信号 sss : in std_logic_vector( 4 downto 0 ); -波形选择信号 data3, data2, data1,data0 : in std_logic_vector(3

39、 downto 0); -bcd码输入 p180 : out std_logic; -预留接口 lcd : out std_logic_vector(7 downto 0); -显示输出 shift : out std_logic_vector(3 downto 0); -位码输出 dd, a : out std_logic_vector( 7 downto 0); -波形、幅度数据输出end keshe;architecture behav of keshe issubtype word is std_logic_vector( 7 downto 0 );type unit is array

40、(63 downto 0) of word;signal ram : unit;signal qqq : integer range 0 to 250000000;signal qq : integer range 0 to 78125000;signal tmp : integer range 0 to 9999;signal coun : integer range 0 to 78125000;signal coun0 : integer range 0 to 250000000;signal b : integer range 0 to 78125000;signal c : integ

41、er range 0 to 500000000;signal z, con : integer range 0 to 63;signal f : std_logic_vector( 7 downto 0 );signal amp, amp0, d : std_logic_vector(7 downto 0);signal bcd0,bcd1,bcd2,bcd3 : integer range 0 to 9;signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9;signal bcd00,bcd10,bcd20,bcd30 : integer

42、range 0 to 9;signal y : integer range 0 to 9;signal addr : integer range 0 to 63;beginqq<=781250 when ss="1000" else 7812500 when ss="0100" else 78125000 when ss="0010" else 78125;-qq信号对应sw=0时的档位选择信号ss,实现方波a和其他三种波形的频率预置qqq<= 500000 when ss="1000" else 50

43、00000 when ss="0100" else 50000000 when ss="0010" else50000;-qqq信号对应sw=1时的档位选择信号ss,实现方波b的频率预置process(clk) -此进程分别描述了各种波形的频率、幅度(方波a的占空比)调节以及各种波形的任意线-形叠加等。variable count4 : integer range 0 to 6250000;variable count : integer range 0 to 78125000;variable count3 : integer range 0 to 2

44、50000000;variable count1 : integer range 0 to 12500000;variable count0 : integer range 0 to 3249999;variable ddd : std_logic_vector(9 downto 0);variable dd0,dd1,dd2,dd3,dd4 : integer range 0 to 255;variable adr : integer range 0 to 63;beginif rising_edge(clk) then if posting='1' then if coun

45、t4=6249999 then count4:=0; adr:=conv_integer(data3)*10+conv_integer(data2);-存储单位地址 if adr<64 then if set='1' then ram(adr)<=conv_std_logic_vector(conv_integer(data1)*10+conv_integer(data0)*2,8); -对置入的任意波形数据进行储存 elsif clr='1' then adr:=0; -存储器所有单元清零 for i in 0 to 63 loopram(i)&l

46、t;=(others=>'0');end loop; end if; end if; else count4:=count4+1; end if; else if set='1' then coun<=0; b<=0; coun0<=0;c<=0;z<=31;amp0<="01111111" addr<=0;tmp<=conv_integer(data3)*1000+conv_integer(data2)*100+conv_integer(data1)*10+conv_integer(da

47、ta0); -频率数据 amp<="01111111" -幅值 else if tmp>0 then if sw='0' then if coun<qq then coun<=coun+tmp; b<=b+1; -频率到采样点间隔脉冲数转换 else if count=b then count:=1; if f=63 then f<="00000000" else f<=f+1; end if; if sss="00010" then -方波a if con<=z the

48、n dd<=amp0; con<=con+1; elsif con=63 then con<=0; dd<="00000000" else con<=con+1; dd<="00000000" end if; elsif sss="10000" then dd<=d; -正弦波 elsif sss="00100" then dd<=f(5 downto 0)&"00" -锯齿波 elsif sss="01000" the

49、n -三角波 if f>31 then dd<=("111111"-f(5 downto 0)&"00" else dd<=f(5 downto 0)&"00" end if; elsif sss="00001" then -任意波 if addr<63 then dd<=ram(addr); addr<=addr+1; elsif addr=63 then dd<=ram(63); addr<=0; end if; else -完成5种波形的线形叠加

50、 if sss(1)='1' then if con<=z then con<=con+1; dd0:=conv_integer(amp0); -方波波形数据dd0 else con<=con+1; dd0:=0; end if; end if; if sss(4)='1' then dd1:=conv_integer(d); -正弦波波形数据dd1 end if; if sss(2)='1' then dd2:=conv_integer(f(5 downto 0)&"00"); -锯齿波波形数据dd

51、2 end if; if sss(3)='1' then if f>31 then dd3:=conv_integer("111111"-f(5 downto 0)&"00"); else dd3:=conv_integer(f(5 downto 0)&"00"); -三角波波形数据dd3 end if; end if; if sss(0)='1' then if addr<63 then dd4:=conv_integer(ram(addr); addr<=addr+1; elsi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论