ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:3.58MB ,
资源ID:3274900      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3274900.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(EDA课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

EDA课程设计.docx

1、EDA课程设计一、设计目的.2二、设计要求.2三、设计总体方案要求.21、设计的总体原理22、设计内容.2四、EDA设计与仿真.21、时基发生模块32、频率细调模块43、波形发生模块94、方波产生模块.105、正弦波发生模块.126、三角发生模块.167、上锯齿波发生模块.178、下锯齿波发生模块.189、梯形波发生模块.2010、波形选择模块2111、频率显示模块23五、硬件实现281、硬件实现步骤.282、硬件实现结果.29六、设计总结39七、参考文献.39八、设计生成的电路总原理图40一、设计目的(1)、通过本次课程设计,进一步熟悉quartusII软件的使用,掌握EDA技术及CPLD/

2、FPGA的开发流程,掌握自顶向下的设计思想,掌握VHDL语言的编程技巧。(2)、掌握DAC的工作原理。并利用DAC0832芯片实现数/模转换,产生模拟信号(3)、并利用EDA技术产生常见的基本波形波形;二、设计要求(1)、熟悉DAC的工作原理,利用DAC0832产生正弦波、方波、三角波、锯齿波、梯形波等波形。(2)、通过按键控制波形发生信号的频率来控制波形的周期时间,通过档位选择来满足不同场合的需要。(3)、通过频率细调实现频率的进一步接近所需要的频率指标。并通过数码管显示出输出频率的四位有效值。(4)、能把设计文件下载到实验箱,并用示波器观察各波形。三、总体设计方案要求 1、设计总体原理 实

3、现多功能波形发生器,从总体功能模块上划分应该有四部分组成,分别由:目标频率产生模块、频率调节模块、显示模块及波形产生模块。通过各功能模块的的功能管脚的相互连接,即可形成所需要的多功能信号发生器。其结构框图如图3-1所示。 图3-1 总体设计框图2、设计内容电子时钟主要模块有四个,它包括时基发生电路(脉冲信号产生模块)、频率调节模块(即分频模块)、数字显示模块、波形发生模块、复位模块等。将总体电路模块化,根据自顶向下设计思想,先将各个模块先用EDA技术中的VHDL语言编程仿真,再生成各个小模块的模拟框图元件,再根据所需要的功能将其在原理图中相连接,生成具有一定功能的子功能模块。然后根据总体设计思

4、路,将各子功能模块连接起来实现总设计电路,最后经过仿真和硬件调试即可实现总体功能。四、EDA设计及仿真(各个模块设计程序、原理框图及仿真波形图)1.时基发生电路总体设计方法是原理图与程序相结合的方法实现,原理图如4-1所示。 图4-1 时基发生电路该电路的主要功能为:给待发生的功能模块提供两种不同的时钟,该实际发生电路提供两种档位的时钟脉冲,由锁相环产生高频率的稳定时钟,一方面为后续波形的产生提供可变的定时脉冲;另一方面为频率显示模块提供基准频率。图中原理图2选1模块的程序为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic

5、_unsigned.all;entity muxto21 is port(sel :in std_logic;-选择信号sel d1,d2:in std_logic;-3路输入信号 q: out std_logic); -输出信号end muxto21;architecture muxto21 of muxto21 isbegin q=d1 when sel=0 else -选择信号sel=001,选择第1路信号输出 d2; -选择信号sel=010,选择第2路信号输出end muxto21;其仿真波形图4-2所示:图4-2 时基发生电路仿真波形图编译后生成的实际发生电路模块如图4-3所示:

6、图 4-3时基发生电路模块图中分频模块为500分频电路,主要是降低时钟频率,产生低频率的信号波形,具体实现程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div1000 isport(clk:in std_logic; clkout: out std_logic); -输出信号end; architecture div1000 of div1000 issignal cout:std_logic;begin process(clk) variable temp: integ

7、er range 0 to 499;begin if clkevent and clk=1 then if temp=499 then temp:=0; cout=1; else temp:=temp+1; cout=0; end if; end if; end process; P_DIV: PROCESS(cout) VARIABLE CNT2 : STD_LOGIC; BEGIN IF coutEVENT AND cout = 1 THEN CNT2 := NOT CNT2; -如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 = 1 THEN clkout = 1;

8、ELSE clkout= 0; END IF; END IF;END PROCESS P_DIV ; end div1000;其仿真波形如图4-4所示:图4-4 分频模块仿真图编译后生成的分频电路模块如图4-5所示:图4-5 分频模块原理图2.频率调节模块 频率调节主要对时基发生电路产生的两种时钟频率进行二次分频,该分频电路能够将上述两种频率进行0999内进行任意值得分频,从而得到不同的频率值。以满足在不同的场合下的频率需求。频率调节模块如图4-6所示: 图4-6 频率调节电路分频数值设置电路主要实现的功能是:对所需要的分频数值进行设置,该电路有四个按键进行控制,其中一个按键是对其他三个按键加

9、减功能控制,当该按键为高电平时实现减数功能,当为低电平时实现加数功能。而且其他三个键d1、d2、d3分别控制分频数的个位、十位、百位。图中的分频数值设置电路程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport(d1,d2,d3,jj:in std_logic; -个位、十位、百位分频设置按键 rst:in std_logic; db1: out std_logic_vector(3 downto

10、 0); -个位分频显示端口 db2: out std_logic_vector(3 downto 0); -十位分频显示端口 db3: out std_logic_vector(3 downto 0); -百位分频显示端口 db: out std_logic_vector(6 downto 0); -分频输出端end;architecture one of fenpin issignal jia : std_logic;signal int1,int2,int3: integer;signal temp1,temp2,temp3: std_logic_vector(3 downto 0);b

11、egin p0:process(jj) begin if jj=0 then -低电平时实现加法运算 jia=1; else jia=0; -高电平时实现减法运算end if;end process p0; p1:process(rst,d1) -d1按键的加减控制 begin if rst=1 then -复位信号有效时个位清零 temp1=0000; elsif rising_edge(d1) then if jia=1 then if temp1=1001 then temp1=0000; else temp1=temp1+1; end if; elsif jia=0 then if t

12、emp1=0000 then temp1=1001; else temp1=temp1-1; end if; end if; end if;end process p1; p2:process(rst,d2) -d2按键的加减控制 begin if rst=1 then -复位信号有效时十位清零 temp2=0000; elsif rising_edge(d2) then if jia=1 then if temp2=1001 then temp2=0000; else temp2=temp2+1; end if; elsif jia=0 then if temp2=0000 then tem

13、p2=1001; else temp2=temp2-1; end if; end if; end if; end process p2; p3:process(rst,d3) -d3按键的加减控制 begin if rst=1 then -复位信号有效时百位清零 temp3=0000; elsif rising_edge(d3) then if jia=1 then if temp3=1001 then temp3=0000; else temp3=temp3+1; end if; elsif jia=0 then if temp3=0000 then temp3=1001; else tem

14、p3=temp3-1; end if; end if; end if; end process p3; int1=conv_integer(temp1);-三位数分频显示 int2=conv_integer(temp2); int3=conv_integer(temp3); db1=temp1; db2=temp2; db3=temp3; db=conv_std_logic_vector(int3*100+int2*10+int1),7);-分频频率输出 end ;任意数值分频电路分频电路功能是:对事先设置好的分频数值进行分频。通过记录时钟的上升沿与下降沿的个数,进行不同数值的分频。该程序考虑

15、到时钟分频的两种不同情况,即分频起始位置是在时钟的上升沿还是时钟的下降沿。并对这两种情况分别处理。已达到任意值得分频情况。图中任意数值分频电路程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity foudiv is port( clk :in std_logic; -clk:待分频时钟 db: in std_logic_vector(6 downto 0);-分频数 rst:in std_logic;-复位, fout:out std_logic-频率输出 );end;archi

16、tecture lammy of foudiv is signal up:std_logic;-上升沿计数结束标志位 signal do:std_logic;-下降沿计数结束标志位 signal full:std_logic;-分频频率输出状态位 signal fullup:std_logic;-分频频率翻转标志位 signal fulldo:std_logic;-分频频率翻转标志位 signal du:std_logic_vector(7 downto 0);-上升沿计数器 signal dd:std_logic_vector(7 downto 0);-下降沿计数器beginlammy02:

17、process(clk,rst) variable updata:std_logic_vector(7 downto 0); begin if rst=1 then fullup0);-如果下降沿计数结束,把上升计数沿赋值为全0; end if; updata:=updata+1; if dd+updata=db then updata:=(others=0);fullup=1;up=1;-如果下降沿计数与上升沿计数之和等于分频数,则把上升计数沿赋值为全0,分频频率翻转,上升沿技术结束; else fullup=0;up=0; end if; end if; du=updata; end pr

