EDA课程设计(信号发生器)
EDA课程设计-正弦信号发生器的设计
《EDA技术》设计报告设计题目正弦信号发生器的设计院系:信息工程学院专业:通信工程____学号:姓名:__________一.设计任务及要求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.定制ROM计 数 器 7根地址线 8 位 R O M 并转串输出 CLKTLV5620D/A 转换RSTROM的数据位选择为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课设序列信号发生器设计
绪论本次课程设计通过利用quartusII软件实现序列发生器。
从而对EDA进一步的熟悉,了解,和掌握。
通过本课程的学习,可以了解硬件描述语言编程方法 ,掌握VHDL编程方法,掌握序列发生器的形成。
EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。
EDA技术是以计算机为工具,根据硬件描述语言HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD 相映射的网表文件。
适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。
适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。
硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。
HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。
设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。
EDA课程报告_正弦波信号发生器的设计
《EDA》课程设计报告——正弦波信号发生器的设计一、设计目的:进一步熟悉QuartusII及其LPM_ROM与FPGA 硬件资源的使用方法。
培养动手能力以及合作能力。
二、设计要求:1、clk为12MHz。
2、通过DAC0832输出正弦波电压信号,电压范围0~-5V。
3、通过示波器观察波形。
三、设计内容:在QUARTUSII上完成正弦波信号发生器的设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。
最后在实验系统上实测,包括FPGA中ROM的在系统数据读写测试和利用示波器测试。
信号输出的D/A使用实验系统上的ADC0832。
四、设计原理:图1所示的正弦波信号发生器的结构由四部分组成:1、计数器或地址发生器(这里选择10位)。
2、 正弦信号数据ROM (10位地址线,8位数据线),含有1024个8位数据(一个周期)。
3、 VHDL 顶层设计。
4、 8位D/A (实验中可用ADC0832代替)。
图1所示的信号发生器结构图中,顶层文件singt.vhd 在FPGA 中实现,包含两个部分:ROM 的地址信号发生器,由10位计数器担任;一个正弦数据ROM ,由LPM_ROM 模块构成。
LPM_ROM 底层是FPGA 中的EAB 、ESB 或M4K 等模块。
地址发生器的时钟clk 的输入频率fo 与每周期的波形数据点数(在此选择1024点),以及D/A 输出的频率f 的关系是:f=fo/1024图1 正弦信号发生器结构框图VHDL 顶层设计singt.vhd10位计数器(地址发生器) 正弦波数据 存储ROM 8位D/AFPGA DAC08328clk运放Vo按键图2 正弦波信号发生器的设计图五、 设计步骤:1、 建立.mif 格式文件首先,mif 文件可用C 语言程序生成,产生正弦波数值的C 程序如下:#include<stdio.h>#include<math.h>main(){int i;float s;for(i=0;i<1024;i++){s=sin(atan(1)*8*i/256);printf("%d :%d;\n",i,(int)((s+1)*255/2)) }}其次,把上述程序编译后,在DOS命令行下执行命令:romgen > sdata.mif;将生成的sdata.mif 文件,再加上.mif文件的头部说明即可。
EDA课程设计(信号发生器)
课程设计报告2010 ~ 2011 学年第一学期设计题目:基于FPGA可调信号发生器学院:专业:课程名称: EDA原理与应用学生姓名:时间: 2011年1月指导教师:目录一、系统总体设计---------------------------------------------------------------------2二、系统功能模块设计---------------------------------------------------------------21、矩阵键盘模块------------------------------------------------------------32、频率显示模块-----------------------------------------------------------113、波形数据ROM初始化数据文件设计--------------------------------134、频率、幅度改变模块--------------------------------------------------145、DA转化模块-----------------------------------------------------------186、示波器检测-------------------------------------------------------------18三、结束语---------------------------------------------------------------------------191、矩阵键盘模块:矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键,这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高系统中I/O口的利用率。
EDA课程设计_多功能波形信号发生器
目录摘要 (1)一、设计要求 (3)三、系统设计思路 (4)3.1 波形函数发生装置的选择 (4)3.2 波形输入输出控制方式的选择 (5)四、各模块设计及仿真 (6)4.1函数发生模块 (6)4.1.1 正弦波模块 (6)4.1.2 方波模块 (7)4.1.3 递增锯齿波模块 (9)4.1.4 递减锯齿波模块 (10)4.1.5 阶梯波模块 (12)4.1.6 三角波模块 (13)4.2调控模块 (15)4.2.1波形输出控制单元 (15)4.2.2波形输入控制单元 (16)4.2.3频率控制单元 (18)4.2.4幅度控制单元 (20)4.3 D/A转换器 (21)4.4 总电路 (24)五、硬件测试 (25)5.1编译 (25)5.2 引脚的锁定 (26)5.3编程下载 (27)5.4 硬件验证 (28)六、课程设计心得体会 (31)参考文献 (32)附录 (33)摘要本次设计课题为应用VHDL语言及MAX+PLUSII软件提供的原理图输入设计功能,组合电子线路的设计加以完成一个任意波形信号发生器。
它具有结构紧凑,性能稳定,设计结构灵活,方便进行多功能组成的特点,经济实用,成本低廉的特点。
可产生正弦波、方波、三角波、递增锯齿波、递减锯齿波以及阶梯波,并可使用示波器观察波形。
实现了系统信号实时快速测量,也为其广泛应用于实际领域创造了条件。
在实现过程中,将整体功能模块化,分为函数发生模块和调控模块。
在调控模块中实现了调频调幅以及对于波形的输入输出控制。
对于D/A转化器,本实验选择的是TLC7528,利用简单的8进制计数控制CS和WR端口的同步输出,实现数模转换的同时,保持相应位的同步实现。
在课程设计中遇到了诸多困难,在用示波器显示波形时,却总是得不到稳定的波形,后来发现在输入控制中,仅需要3位二进制数即能完成简单的8进制计数,自己却习惯性的用了8位,这使得分频现象严重,更改后即得到了了稳定的输出波形,经过反复修改调试,最终试验成功。
eda信号发生器设计
目录摘要 (2)一、实验目的 (2)二、主要功能 (2)三、实验原理 (3)四、软件设计 (3)4.1、程序 (3)4.2、波形图 (4)五、引脚锁定后下载程序 (5)六、实验结果 (5)七、实训心得 (5)八、参考文献 (9)九、附录 (9)摘要信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。
在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信号源或激励源。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器关键词:信号发生器;FPGA;Verilog HDL语言一、实验目的进一步巩固理论知识培养所学理论知识在实际中的应用能力:掌握EDA设计的一般方法;熟悉一种EDA软件,掌握一般EDA系统的调试方法:利用EDA软件设计一个电子技术综合问题,培养Verilog HDL编程;书写技术报告的能力,为以后进行工程实际问题的研究打下设计基础。
二、主要功能信号发生器,它用于产生被测电路所需特定参数的电测试信号。
在测试、研究或调整电子电路及设备时,为测定电路的一些电参量,如测量频率响应、噪声系数,为电压表定度等,都要求提供符合所定技术条件的电信号,以模拟在实际工作中使用的待测设备的激励信号。
当要求进行系统的稳态特性测量时,需使用振幅、频率已知的正弦信号源。
当测试系统的瞬态特性时,又需使用前沿时间、脉冲宽度和重复周期已知的矩形脉冲源。
并且要求信号源输出信号的参数,如频率、波形、输出电压或功率等,能在一定范围内进行精确调整,有很好的稳定性,有输出指示。
信号源可以根据输出波形的不同,划分为正弦波信号发生器、矩形脉冲信号发生器、函数信号发生器和随机信号发生器等四大类。
正弦信号是使用最广泛的测试信号。
eda课程信号发生器课程设计
eda课程信号发生器课程设计一、课程目标知识目标:1. 学生能理解EDA课程中信号发生器的原理与功能,掌握相关电子元件的工作特性。
2. 学生能够掌握信号发生器的分类、特点及应用场景,了解各类信号发生器的优缺点。
3. 学生能够运用所学知识,分析并设计简单的信号发生器电路。
技能目标:1. 学生能够熟练运用EDA软件进行信号发生器电路的设计、仿真与调试。
2. 学生能够独立完成信号发生器的硬件搭建,并进行基本的性能测试。
3. 学生能够通过实际操作,提高动手实践能力,培养解决实际问题的能力。
情感态度价值观目标:1. 学生能够培养对电子工程的兴趣,激发创新意识,形成主动学习的习惯。
2. 学生能够培养团队协作精神,学会与他人沟通交流,共同解决问题。
3. 学生能够认识到信号发生器在现代社会中的重要作用,增强社会责任感和使命感。
本课程针对高年级学生,在分析课程性质、学生特点和教学要求的基础上,明确以上课程目标。
通过分解目标为具体的学习成果,使学生在掌握专业知识的同时,提高实践操作能力和团队协作能力,培养良好的情感态度价值观。
为后续的教学设计和评估提供明确的方向。
二、教学内容本章节教学内容依据课程目标,紧密结合教材,确保科学性和系统性。
主要内容包括:1. 信号发生器原理与分类:讲解信号发生器的基本原理、功能及分类,重点介绍函数发生器、脉冲发生器等常见类型的工作原理及应用。
2. 电子元件特性分析:分析常用电子元件(如运放、晶体管、二极管等)在信号发生器中的作用,掌握其工作特性。
3. 信号发生器电路设计:根据实际需求,设计不同类型的信号发生器电路,分析电路性能,优化设计方案。
4. EDA软件应用:教授学生如何使用EDA软件进行信号发生器电路的设计、仿真与调试,提高实际操作能力。
5. 硬件搭建与性能测试:指导学生搭建信号发生器硬件电路,进行基本性能测试,分析测试结果,找出问题并解决。
教学内容安排如下:1. 第1周:信号发生器原理与分类,电子元件特性分析。
EDA课程设计---函数信号发生器的设计
摘要本说明书首先介绍了VHDL语言的特点及发展史;接着简要说明了D/A接口(函数发生器)的工作原理及设计思想和设计方案的确定;然后着重解释了使用VHDL语言设计D/A接口(函数发生器)的具体操作步骤及主要流程。
为了更加详细的解释清楚主要流程在本课程设计说明书中还附加了相应的图片。
最后还附加了实现设计的VHDL源程序。
关键词:VHDL D/A接口设计绪论EDA是电子设计自动化(Electronic Design Automation)的缩写。
EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
EDA技术使设计者的工作仅局限于利用软件的方式来完成对系统硬件功能的实现,可以说EDA技术的产生与发展是电子设计技术的一个巨大进步。
EDA技术融合了众多电子设计技术和计算机辅助技术,使得它在现代电子学方面的应用越来越广泛,也成为电子、电气类大学生必须熟练掌握的一种设计工具。
硬件描述性语言HDL是EDA技术的重要组成部分,常见HDL的有VHDL、HDL、ABEL、Verilog、AHDL、SystemC等。
其中VHDL、Verilog在现在的EDA 设计中使用的最多,也拥有了几乎所有主流EDA工具的支持,而相对于其他语言VHDL更加完善。
VHDL是英文全名是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,是硬件描述语言的业界标准之一。
它作为一个规范语言和建模语言,具有与具体硬件电路无关及设计平台无关的特性,而且还有很强的电路行为描述和建模能力,能从多个层次的数字系统进行建模和描述,从而大大简化了硬件设计的任务,提高了设计效率和可靠性。
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课程设计的信号发生器
重庆大学城市科技学院电气信息学院EDA课程设计报告课程题目函数信号发生器指导教师专业组员学号日期一摘要EDA技术作为现代电子设计的核心,它依赖于功能强大的计算机,在EDA 工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动的完成设计文件,自动的完成逻辑编译,逻辑化简,逻辑分割,逻辑综合,结构综合(布局布线),以及逻辑优化和仿真测试,直到完成既定的电子线路系统功能。
随着基于FPGA的EDA技术的发展和应用领域不断的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。
随着技术市场与人才市场对EDA技术的需求不断提高,产品的市场效率和技术要求也将会影响到教学与科研。
本设计是一个基于VHDL的采用自顶向下设计方法实现的多功能函数信号发生器,该设计方法具有外围电路简单,程序修改灵活和调试容易等特点,并通过计算机仿真和实验证明了设计的正确性。
关键词:FPGA 信号发生器 VHDL 自顶向下二题目分析1、设计目的设计一个信号发生器,用于产生正弦波、方波、三角波、锯齿波信号2、设计要求设计一个信号发生器(1).能产生正弦波、方波、三角波、锯齿波。
(2).能够选择输出不同的波形。
(3).能够调节输出波形的频率。
三硬件电路设计由题目分析可知,要完成整体设计,可通过QuartusⅡ设计出以下各个模块的原理图:1)分频器的原理图2)地址发生器的原理图3)正弦波发生器的原理图4)方波信号发生器的原理图5)锯齿波信号发生器的原理图6)三角波信号发生器的原理图7)四选一选择器原理图其中各波形数据存储ROM的HEX数据文件分别如下各图所示:图3.9 正弦波数据图3.10 方波数据图3.11 锯齿波数据图3.12 三角波数据经过对设计要求的仔细分析与思考,把以上各模块根据其功能和设计思路设计出总的系统原理图如图3.13所示:图3.13 系统综合原理图对整个系统进行硬件测试的引脚设定锁定如图3.14所示,测试时采用的是GW48-EDA系统的电路模式6.图3.14 引脚锁定图四程序设计(1)数控分频器的程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT( DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK: IN STD_LOGIC;FOUT:OUT STD_LOGIC);END DVF;ARCHITECTURE behav of DVF ISSIGNAL FULL: STD_LOGIC;BEGINP_REG: PROCESS(CLK)VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8="11111111" THENCNT8:=DIN;FULL<='1';ELSE CNT8:=CNT8+1;FULL<='0';END IF;END IF;END PROCESS P_REG;P_DIV:PROCESS(FULL)VARIABLE CNT2:STD_LOGIC;BEGINIF FULL'EVENT AND FULL='1' THENCNT2:=NOT CNT2;IF CNT2='1' THEN FOUT<='1'; ELSE FOUT<='0'; END IF;END IF;END PROCESS P_DIV;END behav;(2)地址发生器的程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT6B ISPORT (CLK,RST,EN : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END CNT6B;ARCHITECTURE behav OF CNT6B ISSIGNAL CQI : STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINPROCESS(CLK, RST, EN)BEGINIF RST = '1' THEN CQI <= (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN CQI <= CQI + 1;END IF;END IF;END PROCESS;DOUT<=CQI;END behav;(3)四选一选择器的程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUL41 ISPORT(A,B,C,D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);S1,S0:IN STD_LOGIC;Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ENTITY MUL41;ARCHITECTURE ONE OF MUL41 ISSIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINS<= S1 & S0;WITH S SELECTY<= A WHEN "00" ,B WHEN "01" ,C WHEN "10" ,D WHEN "11" ,"ZZZZZZZZ" WHEN OTHERS;END;(4)其余各波形数据存储ROM的设计可以利用MegaWizard Plug-In Manager定制信号数据ROM宏功能块,并将其相应的波形数据加载与定制的ROM中。
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课程设计任务书-基于DDS的数字移相信号发生器
基于DDS的数字移相信号发生器一、课程设计目的1、进一步熟悉QuartusⅡ的软件使用方法;2、熟悉利用VHDL设计数字系统并学习LPM ROM的使用方法;3、学习FPGA硬件资源的使用和控制方法;4、掌握DDS基本原理,学习利用此原理进行信号发生器的设计。
二、设计任务1、完成8位输出数据宽度的频率可调的移相正弦信号发生器。
2、完成8位输出数据宽度的频率可调的移相三角波、方波信号发生器。
3、以上三种波形使用一个按键依次切换。
4、波形发生器实现幅度可调。
5、信号发生器的原始数据存储在外部存储器里,由FPGA进行读取,经过D/A转换输出,由示波器观察最终结果。
6、完成两路相位相差90度的频率幅度可调的移相信号发生器。
结果通过嵌入式分析仪观察两路正交信号。
(包括正弦波、方波、三角波)注意:以上前5点为基本要求,第6点为提高要求。
三、基本原理直接数字频率合成器(DDS)是通信系统中常用到的部件,利用DDS可以制成很有用的信号源。
与模拟式的频率锁相环PLL相比,它有许多优点,突出为(1)频率的切换迅速;(2)频率稳定度高。
一个直接数字频率合成器由相位累加器、波形ROM、D/A转换器和低通滤波器构成。
DDS的原理框图如下所示:图1 直接数字频率合成器原理图其中K为频率控制字,f c为时钟频率,N为相位累加器的字长,D为ROM 数据位及D/A转换器的字长。
相位累加器在时钟f c的控制下以步长K作为累加,输出N位二进制码作为波形ROM的地址,对波形ROM进行寻址,波形ROM 输出的幅码S(n)经D/A转换器变成梯形波S(t),再经低通滤波器平滑后就可以得到合成的信号波形了。
合成的信号波形形状取决于波形ROM中存放的幅码,因此用DDS可以产生任意波形。
本设计中直接利用D/A转换器得到输出波形,省略了低通滤波器这一环节。
1、频率预置与调节电路不变量K被称为相位增量,也叫频率控制字。
DDS方程为:f0= f c K/2n,f0为输出频率,f c为时钟频率。
eda课程设计 信号发生器
目录1. 引言 (1)2. VHDL语言及Quartus II软件介绍 (2)2.1 VHDL语言 (2)2.2 Quartus II软件 (2)3.总体设计思想及流程 (3)4. 具体程序实现模块 (4)4.1倍频器模块 (4)4.2主程序模块 (4)4.3 波形显示模块 (5)4.4频率显示模块 (5)5. 软件仿真 (6)6. 硬件显示 (7)7. 总结与体会 (8)参考文献 (9)附录 (10)附录1. 整体系统原理图 (10)附录2. 主程序 (11)1. 引言信号发生器是一种能够产生多种波形,如三角波、方波、锯齿波、正弦波的仪器。
信号发生器在电路实验和设备检测以及通信、雷达、导航、宇航等领域有广泛的应用。
正因为其在生活中应用的重要性,人们它做了大量的研究,总结出了许多实现方式。
可以基于FPGA 、VHDL、单片机、DOS技能、数字电路等多种方法实现。
简易信号发生器是信号发生器的一种。
可以实现信号发生器的一些基本功能。
本次课程设计要求设计的是一种简易信号发生器。
在本设计中要求设计的简易信号发生器是采用VHDL来实现的简易多功能信号发生器。
它能产生正弦波,三角波和方波。
且对各种波形的要求如下:(1)设计任意信号发生器,使之能够生成正弦波、三角波和方波;(2)电路的外部频率为40MHz,要求信号发生器可产生0-1KHz、1KHz~10KHz、10KHz~1MHz三档频率的信号;(3)要求具有波形选择和频率选择的功能;(4)在同一频率档内,可实现频率的加减;(5)要求显示波形的同时能够进行频率的调节;(6)要求能够显示波形:A——正弦波;B——三角波;C——方波;(7)要求能够显示频率值;(8)可用示波器进行波形的观测。
2. VHDL语言及Quartus II软件介绍2.1 VHDL语言本次设计使用的是VHDL语言。
VHDL 的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982 年。
eda课程设计dds发生器设计
eda课程设计dds发生器设计一、课程目标知识目标:1. 学生能够理解DDS(Direct Digital Synthesis)发生器的工作原理,掌握其基本组成和功能。
2. 学生能够运用EDA工具进行DDS发生器的电路设计与仿真,并了解其在实际应用中的限制和改进方法。
3. 学生能够掌握DDS发生器中相位累加器、正弦查找表等关键部分的原理和设计要点。
技能目标:1. 学生能够运用所学知识,独立完成DDS发生器的电路设计和仿真,提高解决实际工程问题的能力。
2. 学生能够通过小组合作,进行EDA工具的操作和电路调试,培养团队协作和沟通技巧。
情感态度价值观目标:1. 学生在学习过程中,培养对电子设计自动化(EDA)技术的兴趣,激发探索精神和创新意识。
2. 学生通过DDS发生器设计实践,认识到电子技术在社会发展中的重要作用,增强社会责任感和使命感。
3. 学生在团队合作中,学会尊重他人,提高自我管理和组织协调能力。
课程性质:本课程为电子技术实践课程,以DDS发生器设计为主题,结合EDA工具进行电路设计与仿真。
学生特点:学生具备一定的电子技术基础知识,对EDA工具有一定了解,具有较强的动手能力和学习兴趣。
教学要求:教师需注重理论与实践相结合,引导学生通过实际操作,掌握DDS 发生器的设计方法,培养解决实际问题的能力。
同时,关注学生的情感态度价值观培养,提高综合素质。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。
二、教学内容1. DDS发生器原理介绍:包括DDS发生器的基本工作原理、组成结构及其在信号发生领域的应用优势。
- 相关教材章节:第三章“数字信号发生器”第1节“DDS发生器概述”2. EDA工具使用:以Cadence、Protel等EDA软件为例,介绍DDS发生器设计的基本操作和仿真方法。
- 相关教材章节:第四章“电子设计自动化工具”第2节“电路设计与仿真”3. DDS发生器关键部分设计:- 相位累加器设计原理与实现- 正弦查找表设计与优化- DAC转换器与模拟滤波器设计- 相关教材章节:第三章“数字信号发生器”第2节“DDS发生器的关键部分设计”4. 实践操作与电路调试:指导学生进行DDS发生器电路设计、仿真及硬件测试。
EDA课程设计信号发生器
问题能力
能运用所学知识和技能去发现和解决实际问题;能正确处理实验数据;能对课题进行理论分析,得出有价值的结论。
0.2
工作量、
工作态度
按期圆满完成规定任务,工作量饱满,难度较大,工作努力,遵守纪律;工作作风严谨务实。
EDA课程设计-信号发生器与数字钟设计
实用文档EDA综合设计报告题目:信号发生器与数字钟设计学院:电气信息学院专业:通信工程姓名:学号:指导老师:汪敏第一部分:信号发生器一、设计任务要求设计一个多功能信号发生器,根据输入信号的选择可以输出递增锯齿波,递减锯齿波,三角波,阶梯波,方波和正弦波六种信号,并能实现频率选择和幅度调节,信号发生器的控制模块可以用数据选择器实现,六种信号的选择可以用6选1数据选择器实现。
二、方案设计(一)设计思路1.利用VHDL语言,设计分频器,实现2分频,4分频,8分频及16分频,实现频率选择功能,生成模块。
与利用数据选择器原理设计的频率选择器模块相连,实现频率选择输出。
2.利用VHDL语言,分别实现六种信号(递增/递减锯齿波,三角波,阶梯波,方波和正弦波)的输出,生成模块。
3.将设计的各功能模块按要求连接,分配引脚接口,连接实验箱,进行硬件测试,验证实现功能。
(二)程序流程(三)设计软件Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性。
三、硬件设计(一)分频器分频器的功能是:利用对时钟上升沿计数,从而实现可以输出二分频,四分频,八分频及十六分频模块,分频器模块是为了实现信号发生器的频率选择功能。
EDA课程设计_DDS信号发生器
电子课程设计------DDS信号发生器合成器学院:专业班级::学号:指导老师:2012年12月直接数字频率合成器(DDS)一、设计任务与要求直接数字频率综合技术,即DDS技术,是一种新型的频率合成技术和信号产生方法。
利用EDA技术和FPGA实现直接数字频率合成器DDS的设计。
设计要求:1、利用QuartusII软件实验箱实现DDS的设计;2、通过实验箱上的开关输入DDS的频率和相位控制字,并能用示波器观察加以验证;3、系统具有清零和使能的功能;4、DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA芯片中的ROM实现。
二、总体框图图1 DDS总体框图1、模块的功能(1)频率预置和调节电路不变量K称作相位增量,也叫频率控制字。
此模块实现频率控制量的输入。
(2)相位累加器相位累加器是一个带有累加功能的N位加法器,它以设定的N位频率控制字K作为步长进行线性累加,当其和满时,计数器清零,并进行重新运算,它使输出频率正比于时钟频率和相位增量之积。
(3)相位寄存器相位寄存器是一个N位的寄存器,它对输入端输入的数据进行寄存,当下一个时钟到来时,输出寄存的数据。
图2 相位累加器相位累加器的组成=N位加法器+N位寄存器相位累加器的作用:在时钟的作用下,进行相位累加注意:当相位累加器累加满量时就会产生一次溢出,完成一个周期的动作。
(4)正弦查找表正弦查找表ROM是DDS最关键的部分,也是最复杂的部分,设计时首先需对正弦函数进行离散采样,接着将采样的结果放到ROM模块的对应存储单元中,每一位地址对应一个数值,输出为8位。
ROM中必须包含完整的正弦采样值,此设计采样256点,而且还要注意避免在按地址读取ROM容时可能引起的不连续点,避免量化噪音集中于基频的谐波上。
作用:进行波形的相位----幅值转换原理:ROM的N位地址把0° 360°的正弦角度离散成具有2N个样值的序列ROM的D位数据位则2N个样值的幅值量化为D位二进制数据(5) D/A转换器D/A转换器的作用:把已经合成的正弦波的数字量转换成模拟量。
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)。
课程设计报告2010 ~ 2011 学年第一学期设计题目:基于FPGA可调信号发生器学院:专业:课程名称: EDA原理与应用学生姓名:时间: 2011年1月指导教师:目录一、系统总体设计---------------------------------------------------------------------2二、系统功能模块设计---------------------------------------------------------------21、矩阵键盘模块------------------------------------------------------------32、频率显示模块-----------------------------------------------------------113、波形数据ROM初始化数据文件设计--------------------------------134、频率、幅度改变模块--------------------------------------------------145、DA转化模块-----------------------------------------------------------186、示波器检测-------------------------------------------------------------18三、结束语---------------------------------------------------------------------------191、矩阵键盘模块:矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键,这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高系统中I/O口的利用率。
键盘电路如下图所示。
矩阵键盘模块通过设计一个状态机,对键盘进行扫描,每10ms扫描一次,行输入信号{KEYI1,KEYI2,KEYI3,KEYI4}={1110,1101,1011,0111},之后检测KEYO,如有按键按下,则列扫描会检测到低电平,并结合行输入信号,可以判断哪个按键按下。
否则,没有按下按键。
其程序如下:1)分频:timescale 1 ns / 1 psmodule scan_clk ( clkout ,clk ,rst );input rst ;//复位键input clk ;//系统频率wire clk ;output clkout ;reg clkout_r ;parameter period= 200000;reg [31:0] cnt;/*分频进程*//****************************************************************************/ always @( posedge clk or negedge rst) //分频50Hzbeginif ( !rst )begincnt <= {31{1'b0}} ;clkout_r <= 0 ;endelse begincnt<= cnt+1;if (cnt == (period >> 1) - 1) //设定周期时间的一半clkout_r <= #1 1'b1;else if (cnt == period - 1) //设定的周期时间beginclkout_r <= #1 1'b0;cnt <= #1 'b0;endendend/****************************************************************************/ assign clkout = clkout_r ;endmodule2)设定状态机,进行键盘扫描:`timescale 1 ns / 1 psmodule key_scan ( clk ,keydrv ,rst );input clk ;input rst ;wire clk ;output [3:0] keydrv ;wire [3:0] keydrv ;parameter s1 = 4'b1110;parameter s2 = 4'b1101;parameter s3 = 4'b1011;parameter s4 = 4'b0111;reg [3:0]current_state;reg [3:0]next_state;/*行输入信号改变进程*//****************************************************************************/ always @ ( posedge clk or negedge rst )beginif ( !rst )current_state <= s1 ;else current_state <= next_state ;endalways @ ( current_state )begincase ( current_state )//设定4个状态,为行输入信号s1: next_state <=s2;s2: next_state <=s3;s3: next_state <=s4;s4: next_state <=s1;default: next_state <=s1;endcaseend/****************************************************************************/assign keydrv = current_state ;endmodule3)读取键盘值:`timescale 1 ns / 1 psmodule jianpan (in, KEYO ,KEYI ,clk ,Y ,LED_DOWN , rst,dig,data_2);input [3:0] KEYO ; //与原理图一致,是键盘输出端口给FPGA input clk ;input rst ;input in;output [3:0] KEYI ; //与原理图一致,是FPGA输出给键盘output [7:0] LED_DOWN;//LED灯,用于显示按键扫描值output [7:0] Y ;//数码管显示output [7:0] dig;//数码管位选output [31:0] data_2;//矩阵键盘的按键值wire keypress;wire scanclk;reg [7:0] temp ;wire keypress_asy ;wire [3:0] keydrv ;wire press;reg q1, q2, q3, q4, q5, q6;reg [7:0] dig_r;reg temp_press;reg [7:0] temp_r ;reg [7:0] Y_r;reg [3:0] keyvalue ;reg [3:0] keyvalue_r ;reg [7:0] led_r;reg [7:0] LED_DOWN;reg [3:0] scankey_o;reg [3:0] scankey_i;reg [31:0] data;wire [31:0] data_2;wire dis;reg [31:0]data_3;assign dis = &KEYO ;//当有按键按下时,dis为低电平scan_clk key_clk(.clk ( clk),.clkout ( scanclk) ,.rst ( rst )); //调用分频模块key_scan key_scan(.clk ( scanclk ) ,.keydrv (keydrv) ,.rst ( rst ));//调用键盘扫描模块reg dis_pre;reg anjian;reg [7:0] temp_p;reg clkout_2;reg [31:0] cnt_2;parameter period_2=50000;assign data_2=50000000/(64*data_3);/*分频进程*//****************************************************************************/always @( posedge clk or negedge rst) //分频50Hzbeginif (!rst)cnt_2 <= 0 ;else begincnt_2<= cnt_2+1'b1;if (cnt_2== (period_2 >> 1) - 1) //设定周期时间的一半clkout_2 <=1'b1;else if (cnt_2 == period_2 - 1) //设定的周期时间beginclkout_2 <=1'b0;cnt_2<='b0;endendend/****************************************************************************//*检测按键进程*//****************************************************************************/always @ ( posedge clk or negedge rst ) begin//检测是否有按下键if ( rst==1'b0 ) beginscankey_o <= 4'b0 ;scankey_i <= 4'b0 ;dis_pre <= dis;end else if ( clk ==1'b1 ) begindis_pre <= dis;if ( (dis == 1'b0)&&(dis_pre==1'b1) ) begin//按键刚按下时运行scankey_o <= keydrv ;scankey_i <= KEYO ;endendend/****************************************************************************/ assign KEYI = keydrv;always @(posedge clkout_2)//实时改变temp值,以改变temp的值begintemp={scankey_o,KEYO};end/*译码输出进程*//****************************************************************************/always @( temp or rst ) beginif ( rst==1'b0 ) begin //译码输出keyvalue <= 4'b0;temp_press <= 1'b0 ;end elsecase ( temp )8'b1110_1110 : beginkeyvalue <= 4'h7;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1110_1101 : beginkeyvalue <= 4'h8;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1110_1011 : beginkeyvalue <= 4'h9;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1101_1110 : beginkeyvalue <= 4'h4;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1101_1101 : beginkeyvalue <= 4'h5;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1101_1011 : beginkeyvalue <= 4'h6;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1011_1110 : beginkeyvalue <= 4'h1;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1011_1101 : beginkeyvalue <= 4'h2;temp_press <= 1'b1 ;led_r <= temp_r;end8'b1011_1011 : beginkeyvalue <= 4'h3;temp_press <= 1'b1 ;led_r <= temp_r;end8'b0111_1101 : beginkeyvalue <= 4'h0;temp_press <= 1'b1 ;led_r <= temp_r;enddefault : begintemp_press <= 1'b0;endendcaseend/****************************************************************************//*延时进程*//****************************************************************************/always @ ( posedge scanclk or negedge rst ) begin //利用10ms的周期脉冲延时if ( rst==1'b0 ) beginq1 <= 1'b0;q2 <= 1'b0;q3 <= 1'b0;q4 <= 1'b0;end else beginq1 <= temp_press;q2 <= q1;q3 <= q2;q4 <= q3;endend/****************************************************************************/assign keypress_asy = q1 | q2 | q3 | q4 ; //当有按键按下时,只是保持40ms的高电平,从而实现消抖always @ ( posedge clk or negedge rst ) begin //同步keypress_asy信号if ( rst==1'b0 ) beginq5 <= 1'b0;q6 <= 1'b0;end else beginq5 <= keypress_asy;q6 <= q5 ;endendassign keypress = q5 & (~q6);/*数码管显示,矩阵键盘数值储存进程*//****************************************************************************/ always@(posedge clk or negedge rst) beginendendendreg [2:0] scan_cnt;always@(posedge clkout_1 or negedge rst)begin if(rst==1'b0) scan_cnt<=0;else scan_cnt<=scan_cnt+1'b1;endassign Y =~Y_r;assign dig=dig_r;reg [3:0] xianshi;always @(scan_cnt)begin//数码管动态扫描case(scan_cnt)3'b000:begindig_r<=8'b1111_1110;xianshi<=data[3:0];end3'b001:begindig_r<=8'b1111_1101;xianshi<=data[7:4];end3'b010:begindig_r<=8'b1111_1011;xianshi<=data[11:8];end3'b011:begindig_r<=8'b1111_0111;xianshi<=data[15:12];end3'b100:begindig_r<=8'b1110_1111;xianshi<=data[19:16];end3'b101:begindig_r<=8'b1101_1111;xianshi<=data[23:20];end3'b110:begindig_r<=8'b1011_1111;xianshi<=data[27:24];end3'b111:begindig_r<=8'b0111_1111;xianshi<=data[31:28];endendcaseendalways@(xianshi) begin//将BCD码转换为数码管显示码case (xianshi)4'h0: Y_r = 8'b0011_1111; // 04'h1: Y_r = 8'b0000_0110; // 14'h2: Y_r = 8'b0101_1011; // 24'h3: Y_r = 8'b0100_1111; // 34'h4: Y_r = 8'b0110_0110; // 44'h5: Y_r = 8'b0110_1101; // 54'h6: Y_r = 8'b0111_1101; // 64'h7: Y_r = 8'b00100111; // 74'h8: Y_r = 8'b0111_1111; // 84'h9: Y_r = 8'b0110_1111; // 9default: Y_r = 8'b0000_0000;endcaseendendmodule3波形数据ROM初始化数据文件设计初始化数据文件格式有2种:Memory Initialization FiIe(.mif)格式文件和Hexadecimal(Intel-Format)File(.hex)格式文件。