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课程设计(信号发生器)

课程设计报告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课程信号发生器课程设计

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课程报告-正弦波信号发生器的设计

《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 正弦信号发生器结构框图图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课程设计——基于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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录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 年。
1987 年底,VHDL被IEEE 和美国国防部确认为标准硬件描述语言。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
VHDL语言的特点是:VHDL 语言功能强大,设计方式多样;VHDL 语言具有强大的硬件描述能力;VHDL 语言具有很强的移植能力;VHDL 语言的设计描述与器件无关;VHDL 语言程序易于共享和复用。
2.2 Quartus II软件本设计中需要用到Quartus II 9.0软件。
Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
3.总体设计思想及流程本次课程设计按模块式实现,据任务书要求,设计总共分三大步骤完成:(1)产生波形(三种波形:方波、三角波、正弦波)信号;(2)频率控制;(3)显示频率值。
利用VHDL编程,依据基本数字电路模块原理进行整合。
系统各部分所需工作时钟信号由输入系统时钟信号经分频得到,系统时钟输入端应满足输入脉冲信号的要求。
频率控制模块可以实现频率的连续可调,最终送至脉冲发生模块输出脉冲信号,同时将信号的频率输出至数码管显示当前信号的频率值,达到设计课题所要求的输出波形频率可调功能。
如图2.1所示:图3.1总体程序流程图4. 具体程序实现模块4.1倍频器模块由于要求简易信号发生器输出频率达到1MHZ,所以实验箱上的20MHZ的输出过低,无法达到要求。
此时可以采用一个倍频器将20MHZ的频率输出加倍成为128MHZ的频率输出。
具体可以通过Quartus II 9.0软件的ALTPLL模块实现。
原理图如图4.1所示:图 4.1倍频器模块原理图4.2主程序模块主程序用来实现系统的主要功能,包括波形定义分频、频段选择、频率调节以及频率输出等。
主程序见附录1。
主程序原理图如图4.2所示:图 4.2主程序模块原理图其中clk信号为20MHZ的信号经过加倍后的128MHZ的频率。
Key1、key2为频率调节按钮,key1接按钮,当按动key1频率值加1或者减1;key2接拨码开关,用来加减选择,当key2=1时为加,当key2=0时为减。
sel_p[1..0]为频段选择信号,当sel_p[1..0]=00、01、10时,其频段分别为0HZ-1KHZ、1KHZ-10KHZ、10KHZ-1MHZ。
sel_b[1..0]为波形选择信号,当sel_b[1..0]=00、01、10时,波形分别为正弦波、三角波、方波。
4.3 波形显示模块波形显示部分使用的是D/A转换器,将主程序模块的dout[7..0]八位二进制输出转化为模拟信号,通过示波器显示。
4.4频率显示模块频率显示部分使用了一个二进制——十六进制转化显示译码器,将主程序中输出的xianshi[19..0]这20位二进制段码输出转化为十六进制数显示在数码管上。
5. 软件仿真由于程序中计数值test比较大,无法在Quartus II 9.0软件中显示完整,所以我们将程序中的test值改为1,这样可以得到完整的仿真图,而且不改变程序原理。
其中第一频段的初值设置为300HZ,第二频段的初值设置为3000HZ,第三频段的初值设置为30000HZ。
图 5.1第一频段下的正弦波仿真图图5.2 第二频段下的三角波仿真图图5.3第三频段下的方波仿真图6. 硬件显示本课程设计输出由DA0832将数字信号转化为模拟信号,再由示波器显示波形输出。
当引脚锁定完毕后,将程序下载到试验箱中,连好示波器,在输入端输入相应的值即可得到相应的输出波形。
具体的硬件仿真波形如下:正弦波: 频段sel_p[1,0] 频率为6KHZ三角波: 频段sel_p[0,1] 频率为5KHZ 方波: 频段sel_p[0,0] 频率为800HZ本次仿真采64个点所以有的波形不是很光滑,若需要更平滑的波形,可以增加采样点数;而且当频率较高时各种波形会出现失真,示波器上不显示稳定的波形;在硬件运行时产生的干扰,也会导致波形的混乱。
图6.1正弦波硬件仿真结果图6.2三角波硬件仿真结果图6.3方波硬件仿真结果7. 总结与体会近一周的EDA技术课程设计就要结束了,通过这次课程设计,我学到的最重要的东西就是对于这种任务量比较大的程序,一定要认真理解题目的要求。
开始的时候有的要求理解不够透彻,结果导致不能达到老师的要求。
想要修改程序却又根本无从下手,最后还是重新写。
另外还要学会对系统进行分块化处理。
分块思想应在以后其它类似的设计中着重注意应用。
这次EDA技术的课程设计,运用了许多EDA技术的知识,通过这次设计,不仅对以前学过的许多理论知识进行了很全面的检验,明白了许多知识的具体应用,而且还学会了许多新知识。
对EDA技术理解又有了一次提升。
从本次课设中我还学到了工作中要大胆尝试,小心求证。
一旦自己有了一种新的想法一定要非常小心的去检验,发现错误,改正错误,最终达到自己想要的结果。
还有就是在课设中我再一次体会到了团队合作的重要性,因为很多东西的工程量都是很大的,运用到知识很多,单靠个人力量要实现是很困难的,而且时间有限,这就要求我们必须学会具有团队精神,相互学习,因为很多困扰你的问题在讨论中便会迎刃而解。
总之,通过这次EDA技术的课程设计,我自己学会了很多东西,真的是受益匪浅。
我相信通过这次课程设计,我学到的东西绝对不是只在课本上能学到的,有很多东西,尤其是实践性质的,不能仅靠理论,实践是非常必要的,理论与实践相结合,才能得到真正的提高。
这次中遇到了前所未有的问题,但总是会“山重水复疑无路,柳暗花明又一村”。
在就要完成这次设计并通过设计答辩之后,心情万分激动,我深深体会到付出总会有回报。
参考文献[1] 潘松,黄继业.《EDA技术实用教程》.北京:科学出版社,2010.6[2] 刘江海.《EDA技术课程设计》.武汉:华中科技大学出版社,2009.5[3] 姜雪松.《VHDL设计实例与仿真》.北京:机械工业出版社,2007.1[4] 陈耀和.《VHDL语言设计技术》.北京:电子工业出版社,2004.3[5] 谭会生, 张昌凡.《EDA技术及应用》.西安:西安电子科技大学出版社2004.4[6] V olnei A. pedroni 著, 乔庐峰,王志功等译.《VHDL数字电路设计教程》.北京:电子工业出版社2005.9附录附录1. 整体系统原理图附录2. 主程序library ieee;use ieee.std_logic_1164.all;entity generator isport(clk:in std_logic;key1:in std_logic;key2:in std_logic;sel_p:in std_logic_vector(1 downto 0);--频段选择sel_b:in std_logic_vector(1 downto 0); --波形选择dout:out integer range 0 to 255; --波形数字量接dac0832示波器显示xianshi:out integer range 0 to 1000000);--频率值end;architecture bhv of generator issignal num: integer range 0 to 1000000 := 3000;signal test:integer range 0 to 1000000;signal b:std_logic;signal addr:integer range 0 to 63;--采样点选择type hui is array(0 to 63)of integer range 0 to 255;constant sina:hui:=( 255,254,252,249,245,239,233,225,217,207,197,186,174,162,150,137,124,112,99,87,75,64,53,43,34,26,19,13,8,4,1,0,0,1,4,8,13,19,26,34,43,53,64,75,87,99,112,124,137,150,162,174,186,197,207,217,225,233,239,245,249,252,254,255);constant sanjiao:hui:=(0,8,16,24,32,40,48,56, 64,72,80,88,96,104,112,120, 128,136,144,152,160,168,176,184, 192,200,208,216,224,232,240,248, 255,248,240,232,224,216,208,200, 192,184,176,168,160,152,144,136, 128,120,112,104,96,88,80,72, 64,56,48,40,32,24,16,8);constant fangbo:hui:=(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); beginprocess(clk)variable count:integer range 0 to 1000000;beginif (clk'event and clk='1') then count:=count + 1;if (count=test) then count:=0;b<= not b;end if;end if;--频率加减控制键--end process;process(key1,key2)beginif (key1'event and key1='1') thenif(key2='1')thennum <= num +1;elsif(key2='0') thennum <= num - 1;end if;end if;end process;--频段选择—process(num,sel_p)variable temp:integer range 0 to 1000000;begintemp:=num;case sel_p iswhen "00" =>if(temp>1000 and temp <=10000)thentemp := temp/10;elsif(temp>100000 and temp <= 1000000)then temp:= temp/1000;end if;if(temp>1000)then temp:=1000;elsif(temp<1)then temp := 1;end if;xianshi <= temp;test <= 128000000/64/2/temp;when "01"=>if(temp>0 and temp <99)thentemp := temp*1000;elsif(temp>=100 and temp<999)thentemp := temp*10;elsif(temp>10000 and temp <=99999)then temp := temp/10;elsif(temp=1000000)thentemp := temp/100;end if;if(temp>10000)then temp:=10000;elsif(temp<1000)then temp := 1000;end if;xianshi <= temp;test <= 128000000/64/2/temp;when "10" => --10000 1000000--if(temp>0 and temp<=99)thentemp := temp*10000;elsif(temp>=100 and temp<=10000)then temp := temp*100;end if;if(temp>1000000)then temp := 1000000;elsif(temp<10000)then temp := 10000;end if;xianshi <= temp;test <= 128000000/64/2/temp;when others=>null;end case;end process;process(b)variable count:integer range 0 to 63;beginif(b'event and b='1')thencount:=count+1;if count=64 thencount:=0;end if;end if;addr<=count;end process;--波形选择—process (b,sel_b,addr)begincase sel_b iswhen "00" =>dout<=sina(addr); when "01" =>dout<=sanjiao(addr); when "10" =>dout<=fangbo(addr); when others =>null;end case;end process;end bhv;。