18、ocess;lammy03:process(clk,rst) variable dodata:std_logic_vector(7 downto 0); begin if rst=1 then fulldo0); end if; dodata:=dodata+1; if du+dodata=db then dodata:=(others=0);fulldo=1;do=1; else fulldo=0;do=0; end if; end if; dd=dodata; end process;lammy04:process(fulldo,fullup) begin full=fulldo or f

19、ullup; end process;lammy05:process(full) variable cnt2:std_logic; begin if fullevent and full=1 then cnt2:=not cnt2; if cnt2=1 then fout=1; else fout=0; end if; end if; end process;end;对该电路模块的功能仿真如图4-7所示: 图 4-7 频率调节电路仿真波形图经过编译后的频率调节电路功能模块如图4-8所示:图 4-8 频率调节模块3.波形发生模块波形发生电路的顶层电路图波形发生顶层电路图主要有方波产生模块、正弦波

20、产生模块、三角波产生模块、上升锯齿波发生模块、下降锯齿波发生模块、梯形波发生模块以及波形选择模块组成。有num键产生的数值通过六选一数据选择模块进行波形选择。该顶层电路图如图4-9所示:图4-9 波形发生顶层电路该波形发生模块的顶层电路所对应的模块图如图4-10所示:图4-10 波形发生模块功能图现对顶层电路的各个功能模块进行详细说明:(1)、计数模块计数模块的主要功能是:通过num按键来进行计数,每按一次计数器的值加一,该计数值与六选一数据选择器的更能选择端相连,通过计数值的不同来选择输出的波形。计数模块的硬件语言如下:library ieee;use ieee.std_logic_1164

