基于EDA技术的正弦信号发生器设计
基于EDA技术的正弦波方波三角波锯齿波四种波形发生器
基于E D A技术的正弦波方波三角波锯齿波四种波形发生器Newly compiled on November 23, 2020梧州学院课程论文(2014 -2015学年第2学期)课程论文题目:基于EDA技术的正弦波、方波、三角波、锯齿波、四种波形发生器学生姓名:目录论文题目: 基于EDA技术的正弦波、方波、三角波、锯齿波、四种波形发生器学生姓名:摘要随着EDA技术以及大规模集成电路技术的迅猛发展,波形发生器的各方面性能指标都达到了一个新的水平。
采用CPLD/FPGA器件在QuartuesII设计环境中用VerilogHDL语言完成的波形发生器具有频率稳定性高,可靠性高,输出波形稳定等特点。
本文介绍了基于EDA技术的波形发生器的研究与设计。
本文采用VerilogHDL语言,运用LPM-ROM制定的方法设计的波形发生器,经过按键来选择四种波形实现了正弦波,方波,三角波,以及锯齿波四种波形的输出,经过实际下载到FPGA实验板上,设计要求已经完全实现。
关键词:VerilogHDL 波形发生器 LPM-ROM FPGA一、系统设计目的与要求、前言随着现代化集成电路和计算机技术的不断飞跃发展,使得电子产品的设计在市场上的应用更为广泛,而且其实现方法的选择也变得越来越多。
基于电路板的设计方法是传统电子产品通用的一中设计方案,这种方法是需要采用较多的固定功能器件,再通过这几器件的设计配合,从而实现模拟电子产品的功能,这些工作的重点就在于如何选择这些器件及怎样设计电路板。
由于可编程逻辑器件的出现和计算机性价比的提高,这影响了传统的数字电子系统的设计方法,对其进行了解放性的革命。
现在要实现电子系统的功能是通过设计师自己设计的芯片来完成的,之后将传统的固件选用及电路板设计工作放在芯片设计中进行,这种方法是现代电子系统的设计方法。
上个世纪九十年代以来,由于复杂化、数字化和大规模集成化的电子产品设计系统的日趋成熟,使得各种电子系统的设计软件也应运而生。
EDA正弦波信号发生器的设计
利用LPM 设计正弦信号发生器一、设计目的:进一步熟悉maxplu sII 及其LPM 设计的运用。
二、设计要求:1、利用原理图输入方式。
2、信号数据点值自行想法实现。
3、得出正确时序仿真文件。
三、设计原理:图1 正弦信号发生器结构框图图1所示的正弦波信号发生器的结构由三部分组成计数器或地址发生器(这里选择8位),正弦信号数据ROM (8位地址线,8位数据线),含有256个8位数据(一个周期)。
四、VHDL 顶层设计。
设计步骤:1、建立.mif 格式文件建立C 语言文件sin.cpp ,运行产生sin.exe 文件。
sin.cpp 程序代码:#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int i;float s;VHDL 顶层设计sin.vhd8位计数器 (地址发生器) 正弦波数据 存储ROM 产生波形数据cout<<"WIDTH=8;\nDEPTH=256;\n\nADDRESS_RADIX=HEX;\nDA TA_R ADIX=HEX;\n\nCONTENT\nBEGIN\n";for(i=0;i<256;i++){s=sin(atan(1)*8*i/256);cout<<" "<<i<<" : "<<setbase(16)<<(int)((s+1)*255/2)<<";"<<endl;}cout<<"END"<<endl;return 0;}把上述程序编译后,在DOS命令行下执行命令:sin.exe > sin.mif;将生成的sin.mif 文件。
EDA实验-正弦波信号发生器设计
实验八正弦信号发生器的设计一、实验目的1、学习用VHDL设计波形发生器和扫频信号发生器。
2、掌握FPGA对D/A的接口和控制技术,学会LPM_ROM在波形发生器设计中的实用方法。
二、实验仪器PC机、EDA实验箱一台Quartus II 6.0软件三、实验原理如实验图所示,完整的波形发生器由4部分组成:• FPGA中的波形发生器控制电路,它通过外来控制信号和高速时钟信号,向波形数据ROM 发出地址信号,输出波形的频率由发出的地址信号的速度决定;当以固定频率扫描输出地址时,模拟输出波形是固定频率,而当以周期性时变方式扫描输出地址时,则模拟输出波形为扫频信号。
•波形数据ROM中存有发生器的波形数据,如正弦波或三角波数据。
当接受来自FPGA的地址信号后,将从数据线输出相应的波形数据,地址变化得越快,则输出数据的速度越快,从而使D/A输出的模拟信号的变化速度越快。
波形数据ROM可以由多种方式实现,如在FPGA外面外接普通ROM;由逻辑方式在FPGA中实现(如例6);或由FPGA中的EAB模块担当,如利用LPM_ROM实现。
相比之下,第1种方式的容量最大,但速度最慢;,第2种方式容量最小,但速度最最快;第3种方式则兼顾了两方面的因素;• D/A转换器负责将ROM输出的数据转换成模拟信号,经滤波电路后输出。
输出波形的频率上限与D/A器件的转换速度有重要关系,本例采用DAC0832器件。
DAC0832是8位D/A转换器,转换周期为1µs,其引脚信号以及与FPGA目标器件典型的接口方式如附图2—7所示。
其参考电压与+5V工作电压相接(实用电路应接精密基准电压).DAC0832的引脚功能简述如下:•ILE(PIN 19):数据锁存允许信号,高电平有效,系统板上已直接连在+5V上。
•WR1、WR2(PIN 2、18):写信号1、2,低电平有效。
•XFER(PIN 17):数据传送控制信号,低电平有效。
•VREF(PIN 8):基准电压,可正可负,-10V~+10V.•RFB(PIN 9):反馈电阻端。
EDA综合实验——正弦信号发生器-张炘精品文档5页
altsyncram_component.operation_mode = "ROM",
altsyncram_component.outdata_aclr_a = "NONE",
altsyncram_component.outdata_reg_a = "UNREGISTERED",
module ROM (
address,
clock,
q);
input[5:0] address;
inputclock;
output[7:0] q;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_off
`endif
tri1clock;
`ifndef ALTERA_RESERVED_QIS
LPM_COUNTER_component.lpm_width = 6;
Endmodule
以上是计数器的模块图形
上图为正弦信号发生器的整体连接图形
上图为示波器显示出的正弦波信号出错的地方是有时会不注意将文件放于不同的文件夹中导致编译仿真时出错。
本次实验更加熟悉了软件的使用机对软件的功能有了进一步了解。模块化设计的理念有了初步建立。
五、实验评价(教师)
1.实验步骤正确,完成了本实验的全部内容。很好( ) 一般( ) 否( )
2.实验数据全面,调试步骤准确,结果正确。很好( ) 一般( ) 否( )
3.实验报告格式规范,图表清晰。很好( ) 一般( ) 否( )
成绩
教师签名
王红航
批改时间
eda-信号发生器三角波正弦波方波
1引言简易多功能信号发生器是信号发生器的一种,在生产实践和科研领域中有着广泛的应用。
信号源主要给被测电路提供所需要的已知信号(各种波形),然后用其它仪表测量感兴趣的参数。
可见信号源在电子实验和测试处理中,并不测量任何参数,而是根据使用者的要求,仿真各种测试信号,提供给被测电路,以达到测试的需要。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号 , 如正弦波 ,三角波和方波等 , 因而广泛用于通信、雷达、导航、宇航等领域。
在本设计中它能够产生多种波形,如正弦波 , 三角波和方波等,并能实现对各种波频率和幅度的改变。
正因为其在生活中应用的重要性,人们它做了大量的研究,总结出了许多实现方式。
可以基于 FPGA 、 VHDL、单片机、 DOS技能、数字电路等多种方法实现。
本设计是采用 VHDL来实现的简易多功能信号发生器。
它能产生正弦波, 三角波和方波。
且对各种波形的要求如下:(1)设计任意信号发生器,使之能够生成正弦波、三角波和方波;( 2)电路的外部频率为 40MHz,要求信号发生器可产生 0-1KHz、 1KHz~10KHz、10KHz~1MHz三档频率的信号;(3)要求具有波形选择和频率选择的功能;(4)在同一频率档内,可实现频率的加减;(5)要求显示波形的同时能够进行频率的调节;( 6)要求能够显示波形: A——正弦波; B——三角波; C——方波;(7)要求能够显示频率值;(8)可用示波器进行波形的观测。
2设计流程2.1设计思想及流程图本次课程设计按模块式实现,据任务书要求,设计总共分三大步骤完成:(1)产生波形(三种波形:方波、三角波、正弦波)信号;(2)频率控制;(3)显示频率值。
利用 VHDL编程,依据基本数字电路模块原理进行整合。
系统各部分所需工作时钟信号由输入系统时钟信号经分频得到,系统时钟输入端应满足输入脉冲信号的要求。
频率控制模块有多个可选频率,最终送至脉冲发生模块输出脉冲信号,同时将信号的频率输出至数码管显示当前信号的频率值,达到设计课题所要求的输出波形频率可调功能。
EDA正弦波信号发生器实验报告
湖北文理学院 EDA课程实验报告题目:正弦信号发生器的设计院部物理与电子信息工程学院专业名称电子信息科学与技术班级 1111姓名杨庆月学号 **********指导教师王培元2013年12月25日湖北文理学院一、设计目的1、掌握 LPM_ROM与FPGA资源的使用方法2、.进一步掌握用硬件描述语言的设计思想;5.了解有关数字系统的设计。
二、设计项目的指标和内容:设计一个可以产生正弦波信号系统。
信号频率可调,相位可调。
根据情况自己确定频率范围。
在QUARTUSII上完成正弦波信号发生器的设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。
最后在实验系统上实测,包括FPGA中ROM的在系统数据读写测试和利用示波器测试。
三、实验步骤:(全为本人整理,如有雷同,纯属抄袭)第一步,新建任务第二步,输入程序,完全照着书中输入,程序在书P200-201。
第三步,保存(Save As)并建立工程,注意芯片不要选错。
(输完了不要仿真,仿真也是错的)第四步,选择Tools里面的Mega...(见图)。
第五步,出现下图对话框,直接点Next。
第六步,这一步很重要,照着图片搞成一样就行了,画圈圈的地方一定要注意。
记得要一样。
搞好后点Next。
第七步,第六步完事儿后出现下图,看画圈圈的地方,bits 设置为8,words设置为128(也可以设置其他数字,只要与mif文件相符合就OK了)第八步,第七步完Next后出现下面的图片,画圈圈的地方是只沟中间那个。
第九步,选mif文件。
选完后后面的全部点Next。
Mif文件在shiyan8那个文件夹里面。
第十步,把能沟的全勾上。
然后Finish第十一步,编译,我做的有11个警告,不管它,没错误就行。
第十二步,看搞好的电路图。
(Tools-NetlistViewers-RTL Viewer)图是这样的,跟书P201那个一样。
第十三步,建立波形文件第十四步,添加波形第十五步,添加完后,记得把EN和RST挪到最上面并加高电平(高电平有效),然后CLK 添加时钟信号(尽量小点,我搞得是1.0)第十六步,别忘了这个过程,你懂得。
基于EDA技术的正弦信号发生器设计
基于EDA技术的正弦信号发生器设计作者:高锐来源:《科技传播》2012年第23期摘要现代EDA技术是当今电子设计技术的最新发展方向,具有极大的灵活性和通用性、测试硬件方便快捷、系统开发快速、降低产品成本、技术维护简单、工作稳定性好等特点。
本文着重介绍了基于EDA技术的正弦信号发生器电路的设计方案、程序设计输入、编译和仿真等操作,比较完整的说明了正弦信号发生器的设计过程、功能和正弦信号发生器电路的设计过程。
关键词电子EDA技术;正弦信号发生器设计;文件编译中图分类号TN702 文献标识码A 文章编号 1674-6708(2012)80-0206-01电子EDA技术的主要特点是使用硬件描述语言进行电子电路系统设计操作,具有较高的系统级仿真能力及综合能力。
使电子EDA技术得以实现的硬件基础是超大规模可编程逻辑器件,它的设计操作过程具有很大的灵活性和可移植性。
进行EDA技术开发的QuartusII软件是用于开发可编程逻辑器件的常用工具软件,此软件功能强大、操作方便,主要用于实现电路系统的设计输入、电路综合、电路布局布线、时序分析和仿真操作、系统配置操作、时序逼近、系统调试和项目管理等功能。
本文中的正弦信号发生器电路就是基于QuartusII软件平台设计的。
1 设计方案信号发生器是数字设备运行过程中不可缺少的一部分,以前的信号发生器,几乎都使用的是分立元件,产品体积庞大且不方便携带。
而现在专用的数字电路信号发生器,硬件成本高、操作复杂。
由于上述原因,小型、成本低且易用的信号发生器比较实用。
基于以上原因,选择使用Quartus II软件创建项目工程xhfs,使用自底向上的混合编辑方法并结合ROM宏功能模块设计一个简易正弦信号发生器。
选择Cyclone II系列的EP2C8Q208C8器件并进行引脚分配、项目编译、仿真、生成目标文件,使用EDA实验箱对目标器件进行编程与配置。
正弦信号发生器设计共由四部分组成,其系统设计框图如图1所示,包括ROM地址发生器(六位计数器)、正弦数据只读存储器ROM和一个八位数模转换电路。
EDA技术-VHDL-5.12正弦信号发生器
2095.12. 正弦信号发生器程序设计与仿真实验1实验目的熟悉QuartusII 及其LPM_ROM 与FPGA 硬件资源的使用方法。
2实验原理正弦信号发生器的结构由3部分组成,数据计数器或地址发生器、数据ROM 和D/A 。
性能良好的正弦信号发生器的设计,要求此3部分具有高速性能,且数据ROM 在高速条件下,占用最少的逻辑资源,设计流程最便捷,波形数据获最方便。
图5.12.1所示是此信号发生器结构图,顶层文件SINGT.VHD 在FPGA 中实现,包含2个部分:ROM 的地址信号发生器由5位计数器担任,和正弦数据ROM ,其原理图如图5.12.2所示。
拒此,ROM 由LPM_ROM 模块构成能达到最优设计,LPM_ROM 底层是FPGA 中的EAB 或ESB 等。
地址发生器的时钟CLK 的输入频率f 0与每周期的波形数据点数(在此选择64点)以及D/A 输出的频率f 的关系是:640f f图5.12.1 正弦信号发生器结构图图5.12.2 正弦信号发生器原理图3 实验内容在Quartus II 上完成正弦信号发生器设计,包括仿真和资源利用情况了解(假设利用Cyclone 器件)。
最后在实验系统上实测,包括SignalTap II 测试、FPGA 中ROM 的在系统数据读写测试和利用示波器测试。
最后完成EPCS1配置器件的编程。
4 实验预习与思考如果CLK 的输入频率是50MHz ,ROM 中一个周期的正弦波数据是128个,要求输出的正弦波频率不低于150KHz,DAC0832是否能适应此项工作?为什么?5 原理图的建立与仿真(1) 为此工程建立文件夹,文件夹名为zxb(2) 建立原理图文件, 单击New→Device Dising→Block Diagram/Schematic file→OK,弹出原理图窗口如图5.12.3所示,图5.12.3 原理图建立窗口(3) 双击原理图窗口的任意处弹出如图5.12.4窗口,在窗口的Name处输入input(输入节点),点击ok,然后保存,文件名为cnt.210图5.12.4 原理图输入窗口(4) 创建工程与第2章2.1节的方法相同。
EDA课程设计——基于DDS的正弦信号发生器设计(模版)
EDA课程设计——基于DDS的正弦信号发生器设计(模版)第一篇:EDA课程设计——基于DDS的正弦信号发生器设计(模版)顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DDS ISPORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);EN:IN STD_LOGIC;RESET:IN STD_LOGIC;CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END ENTITY DDS;ARCHITECTURE BEHAVE OF DDS ISCOMPONENT SUM99 ISPORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);EN:IN STD_LOGIC;RESET:IN STD_LOGIC;CLK:IN STD_LOGIC;OUT1:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END COMPONENT SUM99;COMPONENT REG1 ISPORT(D:IN STD_LOGIC_VECTOR(9 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END COMPONENT REG1;COMPONENT ROM ISPORT(CLK:IN STD_LOGIC;ADDR:IN STD_LOGIC_VECTOR(9 DOWNTO 0);OUTP:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END COMPONENT ROM;COMPONENT REG2 ISPORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END COMPONENT REG2;SIGNAL S1:STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL S2:STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL S3:STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINU0:SUM99PORTMAP(K=>K,EN=>EN,RESET=>RESET,CLK=>CLK,OUT1=>S1);U1:REG1 PORT MAP(D=>S1,CLK=>CLK,Q=>S1);U2:ROM PORT MAP(ADDR=>S2,CLK=>CLK,OUTP=>S3);U3:REG2 PORT MAP(D=>S3,CLK=>CLK,Q=>Q);END ARCHITECTURE BEHAVE;正弦查找表 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM IS PORT(ADDR:IN STD_LOGIC_VECTOR(6 DOWNTO 0);CLK:IN STD_LOGIC;OUTP:OUT SIGNED(7 DOWNTO 0));END ENTITY ROM;ARCHITECTURE ART OF ROM IS BEGIN PROCESS(CLK)IS BEGIN IF(CLK'EVENT AND CLK='1')THEN CASE ADDR IS WHEN “0000000”=>OUTP<=“00000000”;WHEN“0000001”=>OUTP<=“00000010”;WHEN“0000010”=>OUTP<=“00000011”;WHEN“0000011”=>OUTP<=“00000101”;WHEN“0000100”=>OUTP<=“00000110”;WHEN “0000101”=>OUTP<=“00001000”;WHEN “0000110”=>OUTP<=“00001001”;WHEN“0000111”=>OUTP<=“00001011”;WHEN“0001000”=>OUTP<=”00001101“;WHEN ”0001001“=>O UTP<=”00001110“;WHEN ”0001010“=>OUTP<=”0001000 0“;WHEN ”0001011“=>OUTP<=”00010001“;WHEN ”000 1100“=>OUTP<=”00010011“;WHEN ”0001101“=>OUTP< =”00010100“;WHEN ”0001110“=>OUTP<=”00010110“; WHEN ”0001111“=>OUTP<=”00010111“;WHEN ”0010000“=>OUTP<=”00011001“;WHEN ”0010001“=>OUTP<=”0 0011011“;WHEN ”0010010“=>OUTP<=”00011100“;WHEN ”001 0011“=>OUTP<=”00011110“;WHEN ”0010100“=>OUTP< =”00011111“;WHEN ”0010101“=>OUTP<=”00100001“; WHEN ”0010110“=>OUTP<=”00100010“;WHEN ”0010111“=>OUTP<=”00100100“;WHEN ”0011000“=>OUTP<=”0 0100101“;WHEN ”0011001“=>OUTP<=”00100111“;WHEN ”0011010“=>OUTP<=”00101001“;WHEN ”001 1011“=>OUTP<=”00101010“;WHEN ”0011100“=>OUTP< =”00101100“;WHEN ”0011101“=>OUTP<=”00101101“; WHEN ”0011110“=>OUTP<=”00101111“;WHEN ”0011111“=>OUTP<=”00110000“;WHEN ”0100000“=>OUTP<=”0 0110010“;WHEN ”0100001“=>OUTP<=”00110011“;WHEN ”0100010“=>OUTP<=”00110101“;WHEN ”0100011“=>O UTP<=”00110110“;WHEN ”0100100“=>OUTP<=”0011100 0“;WHEN ”0100101“=>OUTP<=”00111001“;WHEN ”010 0110“=>OUTP<=”00111011“;WHEN ”0100111“=>OUTP< =”00111100“;WHEN ”0101000“=>OUTP<=”00111110“; WHEN ”0101001“=>OUTP<=”00111111“;WHEN ”0101010“=>OUTP<=”01000001“;WHEN ”0101011“=>OUTP<=”0 1000011“;WHEN ”0101100“=>OUTP<=”01000100“;WHEN ”0101101“=>OUTP<=”01000110“;WHEN ”0101110“=>O UTP<=”01000111“;WHEN ”0101111“=>OUTP<=”01001001“;WHEN ”0110000“=>OUTP<=”01001010“;WHEN ”011 0001“=>OUTP<=”01001100“;WHEN ”0110010“=>OUTP< =”01001101“;WHEN ”0110011“=>OUTP<=”01001111“; WHEN ”0110100“=>OUTP<=”01010000“;WHEN ”0110101“=>OUTP<=”01010001“;WHEN ”0110110“=>OUTP<=”0 1010011“;WHEN ”0110111“=>OUTP<=”01010100“;WHEN ”0111000“=>OUTP<=”01010110“;WHEN ”0111001“=>O UTP<=”01010111“;WHEN ”0111010“=>OUTP<=”0101100 1“;WHEN ”0111011“=>OUTP<=”01011010“;WHEN ”011 1100“=>OUTP<=”01011100“;WHEN ”0111101“=>OUTP< =”01011101“;WHEN ”0111110“=>OUTP<=”01011111“; WHEN ”0111111“=>OUTP<=”01100000“;WHEN ”1000000“=>OUTP<=”01100010“;WHEN ”1000001“=>OUTP<=”0 1100011“;WHEN ”1000010“=>OUTP<=”01100100“;WHEN ”1000011“=>OUTP<=”01100110“;WHEN ”1000100“=>O UTP<=”01100111“;WHEN ”1000101“=>OUTP<=”0110100 1“;WHEN ”1000110“=>OUTP<=”01101010“;WHEN ”100 0111“=>OUTP<=”01101100“;WHEN ”1001000“=>OUTP< =”01101101“;WHEN ”1001001“=>OUTP<=”01101110“; WHEN ”1001010“=>OUTP<=”01110000“;WHEN ”1001011“=>OUTP<=”01110001“;WHEN ”1001100“=>OUTP<=”0 1110011“;WHEN ”1001101“=>OUTP<=”01110100“;WHEN ”1001110“=>OUTP<=”01110101“;WHEN ”1001111“=>O UTP<=”01110111“;WHEN ”1010000“=>OUTP<=”0111100 0“;WHEN ”1010001“=>OUTP<=”01111010“;WHEN ”101 0010“=>OUTP<=”01111011“;WHEN ”1010011“=>OUTP< =”01111100“;WHEN ”1010100“=>OUTP<=”01111110“; WHEN ”1010101“=>OUTP<=”01111111“;WHEN ”1010110“=>OUTP<=”10000000”;WHEN“1010111”=>OUTP<=“10000010”;WHEN“1011000”=>OUTP<=“10000011”;WHEN“1011001”=>OUTP<=“10000100”;WHEN“1011010”=>OUTP<=“10000110”;WHEN“1011011”=>OUTP<=“10000111”;WHEN “1011100”=>OUTP<=“10001000”;WHEN “1011101”=>OUTP<=“10001010”;WHEN“1011110”=>OUTP<=“10001011”;WHEN“1011111”=>OUTP<=“10001100”;WHEN“1100000”=>OUTP<=“10001110”;WHEN“1100001”=>OUTP<=“10001111”;WHEN“1100010”=>OUTP<=“10010000”;WHEN“1100011”=>OUTP<=“10010010”;WHEN“1100100”=>OUTP<=“10010011”;WHEN“1100101”=>OUTP<=“10010100”;WHEN “00001100110”=>OUTP<=“10010101”;WHEN “1100111”=>OUTP<=“10010111”;WHEN“1101000”=>OUTP<=“10011000”;WHEN“1101001”=>OUTP<=“10011001”;WHEN“1101010”=>OUTP<=“10011010”;WHEN“1101011”=>OUTP<=“10011100”;WHEN“1101100”=>OUTP<=“10011101”;WHEN“1101101”=>OUTP<=“10011110”;WHEN“1101110”=>OUTP<=“10011111”;WHEN“1101111”=>OUTP<=“10100001”;WHEN“1110000”=>OUTP<=“10100010” WHEN “1110001”=>OUTP<=“10100011”;WHEN “1110010”=>OUTP<=“10100100”;WHEN “1110011”=>OUTP<=“10100101”;WHEN“1110100”=>OUTP<=“10100111”;WHEN“1110101”=>OUTP<=“10101000”;WHEN“1110110”=>OUTP<=“10101001”;WHEN“1110111”=>OUTP<=“10101010”;WHEN“1111000”=>OUTP<=“10101011”;WHEN“1111001”=>OUTP<=“10101100”;WHEN“1111010”=>OUTP<=“10101110”;WHEN“1111011”=>OUTP<=“10101111”;WHEN“1111100”=>OUTP<=“10110000”;WHEN“1111101”=>OUTP<=“10110001”;WHEN“1111110”=>OUTP<=“10110010”;WHEN“1111111”=>OUTP<=“10110011”;WHENOTHERS=>OUTP<=“ 00000000”;END CASE;END IF;END PROCESS;END ARCHITECTURE ART;DAC 0832的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITY DAC0832 IS PORT(CLK:IN STD_LOGIC;RST:IN STD_LOGIC;ILE:OUT STD_LOGIC;CONT:OUT STD_LOGIC;DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ENTITY;ARCHITECTURE BEHAVE OF DAC0832 IS SIGNAL Q:INTEGER RANGE 0 TO 63;SIGNAL DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(CLK)BEGINIF RST='1'THEN Q<=0;ELSIF CLK'EVENT AND CLK='1'THEN IF DATA=“11111111”THEN DATA<=“00000000”;ELSE DATA<=DATA+1;END IF;ELSE Q<=Q+1;END IF;END PROCESS;ILE<='1';CONT<='0';DATA_OUT<=DATA;END ARCHITECTURE BEHAVE;频率控制字 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG0 ISPORT(CLK:IN STD_LOGIC;LOCK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END ENTITY REG0;ARCHITECTURE ART OF REG0 IS BEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF LOCK='1'THENQ<=“0000011111”;END IF;END IF;END PROCESS;END ARCHITECTURE ART;相位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG1 ISPORT(D:IN STD_LOGIC_VECTOR(9 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END ENTITY REG1;ARCHITECTURE BEHAVE OF REG1 IS BEGINPROCESS(CLK)ISBEGINIF(CLK'EVENT AND CLK='1')THENQ<=D;END IF;END PROCESS;END ARCHITECTURE BEHAVE;输出数据寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG2 IS PORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END ENTITY REG2;ARCHITECTURE BEHAVE OF REG2 IS BEGINPROCESS(CLK)ISBEGINIF(CLK'EVENT AND CLK='1')THENQ<=D;END IF;END PROCESS;END ARCHITECTURE BEHAVE;相位累加器 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SUM99 ISPORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);CLK:IN STD_LOGIC;EN:IN STD_LOGIC;RESET:IN STD_LOGIC:OUT1:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END ENTITY SUM99;ARCHITECTURE BEHAVE OF SUM99 ISSIGNAL TEMP:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGINPROCESS(CLK,EN,RESET)ISBEGINIF RESET='1'THENTEMP<=“0000000000”;ELSEIF CLK'EVENT AND CLK='1'THENIF EN='1'THENTEMP<=TEMP+K;END IF;END IF;END IF;OUT1<=TEMP;END PROCESS;END ARCHITECTURE BEHAVE;图1.顶层电路原理图图2.dds波形仿真图图3.rom波形仿真图图4.相位寄存器reg1仿真波形图图5.寄存器reg2的波形仿真图6.相位累加器仿真波形图图7.优化过程及对比波形(A——H)图A图B图C图D图E 23图F图G图H第二篇:DDS函数信号发生器的设计DDS函数信号发生器的设计、仿真及下载一、实验设计① 利用DDS(Direct DIgital Frequency Synthesis,即直接数字频率合成)技术产生稳定的正弦波,三角波和方波输出,输出频率为10~1000kHz且频率可调,步进为10Hz,1kHz,10kHz,100kHz。
EDA课程设计——基于DDS的正弦信号发生器设计
顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DDS ISPORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);EN:IN STD_LOGIC;RESET:IN STD_LOGIC;CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END ENTITY DDS;ARCHITECTURE BEHA VE OF DDS ISCOMPONENT SUM99 ISPORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);EN:IN STD_LOGIC;RESET:IN STD_LOGIC;CLK:IN STD_LOGIC;OUT1:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END COMPONENT SUM99;COMPONENT REG1 ISPORT(D:IN STD_LOGIC_VECTOR(9 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END COMPONENT REG1;COMPONENT ROM ISPORT(CLK:IN STD_LOGIC;ADDR:IN STD_LOGIC_VECTOR(9 DOWNTO 0);OUTP:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END COMPONENT ROM;COMPONENT REG2 ISPORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END COMPONENT REG2;SIGNAL S1:STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL S2:STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL S3:STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINU0:SUM99 PORT MAP(K=>K,EN=>EN,RESET=>RESET,CLK=>CLK,OUT1=>S1); U1:REG1 PORT MAP(D=>S1,CLK=>CLK,Q=>S1);U2:ROM PORT MAP(ADDR=>S2,CLK=>CLK,OUTP=>S3);U3:REG2 PORT MAP(D=>S3,CLK=>CLK,Q=>Q);END ARCHITECTURE BEHA VE;正弦查找表LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM ISPORT (ADDR:IN STD_LOGIC_VECTOR(6 DOWNTO 0); CLK:IN STD_LOGIC;OUTP:OUT SIGNED(7 DOWNTO 0));END ENTITY ROM;ARCHITECTURE ART OF ROM ISBEGINPROCESS(CLK)ISBEGINIF(CLK'EVENT AND CLK='1')THENCASE ADDR ISWHEN "0000000"=>OUTP<="00000000";WHEN "0000001"=>OUTP<="00000010";WHEN "0000010"=>OUTP<="00000011";WHEN "0000011"=>OUTP<="00000101";WHEN "0000100"=>OUTP<="00000110";WHEN "0000110"=>OUTP<="00001001"; WHEN "0000111"=>OUTP<="00001011"; WHEN "0001000"=>OUTP<=”00001101"; WHEN "0001001"=>OUTP<="00001110"; WHEN "0001010"=>OUTP<="00010000"; WHEN "0001011"=>OUTP<="00010001"; WHEN "0001100"=>OUTP<="00010011"; WHEN "0001101"=>OUTP<="00010100"; WHEN "0001110"=>OUTP<="00010110"; WHEN "0001111"=>OUTP<="00010111"; WHEN "0010000"=>OUTP<="00011001"; WHEN "0010001"=>OUTP<="00011011";WHEN "0010010"=>OUTP<="00011100"; WHEN "0010011"=>OUTP<="00011110"; WHEN "0010100"=>OUTP<="00011111"; WHEN "0010101"=>OUTP<="00100001"; WHEN "0010110"=>OUTP<="00100010"; WHEN "0010111"=>OUTP<="00100100"; WHEN "0011000"=>OUTP<="00100101"; WHEN "0011001"=>OUTP<="00100111";WHEN "0011011"=>OUTP<="00101010"; WHEN "0011100"=>OUTP<="00101100"; WHEN "0011101"=>OUTP<="00101101"; WHEN "0011110"=>OUTP<="00101111"; WHEN "0011111"=>OUTP<="00110000"; WHEN "0100000"=>OUTP<="00110010"; WHEN "0100001"=>OUTP<="00110011"; WHEN "0100010"=>OUTP<="00110101"; WHEN "0100011"=>OUTP<="00110110"; WHEN "0100100"=>OUTP<="00111000"; WHEN "0100101"=>OUTP<="00111001"; WHEN "0100110"=>OUTP<="00111011"; WHEN "0100111"=>OUTP<="00111100"; WHEN "0101000"=>OUTP<="00111110"; WHEN "0101001"=>OUTP<="00111111"; WHEN "0101010"=>OUTP<="01000001"; WHEN "0101011"=>OUTP<="01000011"; WHEN "0101100"=>OUTP<="01000100"; WHEN "0101101"=>OUTP<="01000110"; WHEN "0101110"=>OUTP<="01000111"; WHEN "0101111"=>OUTP<="01001001";WHEN "0110001"=>OUTP<="01001100"; WHEN "0110010"=>OUTP<="01001101"; WHEN "0110011"=>OUTP<="01001111"; WHEN "0110100"=>OUTP<="01010000"; WHEN "0110101"=>OUTP<="01010001"; WHEN "0110110"=>OUTP<="01010011"; WHEN "0110111"=>OUTP<="01010100"; WHEN "0111000"=>OUTP<="01010110"; WHEN "0111001"=>OUTP<="01010111"; WHEN "0111010"=>OUTP<="01011001"; WHEN "0111011"=>OUTP<="01011010"; WHEN "0111100"=>OUTP<="01011100"; WHEN "0111101"=>OUTP<="01011101"; WHEN "0111110"=>OUTP<="01011111"; WHEN "0111111"=>OUTP<="01100000"; WHEN "1000000"=>OUTP<="01100010"; WHEN "1000001"=>OUTP<="01100011"; WHEN "1000010"=>OUTP<="01100100"; WHEN "1000011"=>OUTP<="01100110"; WHEN "1000100"=>OUTP<="01100111"; WHEN "1000101"=>OUTP<="01101001";WHEN "1000111"=>OUTP<="01101100"; WHEN "1001000"=>OUTP<="01101101"; WHEN "1001001"=>OUTP<="01101110"; WHEN "1001010"=>OUTP<="01110000"; WHEN "1001011"=>OUTP<="01110001"; WHEN "1001100"=>OUTP<="01110011"; WHEN "1001101"=>OUTP<="01110100"; WHEN "1001110"=>OUTP<="01110101"; WHEN "1001111"=>OUTP<="01110111"; WHEN "1010000"=>OUTP<="01111000"; WHEN "1010001"=>OUTP<="01111010"; WHEN "1010010"=>OUTP<="01111011"; WHEN "1010011"=>OUTP<="01111100"; WHEN "1010100"=>OUTP<="01111110"; WHEN "1010101"=>OUTP<="01111111"; WHEN "1010110"=>OUTP<=”10000000"; WHEN "1010111"=>OUTP<="10000010"; WHEN "1011000"=>OUTP<="10000011"; WHEN "1011001"=>OUTP<="10000100"; WHEN "1011010"=>OUTP<="10000110"; WHEN "1011011"=>OUTP<="10000111";WHEN "1011101"=>OUTP<="10001010"; WHEN "1011110"=>OUTP<="10001011"; WHEN "1011111"=>OUTP<="10001100"; WHEN "1100000"=>OUTP<="10001110"; WHEN "1100001"=>OUTP<="10001111"; WHEN "1100010"=>OUTP<="10010000"; WHEN "1100011"=>OUTP<="10010010"; WHEN "1100100"=>OUTP<="10010011"; WHEN "1100101"=>OUTP<="10010100"; WHEN "00001100110"=>OUTP<="10010101"; WHEN "1100111"=>OUTP<="10010111"; WHEN "1101000"=>OUTP<="10011000"; WHEN "1101001"=>OUTP<="10011001"; WHEN "1101010"=>OUTP<="10011010"; WHEN "1101011"=>OUTP<="10011100"; WHEN "1101100"=>OUTP<="10011101"; WHEN "1101101"=>OUTP<="10011110"; WHEN "1101110"=>OUTP<="10011111"; WHEN "1101111"=>OUTP<="10100001"; WHEN "1110000"=>OUTP<="10100010" WHEN "1110001"=>OUTP<="10100011";WHEN "1110011"=>OUTP<="10100101"; WHEN "1110100"=>OUTP<="10100111"; WHEN "1110101"=>OUTP<="10101000"; WHEN "1110110"=>OUTP<="10101001"; WHEN "1110111"=>OUTP<="10101010"; WHEN "1111000"=>OUTP<="10101011"; WHEN "1111001"=>OUTP<="10101100"; WHEN "1111010"=>OUTP<="10101110"; WHEN "1111011"=>OUTP<="10101111"; WHEN "1111100"=>OUTP<="10110000"; WHEN "1111101"=>OUTP<="10110001"; WHEN "1111110"=>OUTP<="10110010"; WHEN "1111111"=>OUTP<="10110011"; WHEN OTHERS=>OUTP<=" 00000000";END CASE;END IF;END PROCESS;END ARCHITECTURE ART;DAC 0832的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DAC0832 ISPORT(CLK:IN STD_LOGIC;RST:IN STD_LOGIC;ILE:OUT STD_LOGIC;CONT:OUT STD_LOGIC;DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY;ARCHITECTURE BEHA VE OF DAC0832 ISSIGNAL Q:INTEGER RANGE 0 TO 63;SIGNAL DATA:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK)BEGINIF RST='1'THEN Q<=0;ELSIF CLK'EVENT AND CLK='1'THENIF DATA="11111111"THEN DATA<="00000000";ELSE DATA<=DATA+1;END IF;ELSE Q<=Q+1;END IF;END PROCESS;ILE<='1';CONT<='0';DATA_OUT<=DATA;END ARCHITECTURE BEHA VE;频率控制字LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG0 ISPORT(CLK:IN STD_LOGIC;LOCK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END ENTITY REG0;ARCHITECTURE ART OF REG0 ISBEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF LOCK='1'THENQ<="0000011111";END IF;END IF;END PROCESS;END ARCHITECTURE ART;相位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG1 ISPORT(D:IN STD_LOGIC_VECTOR(9 DOWNTO 0);CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END ENTITY REG1;ARCHITECTURE BEHA VE OF REG1 ISBEGINPROCESS(CLK) ISBEGINIF(CLK'EVENT AND CLK='1')THENQ<=D;END IF;END PROCESS;END ARCHITECTURE BEHA VE;输出数据寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG2 ISPORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0); CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END ENTITY REG2;ARCHITECTURE BEHA VE OF REG2 ISBEGINPROCESS(CLK)ISBEGINIF(CLK'EVENT AND CLK='1')THENQ<=D;END IF;END PROCESS;END ARCHITECTURE BEHA VE;相位累加器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SUM99 ISPORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);CLK:IN STD_LOGIC;EN:IN STD_LOGIC;RESET:IN STD_LOGIC:OUT1:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END ENTITY SUM99;ARCHITECTURE BEHA VE OF SUM99 ISSIGNAL TEMP:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGINPROCESS(CLK,EN,RESET)ISBEGINIF RESET='1'THENTEMP<="0000000000";ELSEIF CLK'EVENT AND CLK='1'THENIF EN='1'THENTEMP<=TEMP+K;END IF;END IF;END IF;OUT1<=TEMP;END PROCESS;END ARCHITECTURE BEHA VE;图1.顶层电路原理图图2.dds波形仿真图图3.rom波形仿真图图4.相位寄存器reg1仿真波形图图5.寄存器reg2的波形仿真图6.相位累加器仿真波形图图7.优化过程及对比波形(A——H)图A图B图C图D图E图F图G图H。
EDA课程设计正弦信号发生器的设计
《EDA技术》设计报告设计题目正弦信号发生器的设计院系:信息工程学院专业:通信工程学姓号:名:RST7 根地址线CLK计 数器8 位R O M并转串输出TLV5620 D/A 转换一.设计任务及要求1. 设计任务 :利用实验箱上的 D/A 转换器和示波器设计正弦波发生器,可以在示波器上观察到正弦波2. 设计要求 :(1) 用 VHDL 编写正弦波扫描驱动电路 (2) 设计可以产生正弦波信号的电路(3) 连接实验箱上的 D/A 转换器和示波器,观察正弦波波形二.设计方案(1)设计能存储数据的 ROM 模块,将正弦波的正弦信号数据存储在在 ROM 中,通过地址发生器读取,将正弦波信号输入八位 D/A 转化器,在示波器上观察波形(2)用 VHDL 编写正弦波信号数据, 将正弦波信号输入八位 D/A 转化器, 在示波器上观察波形三.设计框图图 1 设计框图信号发生器主要由以下几个部分构成:计数器用于对数据进行采样,ROM用于存储待采样的波形幅度数值, TLV5620 用于将采集的到正弦波数字量变为模拟量,最后通过示波器进行测量获得的波形。
其中,ROM 设置为 7 根地址线, 8个数据位,8 位并行输出。
TLV5260 为串行输入的 D/A 转换芯片,因此要把 ROM 中并行输出的数据进行并转串。
四.实现步骤1. 定制 ROMROM 的数据位选择为8 位,数据数选择128 个。
利用megawizard plug-in manager定制正弦信号数据ROM 宏功能块,并将上面的波形数据加载于此ROM 中。
如图 3 所示。
图2 ROM 存储的数据图3 调入ROM 初始化数据文件并选择在系统读写功能2. 设计顶层.顶层设计主要是通过编写VHDL 语言或设计原理图用于产生计数信号和调用room 存储的数据并输出。
在此步骤里要建立EDA 工程文件,工程文件结构如图4 所示,SIN_CNT 中的VHDL 代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SIN_GNT ISPORT ( RST, CLK, EN : IN STD_LOGIC;ADDR : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END SIN_GNT;ARCHITECTURE BEHA VIOR OF SIN_GNT ISCOMPONENT ROM ISPORT ( address : IN STD_LOGIC_VECTOR(6 DOWNTO 0);inclock : IN STD_LOGIC;q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END COMPONENT;SIGNAL Q : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINU : ROM PORT MAP ( address => Q,inclock => CLK,q => DOUT);PROCESS(CLK, RST, EN)BEGINIF RST = '0' THENQ <= "0000000";ELSIF CLK'EVENT AND CLK = '1' THENIF EN = '1' THENQ <= Q + 1;END IF;END IF;END PROCESS;ADDR <= Q;END BEHA VIOR;工程文件的建立步骤简述如下:1、新建一个文件夹。
EDA实验六 简易正弦信号发生器设计
实验六简易正弦信号发生器设计一、实验目的1、学习使用Verilog设计波形发生器。
2、掌握LPM_ROM在波形发生器设计中的使用方法。
二、实验仪器PC机EDA实验箱一台三、实验原理FPGA中的波形发生器控制电路,它通过外来控制信号和高速时钟信号,向波形数据ROM发出地址信号,输出波形的频率由发出的地址信号的速度决定;当以固定频率扫描输出地址时,模拟输出波形是固定频率,而当以周期性时变方式扫描输出地址时,则模拟输出波形为扫频信号。
波形数据ROM中存有发生器的波形数据,如正弦波或三角波数据。
当接受来自FPGA的地址信号后,将从数据线输出相应的波形数据,地址变化得越快,则输出数据的速度越快,从而使D/A输出的模拟信号的变化速度越快。
四、实验内容设计一个基于LPM_ROM的正弦波信号发生器,并进行仿真测试及实验系统上的硬件测试。
(附加:正弦波的频率可调,相位可调)五、实验步骤1、打开QUARTUSII软件,新建一个工程。
2、新建一个Schematic File 文件。
3、利用波形生成器生成正选波的.mif文件,数据为8数,一个周期为128个数据。
4、定制LPM_ROM。
5、设计ROM的地址发生器。
6、在Schematic File 文件中设计正弦波信号发生器。
在空白处双击鼠标左键,在 Symbol 对话框左上角的libraries 中,分别将创建模块放在图形文件 Schematic File中,加入输入、输出引脚,双击每个引脚,进行引脚命名,并锁定管脚,将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。
七、思考题假设要输出的正弦波的频率为100K,正玄波的一个周期由128个数据组成,则正弦波发生器的输入时钟频率为多少?因为地址发生器的时钟CLK的输入频率f0(50MHz)与每周期的波形数据点数(128点),以及D/A输出的频率f的关系是:f=f0/128。
本题:f=50X106/128=390625Hz。
正弦信号发生器设计报告资料
电子设计报告正弦信号发生器设计小组成员院系名称专业名称班级二○一四年 7 月 17 日正弦信号发生器设计内容提要:本次设计是基于FPGA与DSP设计与制作的一个正弦信号发生器,结合了EDA 技术与直接数字频率合成(DDS)技术。
EDA技术是现代电子设计技术的核心,DDS技术是最为先进的频率合成技术,具有频率分辨率高、频率切换速度快、相位连续、输出相位噪声低等许多优点。
我们利用EDA技术,简历正弦信号DDS产生的模型,编写源程序,产生输出频率1Hz-10MHz的正弦波。
在设计中,我们使用FPGA开发板构造直接数字频率合成器(DDS)产生正弦信号,再通过DSP来控制产生的正弦信号的频率。
经过DDS输出的正弦信号通过低通滤波器与宽带放大器之后就可以输出频率与幅度均达到要求的正弦信号。
通过查阅资料,提出了符合FPGA的正弦信号发生器设计方案并且通过QUARTUS II软件进行设计实现,DDS由相位累加器和正弦ROM查找表两个功能块组成,其中ROM查找表由宏功能模块LPM_ROM来实现。
在了解了EDA技术的相关知识与DDS技术的工作原理、电路结构,及设计的思路和实现方法的基础上。
经过仿真测试,设计可以达到技术要求。
关键词:FPGA 直接数字频率合成(DDS)正弦信号 DSP目录1. 方案设计与论证 (1)1.1 正弦信号输出方案设计与论证 (1)1.2 宽带放大器方案设计与论证 (1)2. 硬件电路设计 (2)2.1宽带放大器设计 (2)2.2 DA转换电路设计 (4)2.3低通通滤波器设计 (4)3. 软件设计 (4)3.1有关直接数字频率合成器(DDS) (4)3.2 软件总体框图 (5)4. 参考文献 (6)正弦信号发生器设计报告1.方案设计与论证1.1 正弦信号输出方案设计与论证方案一:采用分立元件模拟直接合成来产生正弦波,这种方法的优点是转换速度快,频率分辨率高,缺点是转换的量程要靠手动来实现,体积大难以集成,而且可靠性和准确度都比较低,很难得到提高。
EDA课程关于DDS的简单设计基于Verilog HDLword格式
基于DDS的正弦信号发生器设计报告起止日期2017.6.23——2017.6.30设计题目DDS实现原理与应用基于Verilog HDL语言设计要求1,设计一可调节的信号发生器。
2,实现正弦波的输出。
3,实现频率可调,如调节频率倍数10。
4,用Verilog HDL语言对此DDS发生器进行建模。
5,用Quartus 2软件进行仿真测试。
6,设计可控的正交信号发生器,即使电路输出两路信号,相互正交,一路正弦信号,一路余弦信号,相位差差90度1,设计目的:1,学习利用EDA 技术和FPGA 实现直接数字频率综合器DDS 的设计。
2,掌握基本的设计方法,利用基本的设计思想独立的设计出完整的课题 3,DDS (Direct Digital Synthesizer )即直接数字合成器,是一种新型的频率 合成技术。
具有较高的频率分辨率,可以实现快速的频率转换,并且在改变时能够保持相位的连续,很容易实现频率,相位和幅度的数控调制。
因此,数字频率合成器广泛应用于现代电子系统及设备中,很重要。
2,DDS 设计原理:对于正弦信号发生器,它的输出可以用下式子来描述:).2sin(sin outt A t A fSOUTπω==Sour 是信号发生器的输出信号波形,fout 为输出信号对应的频率。
时间t 是连续的,为了数字逻辑实验该表达式,须要进行离散化处理,用基准时钟CLK 进行抽样,令正弦信号的相位θ为:θ=2*π*fout*t在一个CLK 周期,相位θ的变化量为:ff clkT out out 2c f 2ππθ=*=∆其中fclk 指clk 的频率对于2π可以理解成“满”相位,为了对θ∆进行数字量化,把2π切割成2N份,由此每个clk 周期的相位增量θ∆用量化值B θ∆来表述:B θ∆πθ2 ≈,且B θ∆为整数,与上式联立得:fclkt NB fou 2=∆θ,B θ∆=fclk fout N*2显然,信号发生器的输出可描述为))B BfB BK K AA A Sout Nk θθθθπθθ +=+*=∆+=---11(](2sin[)sin(sin12其中θ1-k 指前一个周期clk 周期的相位值,同样得出B K θ1-=221Nk *-πθ所以,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值,而用于累加的相位增量量化值B θ 决定了信号的输出频率fout,并呈现出简单的线性关系。
EDA课程设计-DDS
EDA课程设计-----正弦波信号发生器的设计正弦信号源在实验室和电子工程设计中有着十分重要的作用,而传统的正弦信号源根据实际需要一般价格昂贵,低频输出时性能不好且不便于自动调节,工程实用性较差。
本文的设计以较低的成本制作正弦信号发生器,可用作核磁共振中引发磁场测量仪的激励一般的正弦信号,也可作为调制用的教学演示信号源。
正弦波信号发生器采用直接数字频率合成DDS技术,在CPLD上实现正弦信号查找表和地址扫描,经D/A输出可得到正弦信号。
一.设计目的1、了解宏功能模块。
2、学习用fpga实现正弦波信号的发生。
二.正弦波信号发生器的设计思路2.1 dds技术原理DDS(direct digital synthesizer)是从相位概念出发直接合成所需的波形的一种频率合成技术。
一个dds 信号发生器是由:相位累加器、波形数ROM表、D/A 转换器以及模拟低通滤波器LPF 组成, 原理框图如图1 所示。
DDS 技术的核心是相位累加器, 相位累加器在稳定时钟信号的控制下产生读取数据的地址值,随后通过查表变换, 地址值被转化为信号波形的数字幅度序列, 再由数/模变换器(D/A)将代表波形幅度的数字序列转化为模拟电压, 最后经由低通滤波器将D/A 输出的阶梯状波形平滑为所需的连续波形。
其中F 为频率控制字、P 为相位控制字、W 为波形控制字、Fc 为参考时钟频率。
相位累加器在时钟Fc 的控制下以步长F作累加, 输出的值与相位控制字P 和波形控制字W相加后形成查表的地址值, 对波形ROM进行寻址。
波形ROM的输出值即是幅度值, 经过D/A 变换后形成阶梯状的波形, 最后通过低通滤波平滑成所需的波形。
合成信号的波形取决于ROM表中的幅度序列, 通过修改数据可以产生任意波形, 如果要产生多种波形, 只需把所需的多种波形数据存放到波形ROM表中。
本设计希望可以输出正弦波和锯齿波, 输出的波形由波形控制字W控制。
输出波形的频率为:Fout=(Fc*F)/2^N(其中的N 表示相位相位累加器的位数, 本设计采用256 点的相位, 有N=8)整体设计采用VHDL 语言实现, 使用Altera 公司的QuartusII进行设计, 顶层的原理图如图图1 dds的原理图图2 顶层文件的设计2.2 ROM 表的设计与实现ROM表中包含了产生波形需要的幅值序列, 是产生波形的核心模块。
EDA课程设计-简易信号发生器[23页].doc
EDA课程设计简易信号发生器简易信号发生器1.课程设计要求1. 完成实验板上DAC的匹配电阻选择、焊接与调试,确保其可以正常工作。
2. 根据直接数字频率合成(DDFS)原理设计正弦信号发生器,频率步进1Hz,最高输出频率不限,在波形不产生失真(从输出1KHz正弦转换为输出最高频率正弦时,幅度衰减不得大于10%)的情况下越高越好。
频率字可以由串口设定,也可以由按键控制,数码管上显示频率值。
3. 可以控制改变输出波形类型,在正弦、三角波、锯齿波、方波之间切换。
4. 输出波形幅度可调,最小幅度步进100mV。
2.直接数字频率合成(DDS)原理直接数字频率合成技术是根据相位间隔对正弦信号进行取样、量化、编码,然后储存在EPROM中构成一个正弦查询表。
频率合成时,相位累加器在参考时钟的作用下对时钟脉冲进行计数,同时将累加器输出的累加相位与频率控制字K 预置的相位增量相加,以相加后的吉果形成正弦查询表的地址;取出表中与该相位对应的单元中的幅度量化正弦函数值,经D/A转换器输出模拟信号,再经低通滤波器平滑得到符合要求的模拟信号。
相位累加器的最大计数长度与正弦查询表中所存储的相位分隔点数相同,由于相位累加器的相位增量不同,将导致一周期内的取样点数不同,在取样频率(由参考时钟频率决定)不变的情况下,输出信号的频率也相应变化。
fin=M(fclk/2^n)3. 系统设计 3.1 总体设计方案信号发生器从总体上可以分为系统控制模块,波形产生模块和D/A 转换模块。
系统控制模块负责处理按键的读入,按键处理,将频率和幅度在数码管上显示,调节频率和幅度以及波形的选择。
波形发生模块负责按照控制模块输入的信号,输出相应的波形(正弦波,方波锯,齿波,三角波),以及输出相应幅度和频率的信号。
D/A 转换模块负责将输入的数字信号转换为模拟信号。
系统控制模块数码管显示(幅度频率)按键读入LED 指示灯频率调节 波形选择幅度调节波形产生模块D/A 转换显示输出3.2 系统控制模块1、按键控制模块和数码显示模块键值读取和按键消抖模块when 1 => if counter>="1111111111111110" thenstate:=2;counter:="00000";else counter:=counter+1;state:=1;end if;when 2 => if abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0' thencase abcd iswhen "0111"=>key_value_1<="00";state:=3;when "1011"=>key_value_1<="01";state:=3;when "1101"=>key_value_1<="10";state:=3;when "1110"=>key_value_1<="11";state:=3;when others=>state:=0;end case;else state:=0;end if;when 3 => if (abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0')thenif counter>="00011"thencounter:="00000";out_clk<='1';else counter:=counter+1;end if;state:=3;elsestate:=4;out_clk<='1';end if;when 4 => if counter>="00111" thenstate:=0;c ounter:="00000";out_clk<='0';else counter:=counter+1;state:=4;end if;end case;end if;e nd process;2)、按键处理和显示模块设计思路外接的四个按键的分配:A:数码管频率显示和幅度显示切换;B:波形之间的切换(用四个LED对应显示);C:选择要调节的数码管(用四个LED对应显示);D:对选择的数码管进行调节(0~9循环显示);数码管显示:从左往右依次是频率(单位Hz)或幅度(mV)值的千、百、十、个位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于EDA技术的正弦信号发生器设计摘要现代eda技术是当今电子设计技术的最新发展方向,具有极大的灵活性和通用性、测试硬件方便快捷、系统开发快速、降低产品成本、技术维护简单、工作稳定性好等特点。
本文着重介绍了基于eda技术的正弦信号发生器电路的设计方案、程序设计输入、编译和仿真等操作,比较完整的说明了正弦信号发生器的设计过程、功能和正弦信号发生器电路的设计过程。
关键词电子eda技术;正弦信号发生器设计;文件编译
中图分类号tn702 文献标识码a 文章编号1674-6708(2012)80-0206-01
电子eda技术的主要特点是使用硬件描述语言进行电子电路系统设计操作,具有较高的系统级仿真能力及综合能力。
使电子eda 技术得以实现的硬件基础是超大规模可编程逻辑器件,它的设计操作过程具有很大的灵活性和可移植性。
进行eda技术开发的quartusii软件是用于开发可编程逻辑器件的常用工具软件,此软件功能强大、操作方便,主要用于实现电路系统的设计输入、电路综合、电路布局布线、时序分析和仿真操作、系统配置操作、时序逼近、系统调试和项目管理等功能。
本文中的正弦信号发生器电路就是基于quartusii软件平台设计的。
1 设计方案
信号发生器是数字设备运行过程中不可缺少的一部分,以前的
信号发生器,几乎都使用的是分立元件,产品体积庞大且不方便携带。
而现在专用的数字电路信号发生器,硬件成本高、操作复杂。
由于上述原因,小型、成本低且易用的信号发生器比较实用。
基于以上原因,选择使用quartus ii软件创建项目工程xhfs,使用自底向上的混合编辑方法并结合rom宏功能模块设计一个简易正弦信号发生器。
选择cyclone ii系列的ep2c8q208c8器件并进行引脚分配、项目编译、仿真、生成目标文件,使用eda实验箱对目标器件进行编程与配置。
正弦信号发生器设计共由四部分组成,其系统设计框图如图1
所示,包括rom地址发生器(六位计数器)、正弦数据只读存储器rom和一个八位数模转换电路。
当前系统各部分工作所对应的时钟信号都是由系统时钟信号经过分频得到的,电路系统时钟输入端就可以满足输入方波信号的要求。
rom地址发生器正弦信号数据存储器八位数/模转换电路。
2 正弦信号发生器电路设计
1)在quartusii软件中使用向导创建项目工程xhfs
指定目标器件为cyclone ii系列中的ep2c8q208c8器件。
2)设计存储器编辑文件sj.mif,用于存放正弦波形数据
选择菜单“file”→“new”→“other files”→“memory initialization file”,弹出“设置rom数据文件大小”对话框,在这里使用64点8位数据。
输入好数据后,单击ok按钮,在弹出
的mif数据表格。
将波形数据填入数据表格中,表格中任意数据的存储地址为左列数和顶行数之和,保存并命名当前文件为
“sj.mif”。
3)使用mega wizard plug-in manager定制正弦信号数据rom 宏功能模块
(1)选择菜单“tools”→“mega wizard plug-in mange”,在弹出的“创建宏功能模块”对话框中选择“create a new custom megafunction variation”选项,即新建一个宏功能模块;(2)单击next按钮,在弹出的“选择rom宏功能模块”对话框中选择“rom-1port”宏功能模块、“cyclone ii”器件,输入文件路径和文件名dj.vhd;(3)单击next按钮,弹出“设置rom地址位宽和数据线宽”对话框。
在数据位宽选项中选择“8”、在数据数选项中选择“64”、在时钟类型选项中选择“auto”、在时钟控制信号选项中选择“single clock”;(4)单击next按钮,在弹出的“选择数据文件”对话框中选择“yes, use this file for the memory content data”选项,接着单击browse按钮并从弹出的对话框中选择“sj.mif”文件。
选中下方的复选框,即允许通过jtag口对下载于fpga中的当前rom进行测试和读写;(5)单击next按钮,在弹出的“仿真库信息”对话框中可以观察到仿真库的相应信息;(6)单击next按钮,在弹出的“rom简要信息”对话框中选择生成的类型文件(包括电路符号文件.bsf)。
单击finish按钮,完成
当前rom的创建操作。
4)在当前项目工程中创建rom地址发生器文件xhfsq.vhd并生成电路符号xhfsq.bsf。
5)创建顶层设计文件xhfs.bdf。
将电路符号xhfsq.bsf放置在当前原理图文件中,连接并命名好输入/输出引脚。
将其保存在当前项目工程中,指定其为顶层文件。
选择菜单“processing”→“start”→“start analysis & elaboration”,分析当前项目工程设计并检查语法和语义错误。
6)顶层设计文件编译
首先,选中菜单“assignments”→“device”,选中适当的逻辑器件;其次,再选中菜单“file”→“project”→“save&check”,保存当前文件并进行错误检查;再次,选中菜单“file”→“project”→“save&compile”,对当前文件进行编译,此时则生成相应的烧写文件(扩展名为.sof)。
最后,将当前项目中所生的配置文件通过下载电缆下载到eda实验箱中,以验证当前项目的正确性。
参考文献
[1]周润景,图雅,张丽敏.基于quartusii的fpga/cpld数字系统设计实例[m].北京:电子工业出版社,2007:239.
[2]赵明富.eda技术与实践[m],北京:清华大学出版社,2005:269.。