EDA课程设计-多功能波形信号发生器.doc_第1页
EDA课程设计-多功能波形信号发生器.doc_第2页
EDA课程设计-多功能波形信号发生器.doc_第3页
EDA课程设计-多功能波形信号发生器.doc_第4页
EDA课程设计-多功能波形信号发生器.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录摘要1一、设计要求2三、系统设计思路33.1 波形函数发生装置的选择33.2 波形输入输出控制方式的选择3四、各模块设计及仿真44.1函数发生模块44.1.1 正弦波模块44.1.2 方波模块54.1.3 递增锯齿波模块74.1.4 递减锯齿波模块84.1.5 阶梯波模块94.1.6 三角波模块104.2调控模块124.2.1波形输出控制单元124.2.2波形输入控制单元134.2.3频率控制单元154.2.4幅度控制单元164.3 d/a转换器174.4 总电路19五、 硬件测试205.1编译205.2 引脚的锁定215.3编程下载225.4 硬件验证22六、课程设计心得体会25参考文献26附录27摘要本次设计课题为应用vhdl语言及max+plusii软件提供的原理图输入设计功能,组合电子线路的设计加以完成一个任意波形信号发生器。它具有结构紧凑,性能稳定,设计结构灵活,方便进行多功能组成的特点,经济实用,成本低廉的特点。可产生正弦波、方波、三角波、递增锯齿波、递减锯齿波以及阶梯波,并可使用示波器观察波形。实现了系统信号实时快速测量,也为其广泛应用于实际领域创造了条件。在实现过程中,将整体功能模块化,分为函数发生模块和调控模块。在调控模块中实现了调频调幅以及对于波形的输入输出控制。对于d/a转化器,本实验选择的是tlc7528,利用简单的8进制计数控制cs和wr端口的同步输出,实现数模转换的同时,保持相应位的同步实现。在课程设计中遇到了诸多困难,在用示波器显示波形时,却总是得不到稳定的波形,后来发现在输入控制中,仅需要3位二进制数即能完成简单的8进制计数,自己却习惯性的用了8位,这使得分频现象严重,更改后即得到了了稳定的输出波形,经过反复修改调试,最终试验成功。关键词:智能信号发生器 vhdl max+plusii tlc7528 一、设计要求要求设计一个智能函数发生器,该智能函数发生器能够产生递增锯齿波、递减锯齿波、方波、三角波、正弦波以及阶梯波,并且可以通过选择开关选择输出相应波形,具有一定的调幅和调频功能。同时具有复位的功能,通过按键确定输出的波形及确定是否输出波形。 二、系统设计方案1、系统的整体原理框图:时钟clk调 频输入控制三 角 波 阶 梯 波正 弦 波方 波递减锯齿 波输 出波形选择复位reset递增锯齿波调 幅d/a转换器 图 1 系统的整体原理框图2、系统框图图 2 任意波形信号发生器系统框图三、系统设计思路3.1 波形函数发生装置的选择波形函数发生方案众多,我们要选择一种易于实现且精度高的方案,以此来提高本设计的实用性。方案一:通过单片机控制d/a,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。方案二:利用max038芯片组成的电路输出波形。max038是精密高频波形产生电路,无法实现阶梯波和递增递减锯齿波的产生,所以舍弃此方案。方案三:用vhdl语言编写程序,调试成功后下载至实验装置的芯片上,再利用外接d/a转换电路(tlc7528)实现以上设计功能。此种方案完全可以生成设计要求的6种波形,而且通过软件仿真可以直观的观测的输出的波形参数,方便调试和更改波形参数,外围电路简单,减少器件损耗,精度高。因此在本次设计中我们选择了vhdl。3.2 波形输入输出控制方式的选择方案一:控制多路d/a开关输出方式此种方案为每一路输出的波形函数使用一路d/a转换后输出,通过控制开关控制每一路d/a是否工作,决定输出的波形。此种方案可以同时输出多路波形,但是需要路d/a转化器,外围电路复杂,制作成本较高而且控制复杂。方案二:采用数据选择器方式此种方案可以利用vhdl语言写出数据选择器,然后每种函数发生器的输出和数据选择器输入相连接,通过控制开关选择对应的波形输出。方案二完全可以得到方案一的设计要求,而且只需一个d/a转换器就可以。电路不需要外部搭建,节约成本且控制简单方便。基于方案二的设计简便、节约制作元件和成本、控制简便等优点,选择方案二作为波形函数输出控制方式。四、各模块设计及仿真经过功能分析,将系统分为两大模块,分别为函数发生模块和调控模块。函数发生模块包括:正弦波模块、三角波模块、方波模块、阶梯波模块、递增或递减锯齿波模块;调控模块包括:选频模块、调幅模块、输入控制模块以及输出控制模块。4.1函数发生模块4.1.1 正弦波模块正弦波sin的vhdl程序如附录所示,其中clk是输入时钟端口,reset为输入复位端口,d_out7.0为八位二进制输出端口。sin_rom正弦波函数发生模块框图如下图所示:图3 正弦波函数发生模块框图 正弦波可用两种方法,即计算法和查表法产生。计算法要用浮点运算,复杂且耗时太长,一般不采用。查表法是事先将正弦波的数据计算出来,列表放在程序中,运行时直接调取数据。用公式y=127.5+127.5sin(360n/m)可计算出正弦波的输出值,公式中的m为输出点数,n=1,2,m。m值取小一些可以提高波形频率,但波形畸变会增大,增加输出点虽然可以改善波形,但输出频率会降低,实践表明,m取64时,可以得到很好的正弦波。begin if reset=1then d_out=0; elsif clkevent and clk=1then if tmp=63 then tmp:=0; else tmp:=tmp+1; end if;正弦波函数波形仿真图如下图所示:图4 正弦波函数波形仿真图如图所示,复位信号为高电平时,输出清零,否则正常输出,但幅度未从0-255,原因是考虑到示波器基准电平的问题,人为的提高最低电平到50.4.1.2 方波模块方波的vhdl程序如附录所示,其中clk是输入时钟端口,reset为输入复位端口,q_out7.0为八位二进制输出端口。方波波函数发生模块框图如下图所示:图5 方波函数发生模块框图 方波只有两个值,可以采用两个极端值0和ffh。根据输出标志a的数值输出对应的数值,当a=0输出0,也即是方波周期中的低电平,当a=1,输出255,也即是方波周期中的高电平。连续的输出便成了观测到的方波波形。其vhdl描述如下:if (reset=1) then a=0; elsif clkevent and clk=1 then if (tmp=1111)then tmp:=0000; else tmp:=tmp+1; end if; if (tmp=1000)then a=1; else a=0; end if; end if; end process; process(clk,a) begin if clkevent and clk=1 then if a=1then q=11111111; else q=00000000; end if; end if;方波函数波形仿真图:图6 方波函数波形仿真图如图所示,复位信号为高电平时,输出清零,否则正常输出。4.1.3 递增锯齿波模块递增锯齿波的vhdl程序如附录所示,其中clk是输入时钟端口,reset为输入复位端口,q_out7.0为八位二进制输出端口。递增锯齿波函数发生模块框图如下图所示:图 7 递增锯齿波函数发生模块框图 程序设计的当复位信号为1时,输出为0,无对应的波形产生。当复位信号为0时,每当检测到时钟上升沿时,计数器值加1,当增加到最大后清零。计数值增加呈现线性关系,因此输出的波形是递增的斜波。从仿真波形图也能看出这种变化规律。vhdl描述为:if tmp=11111111 then tmp:=00000000;else tmp:=tmp+1;end if;end if;递增锯齿波函数波形仿真图如下图所示:图 8 递增锯齿波函数波形仿真图4.1.4 递减锯齿波模块递减锯齿波的vhdl程序如附录所示,其中clk是输入时钟端口,reset为输入复位端口,q_out7.0为八位二进制输出端口。递减锯齿波函数发生模块框图如下图所示:图 9 递减锯齿波函数发生模块框图 程序设计的是复位信号为0时输出为0,无对应的波形产生。当复位信号为1时,当每当检测到时钟上升沿时,计数值减1,当减到0后赋值到最大。计数值减少呈现线性关系,因此输出的波形是递减的锯齿波。从仿真波形图也能看出这种变化规律。vhdl描述为: if reset=1 then tmp:=11111111; elsif clkevent and clk=1 thenif tmp=00000000 then tmp:=11111111;else tmp:=tmp-1; -阶梯为1,递减信号的变化end if; end if;递减锯齿波函数波形仿真图如下图所示:图10 递减锯齿波函数波形仿真图4.1.5 阶梯波模块阶梯波的vhdl程序如附录所示,其中clk是输入时钟端口,reset为输入复位端口,q_out7.0为八位二进制输出端口。阶梯波函数发生模块框图如下图所示:图 11 阶梯波函数发生模块框图阶梯波设计的是数据的递增是以一定的阶梯常数向上增加,所以输出的波形呈现是成阶梯状的,而不是,完全呈现是直线增长。从仿真波形图也能看出这种变化规律。vhdl描述如下: if reset=1 then tmp:=00000000; elsif clkevent and clk=1 then if tmp=11111111then tmp:=10000000; else tmp:=tmp+16; end if; end if;阶梯波函数波形仿真图如下图所示:图 12 阶梯波函数波形仿真图如图所示,复位信号为高电平时,输出清零,否则正常输出。4.1.6 三角波模块三角波的vhdl程序如附录所示,其中clk是输入时钟端口,reset为输入复位端口,q_out7.0为八位二进制输出端口。三角波函数发生模块框图如下图所示:图 13 三角波函数发生模块框图程序设计的是reset复位信号为0时输出为0,无对应的波形产生。当复位信号为1时,当每当检测到时钟上升沿时,当计数的数据不是最大值时,数值做递增运算,当增大到最大时,然后再做递减运算,因此输出的波形便呈现出三角波的形状。从仿真波形图也能看出这种变化规律。vhdl描述如下: if a=0 then if tmp=11111110 then tmp:=11111111; a:=1; else tmp:=tmp+1; end if; else if tmp=00000001then tmp:=00000000; a:=0; else tmp:=tmp-1; end if; end if; end if;三角波函数波形仿真图如下图所示:图14 三角波函数波形仿真图4.2调控模块4.2.1波形输出控制单元波形输出控制单元中只包括一个数据选择器模块。该模块为6选1的数据选择器,包括6个数据输入端,3个数据选择输入端和一个数据输出端。其元件框图如下图所示:图15 波形输出控制单元模块框图其功能是根据数据选择输入端输入的数据来选择相应的数据送到输出端。从而实现数据的选择输出。其vhdl描述如下所示:architecture behav of mux61 is signal sel:std_logic_vector(2 downto 0);beginselqqqqqqnull;end case; end process;end behav;仿真波图如下图所示:图16 波形输出控制单元波形仿真图当s2s1s0=000时,选着输出信号一。4.2.2波形输入控制单元波形输入控制单元中不仅包括一个数据选择器模块,该模块为6选1的数据选择器,而且更重要的是还有d/a控制信号cs和wr的控制程序,包括1个数据输入端、3个数据选择输入端、6个数据输出端以及2个控制信号输出端。其元件框图如下图所示:图 17 波形输入控制单元模块框图其功能是选择要控制的函数单元模块,并且实现数据和tlc7528的同步。cs和wr的vhdl描述如下所示: if(s=1)then q1 then cs=0; else cs3 and q6) then wr=0; else wr=1; end if; if q=111 then cout=1; q=000; else cout=0; end if; end if;仿真波图如下图所示:图18 波形输入控制单元波形仿真图当a2a1a0=010时,选着输出信号y3。4.2.3频率控制单元频率控制单元中包括一个分频模块同时也包括一个挑频模块,挑频模块为简单的四选一数据选择器,分频模块将输入的时钟信号进行2、4、8、16分频,其元件框图如下图所示:图19 分频单元模块框图分频模块vhdl语言描述:if (clkevent and clk=1) thenif(count=1111) thencount 0);elsecount ff:=scope_in; when01=ff(6 downto 0):=scope_in(7 downto 1); ff(7):=0; when10=ff(5 downto 0):=scope_in(7 downto 2); ff(7):=0;ff(6):=0; when others=ff(4 downto 0):=scope_in(7 downto 3); ff(7):=0;ff(6):=0;ff(5):=0;end case;仿真波图如下图所示:图22 幅度控制单元波形仿真图当mode1mode0=01时,进行1/2调幅。4.3 d/a转换器在整体系统中,波形的幅度值被量化成数字值,通过一组数据线输出代表二进制编码的电平信号,为了将数字信号装换成模拟信号,需要用到数-模转换器,简称dac(digital-analog converter)。为了数据处理的准确性,dac转换器必须有足够的转换精度。同时为了能够在较高频率下工作,它必须有足够快的转换速度。因此,转换精度和转换速度是衡量dac转换器性能优劣的主要指标。本实验采用的d/a转换器是tlc7528,他的引脚图如下图所示:图23 tlc7528引脚图tlc7528通过数据总线,dacb控制信号与微处理器接口。当和均为低电平时,tcl7528模拟输出(由daca/dacb控制线指定)对db0db7数据总线输入端的活动做出响应。在此方式下,输入锁存器是透明的,输入数据直接影响模拟输出。当或信号变为高电平时,db0db7输入端上的数据被锁存,直至或信号再次变低为止。当为高电平时,不管wr信号的状态如何,数据输入被禁止。图24 tlc7528时序图根据的他的时序电路图,由于当cs和wr同时低电平有效时才能输出数据,在输入控制模块设计了一段时序控制程序如下所示: if(s=1)then q1 then cs=0; else cs3 and q6) then wr=0; else wr=1; end if; if q=111 then cout=1; q=000; else cout=0; end if; end if;控制部分波形图如下所示:图25 tlc7528控制信号波形图4.4 总电路通过以上各个模块的细化和分析,最终在max+plus中完成了整个系统的联合调试,并通过示波器读输出信号的波形符合设计的要求。调试整个系统了原理图如下图所示:图 26 总电路图整图仿真图 27 总电路图仿真波形由此图得出的结论:此为二分频,幅度不变,方波信号,根据tlc7528的时序特点,在cs和wr同为低电平时,有模拟方波的输出。5、 硬件测试5.1编译(1)选择目标器件 assign-device-devicefamily-flex10k-epf10k10lc84-3-ok 图 28 器件选择窗口(2)启动编译器 max+plusii-compiler-start将以上模块分别编译通过,并将它们全部保存到自己所建的工程文件夹:kechengsheji-1中。5.2 引脚的锁定确定设计实体输入输出端口与目标芯片引脚的对应关系图29 引脚锁定界面将管脚安排写成表格形式如下表所示:表1 器件管脚安排端口管脚安排端口管脚安排端口管脚安排clkinput=1data5output=19s2input=37data0output=61data6output=21tiaofu0input=36data1output=62data7output=22tiaofu1input=35data2output=64resetinput=28tiaopin0input=30data3output=65soinput=39tiaopin1input=29data4output=18s1input=38wrout=235.3编程下载1用下载电缆把计算机的并口与目标板(实验开发系统),连接好并打开电源。2.将已经完成好的顶层原理图设一次当前工程,然后将其在max+plus-compiler下编译一次,将引脚锁定图在max+plus-floorplaneditor中打开,再编译一次管脚。3. max+plus-programmer-option-hardware setup-byteblaster(编程方式为)-configute,双击enter键,进行硬件验证。5.4 硬件验证下载完成后,把示波器连接到实验箱上,并在实验箱上选择适当的时钟频率(以示波器上显示的波形清晰为标准)。准备工作完成后按下实验箱的键k1即复位键,键k2和k3即为频率选择开关,键k4和键k5即为幅度选择开关。键k6、键k7、键k8组合为波形选择键,组合键的键值与对应波形关系如下表:表2 频控按键键k2键k3对应产生的分频00二分频01四分频10八分频11 十六分频表3 幅控按键键k4键k5对应产生的调幅00幅度不变01二分之一调幅10四分之一条幅11 八分之一条幅表4 按键与波形对应关系键k6键k7键k8对应产生的波形000递减锯齿波001递增锯齿波010三角波011阶梯波100方波101正弦波当k1k2k3k4k5k6k7k8=00000101;输出的是正弦波信号当k1k2k3k4k5k6k7k8=00001101;输出的是2分频后的正弦波信号当k1k2k3k4k5k6k7k8=00101101;输出的是2分频和1/2调幅后的正弦波信号。六、课程设计心得体会本次课程设计完成了智能函数信号发生器的设计与实现,前后经历了几周的时间,前期初步设计可谓是顺风顺水,但是由于试验箱使用的d/a转换器是tlc7528,中期在控制tlc7528的和上遇到了一些困难,后来在输入控制模块中采用了一个简单的8进制计数器,实现了,与时钟信号同步,继而得到了模拟信号的输出,不过在用示波器显示波形时,却总是得不到稳定的波形,后来发现在输入控制中,仅需要3位二进制数即能完成简单的8进制计数,自己却习惯性的用了8位,这使得分频现象严重,更改后即得到了了稳定的输出波形,但是波形的下半部分却被消隐了,怀疑是基准电平的问题,对信号波形发生器进行了微调,如:对于正弦波发生器,本来取值范围是从0-255,人为的提高了最低电平,采取了所有电平值除二加50的措施,最后果然波形输出稳定完好,试验成功。当然本次课程还有很多不足之处,对于函数信号发生仍然可以使用lpmrom模块,同时可以采用数控分频对调频智能控制,虽然连续调幅困难相当大,但是还是可以有时间一试。总的来说,在设计中遇到了很多问题,最后在老师的指导下,终于迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。不仅学到了不少知识,而且锻炼了自己的能力。参考文献1卢毅,赖杰.vhdl与数字电路设计.北京:科学出版社. 2 焦素敏.eda应用技术.北京清华大学出版社,20053王志鹏,付丽琴. 可编程逻辑器件开发技术max+plusii.北京国防工业出版社.2005.34徐志军.cpld/fpga的开发与应用.北京电子工业出版5宋万杰,罗丰,吴顺君.cpld技术及其应用.西安:西安电子科技大学出版社,1999附录分频模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ct74161 isport(clk : in std_logic;clk_div2 : out std_logic;clk_div4 : out std_logic;clk_div8 : out std_logic;clk_div16 : out std_logic);end ct74161;architecture rtl of ct74161 issignal count : std_logic_vector(3 downto 0);beginprocess(clk)beginif (clkevent and clk=1) thenif(count=1111) thencount 0);elsecount = count +1;end if ;end if ;end process;clk_div2 = count(0);clk_div4 = count(1);clk_div8 = count(2);clk_div16 = count(3);end rtl;sawtooth_adder递增锯齿波函数发生模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sawtooth_adder isport ( clk,reset:in std_logic; q:out std_logic_vector(7 downto 0);end entity sawtooth_adder;architecture behav of sawtooth_adder isbegin process(clk,reset) variable tmp: std_logic_vector(7 downto 0);begin if reset=1 then tmp:=00000000;elsif clkevent and clk=1 thenif tmp=11111111 then tmp:=00000000;else tmp:=tmp+1;end if;end if; q=tmp;end process;end architecture behav;sawtooth_adder递减锯齿波函数发生模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sawtooth_minus is - 递减锯齿波sawtooth_minus port ( clk,reset:in std_logic; - 复位信号reset,时钟信号clk q:out std_logic_vector(7 downto 0); -输出信号q,8位数字信号end entity sawtooth_minus;architecture behav of sawtooth_minus isbeginprocess(clk,reset)variable tmp: std_logic_vector(7 downto 0);begin if reset=1 then tmp:=11111111; elsif clkevent and clk=1 thenif tmp=00000000 then tmp:=11111111;else tmp:=tmp-1; -阶梯为1,递减信号的变化end if; end if; q=tmp;end process;end architecture behav;三角波函数发生模块library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity triangle is -三角波 triangleport(clk,reset:in std_logic; -复位信号reset,时钟信号clkq: out std_logic_vector(7 downto 0); -输出信号q,8位数字信号 end triangle;architecture behav of triangle isbegin process(clk,reset) variable tmp : std_logic_vector(7 downto 0); variable a : std_logic;begin if(reset=1) then tmp:=00000000; elsif clkevent and clk=1 then if a=0 then if tmp=11111110 then tmp:=11111111; a:=1; else tmp:=tmp+1; end if; else if tmp=00000001then tmp:=00000000; a:=0; else tmp:=tmp-1; end if; end if; end if; q=tmp; end process; end behav;方波函数发生模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity square is -方波port(clk,reset : in std_logic; -复位信号reset,时钟信号clkq : out std_logic_vector(7 downto 0);-输出信号q,8位数字信号end square;architecture behav of square issignal a: std_logic; beginprocess(clk,reset) variable tmp: std_logic_vector(3 downto 0);beginif (reset=1) then a=0; elsif clkevent and clk=1 then if (tmp=1111)then tmp:=0000; else tmp:=tmp+1; end if; if (tmp=1000)then a=1; else a=0; end if; end if; end process; process(clk,a) begin if clkevent and clk=1 then if a=1then q=11111111; else q=00000000; end if; end if; end process; end behav;正弦波函数发生模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sin_rom is port(clk,reset:in std_logic; d_out: out integer range 0 to 255); end sin_rom ; architecture behav of sin_rom is begin process(reset,clk) variable tmp: integer range 0 to 63; begin if reset=1then d_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outd_outnull;end case;end if;end process;end behav;阶梯波函数发生模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ladder is -阶梯波ladder port(clk,reset:in std_logic; -复位信号reset;时钟信号clk q: out std_logic_vector(7 downto 0); -输出信号q,8位数字信号 end ladder; ar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论