21、.all;use ieee.std_logic_arith.all;entity cnt6 isport(num:in std_logic; sel: out std_logic_vector(2 downto 0) );end cnt6;architecture one of cnt6 isbeginprocess(num) variable temp: integer :=1;begin if numevent and num=1 then temp:=temp+1; if temp=7 then temp:=1; end if; end if; sel=conv_std_logic_ve

22、ctor(temp,3);end process;end one;对该电路模块的功能仿真如图4-11所示:图4-11 计数模块仿真波形图对该电路进行编译后生成的计数功能模块如图4-12所示:图4-12 六进制计数模块(2)、方波发生模块 方波发生模块的主要功能是:利用时钟脉冲产生一个等宽度(占空比为50%)的矩形脉冲。该方波由256组数据组成,这256组数据可分为两组前128组数据均为零,后128组数据均为255。在每个时钟周期发送一组数据,那么在256个时钟周期内据产生一个完整的等宽度的方波。方波模块的硬件描述程序语言如下:library ieee;use ieee.std_logic_11

23、64.all;use ieee.std_logic_unsigned.all;entity square_wave is -产生方波模块port(clk,reset:in std_logic; -复位信号reset,时钟信号clk q: out std_logic_vector(7 downto 0); -输出信号q,8位数字信号end square_wave;architecture square_wave of square_wave is signal a: std_logic; begin process(clk,reset) variable temp: std_logic_vect

24、or(7 downto 0):=00000001; begin if reset=1 then a=0; elsif rising_edge(clk) then -复位信号无效,时钟信号有上升沿 if temp=11111111 then -产生8位二进制计数 temp:=00000000; else temp:=temp+1; end if; if temp10000000 then -计数10000000,a=1 a=1; else -否则a=0 a=0; end if; end if;end process;process(clk,a) begin if rising_edge(clk)

25、 then if a=1 then -a=1时输出全1 q=11111111; else q=00000000; -a=0时输出全0 end if; end if; end process;end square_wave; 对该电路模块的功能仿真如图4-13所示:图 4-13 方波模块仿真波形图对该电路进行编译后生成的方波功能模块如图4-14所示:图 4-14方波发生模块 (3)、正弦波发生模块正弦波发生电路中要有两部分组成:地址发生器(64进制计数器)和数据存储器(64字节的ROM)。其模块电路图如下图4-13所示,地址发生器的时钟输入频率f0与每周期的波形点数(在此选择64点),以及D/A

26、输出的频率关系是:f=f0/64图4-15 正弦波发生模块64字节地址发生器的主要功能是:产生64字节的ROM地址,让ROM的存储数据能够按时钟一次输出。计数器输出一个6位二进制数据。 64字节地址发生器硬件程序语言如下:library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity my_exam is -实体名为my_exam port(clk,reset: in std_logic; -复位信号reset,时钟信号clk q: out integer range 0 to 63);-输出信号qend my_

27、exam;architecture my_exam of my_exam is begin process(clk) variable cnt: integer range 0 to 63; begin if (rising_edge(clk) then -时钟信号有上升沿 if reset=1 then -复位信号reset=1有效 cnt:=0; -计数器复位 else cnt:=cnt+1; -计数器工作 end if; end if; q=cnt; -输出当前计数值 end process;end my_exam; 对该电路模块的功能仿真如图4-16所示:图4-16 地址发生模块仿真波形图对该电路进行编译后生成的地址发生器功能模块如图4-17所示:图4-17 地址发生器模块64字节ROM存储模块则有原理图生成向导如(图4-16)生成,其主要功能是数据存储器,在内部存入正弦波数据,其数据如表4-1所示:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1