EDA课程设计正弦信号发生器的设计
- 格式:docx
- 大小:596.43 KB
- 文档页数:12
实验八正弦信号发生器的设计一、实验目的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):反馈电阻端。
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课程实验报告题目:正弦信号发生器的设计院部物理与电子信息工程学院专业名称电子信息科学与技术班级 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技术的正弦信号发生器设计作者:高锐来源:《科技传播》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课程信号发生器课程设计一、课程目标知识目标:1. 学生能理解EDA课程中信号发生器的原理与功能,掌握相关电子元件的工作特性。
2. 学生能够掌握信号发生器的分类、特点及应用场景,了解各类信号发生器的优缺点。
3. 学生能够运用所学知识,分析并设计简单的信号发生器电路。
技能目标:1. 学生能够熟练运用EDA软件进行信号发生器电路的设计、仿真与调试。
2. 学生能够独立完成信号发生器的硬件搭建,并进行基本的性能测试。
3. 学生能够通过实际操作,提高动手实践能力,培养解决实际问题的能力。
情感态度价值观目标:1. 学生能够培养对电子工程的兴趣,激发创新意识,形成主动学习的习惯。
2. 学生能够培养团队协作精神,学会与他人沟通交流,共同解决问题。
3. 学生能够认识到信号发生器在现代社会中的重要作用,增强社会责任感和使命感。
本课程针对高年级学生,在分析课程性质、学生特点和教学要求的基础上,明确以上课程目标。
通过分解目标为具体的学习成果,使学生在掌握专业知识的同时,提高实践操作能力和团队协作能力,培养良好的情感态度价值观。
为后续的教学设计和评估提供明确的方向。
二、教学内容本章节教学内容依据课程目标,紧密结合教材,确保科学性和系统性。
主要内容包括:1. 信号发生器原理与分类:讲解信号发生器的基本原理、功能及分类,重点介绍函数发生器、脉冲发生器等常见类型的工作原理及应用。
2. 电子元件特性分析:分析常用电子元件(如运放、晶体管、二极管等)在信号发生器中的作用,掌握其工作特性。
3. 信号发生器电路设计:根据实际需求,设计不同类型的信号发生器电路,分析电路性能,优化设计方案。
4. EDA软件应用:教授学生如何使用EDA软件进行信号发生器电路的设计、仿真与调试,提高实际操作能力。
5. 硬件搭建与性能测试:指导学生搭建信号发生器硬件电路,进行基本性能测试,分析测试结果,找出问题并解决。
教学内容安排如下:1. 第1周:信号发生器原理与分类,电子元件特性分析。
《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文件的头部说明即可。
简易正弦信号发生器设计
一、实验目的
1.进一步熟悉QuartusII及LPM-RAM宏模块与FPGA硬件资源的使用方法。
二、实验设备
计算机、和软件QuartusII和EDA/SOPC试验箱
三、试验内容
简易正弦信号发生器设计,要求ROM是8位数据线,8位地址线。
四、试验原理
打开QuartusII软件,在连接试验电路之前调入LPM-RAM-DQ宏模块,PLM-COUNER模块和74244芯片,再连接电路图,试验原理设计图如下:
图1-1键入64个正弦信号数据
图1-2简易正弦信号发生器顶层电路设计
五、实验结果
试验结果如下图:
图1-3综合后的RLT图
图1-4仿真波形图3.引脚锁定方案图
图1-5引脚锁定方案图
图1-6编程下载模式图
六、试验小节
一学期匆匆而过,通过大半学期的学习,我们学到了很多处理问题的技巧。
不过我们还要熟记很多单词,大多数的单词我们还不认识,相信通过进一步的学习,我们一定能学好这个软件。
我们也将以浓厚的兴趣和积极的态度去学习。
相信我们一定会有更加长足的进步。
华东交通大学理工学院课程设计报告书所属课程: EDA技术及应用设计题目:正弦函数信号发生器的设计分院:电信分院班级:通信工程 2008级 2班姓名:骆玉春学号: 20080210420224 指导教师:王涛实验地点:实验楼五楼(EDA实验室506)2010 年 6 月 19 日华东交通大学理工学院课程设计任务书专业:08通信工程班级: 2班姓名:骆玉春一、课程设计题目正弦函数信号发生器的设计二、课程设计工作:自 2011 年 6月 16 日起至 2011 年 6 月20 日止。
三、课程设计的内容要求:1、识别各种Quartus II软件中各元件及其图形表示和文字符号。
2、学会如何使用Quartus II。
3、掌握VHDL语言的编程思想和VHDL语言的基本使用规则。
4、熟练掌握正弦函数信号发生器的工作原理,并读懂源程序。
5、按照编译、调试、仿真的正确步骤,并正确进行调试和仿真。
6、学会分析仿真图。
学生签名:2011年 6月 19日课程设计评阅意见评阅人职称2011 年月日目录课程设计评阅意见 (1)目录 (2)第一章设计目的 (3)第二章设计要求 (3)第三章设计内容 (3)第四章设计原理 (3)第五章设计步骤 (4)5.1建立.mif格式文件 (4)5.2建立.hex格式文件 (5)5.3定制LPM_ROM (5)5.4完成顶层设计 (11)第六章课程设计总结 (13)参考文献 (14)第一章设计目的进一步熟悉QuartusII 6.0及其LPM_ROM与FPGA硬件资源的使用方法。
培养动手能力以及谐作能力。
第二章设计要求1、CLK为12MHz。
2、通过DAC0832输出正弦波电压信号,电压范围0~-5V。
3、通过仿真观察波形。
第三章设计内容在Quartus II上完成正弦波信号发生器的设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。
最后在实验系统上实测,包括FPGA中ROM的在系统数据读写测试和仿真测试。
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技术》设计报告设计题目正弦信号发生器的设计院系:信息工程学院专业:通信工程学姓号:名: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、新建一个文件夹。
利用资源管理器,新建一个文件夹,如:E: \SIN_GNT 。
注意,文件夹名不能用中文。
2、输入源程序。
打开QuartusII,选择菜单“ File”→“ New”,在New 窗中的“ Device Design Files”中选择编译文件的语言类型,这里选“ VHDL Files ”。
然后在V H D L文本编译窗中键入如图 4 所示的VHDL 程序。
图4 Quartusii 编辑代码窗口3、文件存盘。
选择“File”→“Save As”,找到已设立的文件夹 e : \SIN_GNT ,存盘文件名应该与实体名一致,即singt.vhd 。
当出现问句“D o you want to create ”时,若选“否”,可按以下的方法进入创建工程流程;若选“是”,则直接进入创建工程流程,创建工程流程如下:3.1 、建立新工程管理窗。
选择菜单“File”→“New Preject Wizard”,即弹出工程设置对话框。
点击此框最上一栏右侧的按钮“”,找到文件夹E: \SIN_GNT ,选中已存盘的文件singt.vhd(一般应该设定顶层设计文件为工程),再点击“打开”,即出现如图 5 所示设置情况。
其中第一行表示工程所在的工作库文件夹;第二行表示此项工程的工程名,此工程名可以取任何其它的名,通常直接用顶层文件的实体名作为工程名,第三行是顶层文件的实体名。
3.2 、将设计文件加入工程中。
然后点击下方的“Next”按钮,在弹出的对话框中点击“File”栏的按钮,将此工程相关的所有VHDL 文件加入进此工程(如果有的话),即得到如图 6 所示的情况。
工程的文件加入的方法有两种:第 1 种是点击右边的“Add All ”按钮,将设定的工程目录中的所有VHD 文件加入到工程文件栏中;第 2 种方法是点击“”按钮,从工程目录中选出相关的VHDL 文件。
图5 为工程文件命名3.3 、选择仿真器和综合器类型。
点击图 6 的“Next”按钮,这时弹出的窗是选择仿真器和综合器类型的,如果都是选默认的“NONE”,表示都选QuartusII 中自带的仿真器和综合器,因此,在此都选默认项“NONE”。
3.4 、选择目标芯片。
再次点击“Next”,选择目标芯片。
首先在“Family”栏选芯片系列,在此选“Cyclone”系列,并在此栏下选“Yes”,即选择一确定目标器件。
再按键“Next ”,选择此系列的具体芯片:EP1T3C144C8(图7),按键“Next”后,弹出工程设置统计窗口,以上列出了此项工程的相关设置情况。
图6 添加工程文件图7 选择器件芯片类型3.5 、结束设置。
最后按键“Finish”,即已设定好此工程(图8),此工程管理窗主要显示工程项目的层次结构。
图8 Quartusii 中EDA 工程文件结构对程序进行编译,以测程序是否有错误,最终生成的原理图图9。
图9 编译仿真后生成的原理图4. 仿真仿真就是对设计项目进行一项全面彻底的测试,以确保设计项目的功能和时序特性,以及最后的硬件器件的功能与原设计相吻合。
仿真操作前必须利用QuartusII 的波形编辑器建立一个矢量波形文件以作仿真激励。
VWF 文件将仿真输入矢量和仿真输出描述成为一波形的图形来实现仿真。
QuartusII 允许对整个设计项目进行仿真测试,也可以对该设计中的任何子模块进行仿真测试。
方法是设定为“Simulation focus”。
仿真设定单元(Simulation Settings)允许设计者指定该模块的仿真类型,仿真覆盖的时序和矢量激励源等。
Time/Vectors仿真参数设定窗允许设定仿真时间区域,以及矢量激励源。
对工程的编译通过后,必须对其功能和时序性质进行仿真测试,以了解设计结果是否满足原设计要求。
步骤如下:4.1 、打开波形编辑器。
选择菜单File 中的New 项,在New 窗中选“Other Files”中的“ Vector Waveform File”,点击OK,即出现空白的波形编辑器。
4.2 、设置仿真时间区域。
为了使仿真时间轴设置在一个合理的时间区域上,在Edit 菜单中选择“End Time”项,在弹出的窗中的“Time”窗中键入50,单位选“us”,即整个仿真域的时间即设定为50 微秒,点击OK,结束设置。
4.3 、存盘波形文件。
选择File 中的“Save as”,将以名为cnt4b.vwf (默认名)的波形文件存入文件夹中。
图10 工程仿真图形4.4 、输入信号节点。
将计数器计的端口信号节点选入此波形编辑器中。
方法是首先选View 菜单中的“Utility Windows ”项的“Node Finder”选项。
其对话框如图3-21 所示,在Filter 框中选Pins : all ,然后点击“List”钮。
于是在下方的“Nodes Found”窗中出现了设计中的singt 工程的所有端口引脚名(如果此对话框中的“List ”不显示,需要重新编译一次,即选Processing→Start Compilation ,然后再重复以上操作过程)。
用鼠标将重要的端口节点CLK 和输出总线信号DOUT 都拖到波形编辑窗,点击波形窗左侧的全屏显示钮,使全屏显示,并点击放大缩小钮后,用鼠标在波形编辑区域右键点击,使仿真坐标处于适当位置。
4.5 、编辑输入波形(输入激励信号)。
点击时钟名CLK ,使之变兰色,再点击左列的时钟设置键,在Clock 窗中设置CLK 的周期为3us;所示的Clock 窗中的“Duty cycle”是占空比,可选50,即50%占空比,再对文件存盘。
4.6 、总线数据格式设置。
如果点击如图3-22 所示的输出信号“ DOUT ”左旁的“+”,则将展开此总线中的所有信号;如果双击此“ +”号左旁的信号标记,将弹出对该信号数据格式设置的对话框。
在该对话框的“ Radix”栏有4。
4.7 、启动仿真器。
所有设置完毕,在菜单Processing项选“Start Simulation”,直到出现“ Simulation was successfu”l 。
在进行完工程仿真后便可以进行硬件仿真,将程序下载到锁定了引脚的芯片上,芯片锁定图如下:图11 引脚锁定图图12 硬件仿真波形5. 链接DA 和波形测试.,. 将FPGA 产生的波形数据介入到DA 转换芯片上,并设置同步脉冲。
然后通过示波器观察,便可看到如图12 和图13 的波形图。
五.总结图13 波形测量 2 图12 波形测量 1.这次EDA 实验设计历时两个星期,学到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
主要可以从以下两个方面进行总结。
第一在专业知识上:EDA 的学习对数字电路有个很高的要求,通过这次编程学习,使我明白了专业基础知识的重要性和有用性。
同时,软件的使用技巧作为一行基本功需要熟练的掌握,只有既有专业知识,又会动手实践才能把知识学好用好。