1、信号发生器的设计任务书福建工程学院福建工程学院课程设计实验报告专 业 信息科学与工程学院 班 级 11级 座 号 姓 名 日 期 2013.01.02 一、 实验目的1.掌握内部LPM-ROM模块的调用方法。2.熟悉信号发生器的设计方法。3.了解高速DA芯片TLC5602的工作原理。二、 实验内容1. 通过对AD转换芯片TLC5602的控制,输出预定的正弦波、三角波和方波和锯齿波信号。2. 通过拨动开关进行各种输出信号间的切换。3. 通过按键对输出波形的频率进行控制(分为频加和频减按键)。4. 能输出之前产生的各种波形间的叠加信号(16种叠加波形)。5. 使用数码管来显示当前输出信号的频率,通
2、过LED灯来实现当前信号的指示。6. 对输出信号的参数能进行调节,此实验主要是对方波的占空比进行了调节。三、 实验原理本实验要求使用开发平台上现有的并行D/A转换器TLC5602来产生四种频率可调的波形:正弦波、方波、三角波、锯齿波。锯齿波、三角波产生的原理比较简单,锯齿波我们可以采用0-255的循环加法计数器来实现,三角波采用0-255-0的循环加减法计数器来实现。方波产生的原理是让计数器在0和255时各保持输出半个周期。正弦波的产生比较复杂,一般采用查表法来实现,正弦表值可以用MATLAB,C等程序语言生成。在一个周期取样点越多则输出的波形失真度越小,但是点越多存储正弦波表值所需要的空间就
3、越大,编写就越复杂。正弦波波形数据ROM可以由多种方式实现,如逻辑方式在FPGA中实现,或利用LPM-ROM来实现。相比之下,LPM-ROM实现起来更快,更方便。在这个实验中我们可将这四种波形的数据均放入LPM-ROM内,我们只需要对每种波形的起始地址进行控制即可实现对四种波形的控制输出。系统基准始终选择24MHZ,通过分频器分频,将分频后的时钟信号送给各个波形产生模块的时钟输入口。分频器的分频比由按键S1和S2控制,S1和S2未按下为初始分频,分频比为1:(256*2*2*2*2*2*2*2*2)=1:65536(即“inclk”最低频率为366HZ),S1每按下一次分频改变一次,为频率上调
4、;S2每按下一次分频改变一次,为频率下调。由于基准时钟确定,所以各分频时钟是确定的,所以可以用S1和S2同时控制译码显示电路,译码显示接到八位数码管显示当前频率(实现写好在译码ROM中)。四个波形产生器也可看成一个ROM,一个周期256个采样点存在ROM里,其触发信号为“inclk”时钟信号。四种波形信号全部送到选择叠加电路,波形选择叠加受控于sw1-4,四个拨码开关状态分别代表四个信号输入状态,如用“1”代表开“0”代表关,sw4&sw3&sw2&sw1=“1000”输出正弦波,sw4&sw3&sw2&sw1=“1100”输出正弦波与方波叠加后的信号,以此类推。当前信号的类型通过LED灯显示
5、。选择叠加后的信号经过8位DA转换器,接到示波器上,可以直观地观察到输出信号的波形与频率等信息。四、 实验步骤1. 电路系统框图信号发生器逻辑电路系统框图2. 电路模块概述本电路分为9个小模块:分频模块、正弦波产生模块、方波产生模块、三角波产生模块、锯齿波产生模块、波形叠加模块、DA转换模块(实验板现成的)、LED灯指示模块与译码显示模块。本设计的思想主要是将程序模块化,各个模块分开来设计,先设计各个模块的程序,然后采用例化语句将各个模块综合在一个SignalGenerator.vhd文件中,最终实现程序功能。分频模块: 对基准频率进行分频操作,8分频正弦波产生模块:产生正弦波方波产生模块:
6、产生方波三角波产生模块:产生三角波锯齿波产生模块:产生锯齿波波形叠加模块: 可产生16种组合波形DA转换模块: DA转换LED灯指示模块: 指示当前波形的类型译码显示模块: 显示当前频率的大小3. 各模块之间的联系五、 仿真波形六、 硬件测试 波形类型LED指示灯 方波波形显示 叠加后波形显示 数码管显示频率七、 总结通过这次课程设计,初步掌握了利用VHDL 语言设计系统的方法。本次课程设计主要是利用VHDL语言进行多功能信号发生器的设计。课程设计期间,对课本上学习到的理论知识得到了一个很好的应用。设计之初,感觉到比较迷茫,无从下手。但是通过网上查阅相关资料,觉得其实并没有想象中的那么难。在多
7、方面查阅资料之后,最终确立了设计方案。设计完之后的电路,除了有基本功能外,添加了数码管显示频率、LED指示灯、频加频减控制按键、拨码开关控制波形叠加等功能。设计期间,存在了很多疑惑,通过网上查阅资料和询问同学都得到了很好的解决。总之,通过这次课程设计对硬件电路设计(VHDL)有了一个较深刻的认识。八、 附录VHDL代码SignalGenerator.vhd-FileName : SignalGenerator.vhd-Function : 采用例化语句综合各模块-Created By : HZT-Created Data : 2013.12.25-Modify Data : -LIBRARY
8、IEEE; -顶层设计USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SignalGenerator IS PORT( CLK : IN STD_LOGIC; -时钟基准输入 P : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -频率输出 LED : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -LED灯显示开关状态 CLKOUT: OUT STD_LOGIC; -时钟脉冲输出 DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -
9、频率数据输出 WSEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -位选择 K1 : IN STD_LOGIC; -正弦波信号输出按键 K2 : IN STD_LOGIC; -方波信号输出按键 K3 : IN STD_LOGIC; -三角波信号输出按键 K4 : IN STD_LOGIC; -锯齿波信号输出按键 S1 : IN STD_LOGIC; -频加按键 S2 : IN STD_LOGIC -频减按键 );END ENTITY SignalGenerator;ARCHITECTURE behav OF SignalGenerator IS -正弦波声明- C
10、OMPONENT Sin PORT( ADDRESS : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位地址信号 INCLOCK : IN STD_LOGIC; -地址锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; -方波声明- COMPONENT Square PORT( ADDRESS : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位地址信号 INCLOCK : IN STD_LOGIC; -地址锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOW
11、NTO 0) ); END COMPONENT; -三角波声明- COMPONENT Triangle PORT( ADDRESS : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位地址信号 INCLOCK : IN STD_LOGIC; -地址锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; -锯齿波声明- COMPONENT Sawtooth PORT( ADDRESS : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位地址信号 INCLOCK : IN STD_LOG
12、IC; -地址锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; -显示声明- COMPONENT Display IS PORT( DCLK : IN STD_LOGIC; -分频时钟 DISOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -显示输出 SELD : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -位选 SELQ : IN STD_LOGIC_VECTOR(2 DOWNTO 0) -频选 ); END COMPONENT; -信号定义- SIGNAL Q1
13、: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL P1 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL P2 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL P3 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL P4 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL S_P : STD_LOGIC_VECTOR(2 DOWNTO 0); -按键控制下分频信号 SIGNAL QOUT : STD_LOGIC_VECTOR(7 DOWNTO 0); SI
14、GNAL QIN : STD_LOGIC; SIGNAL COUNT : INTEGER RANGE 0 TO 1000000; SIGNAL C_CLK : STD_LOGIC; -按键控制下时钟信号 SIGNAL WAV_OVE : STD_LOGIC_VECTOR(3 DOWNTO 0); -波形叠加信号 BEGIN -分频- PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN IF(QOUT = 11111111) THEN QOUT = 00000000; ELSE QOUT = QOUT + 1; END IF; END IF; END
15、PROCESS; CLKOUT = CLK; -S1、S2按键消抖- PROCESS(CLK, S1, S2) BEGIN IF CLKEVENT AND CLK = 1 THEN IF (S1 = 0 OR S2 = 0) THEN IF COUNT = 1000000 THEN COUNT = COUNT; ELSE COUNT = COUNT + 1 ; END IF; IF COUNT = 999999 THEN C_CLK = 0; ELSE C_CLK = 1; END IF; ELSE COUNT = 0 ; END IF; END IF; END PROCESS; -按键控制频
16、加频减- PROCESS(C_CLK, S1, S2) BEGIN IF (C_CLKEVENT AND C_CLK = 1) THEN IF S1 = 1 THEN -当按下S1时频率加 S_P = S_P + 1; IF S_P = 111 THEN S_P = 000; -当频率为111时,恢复为000 END IF; END IF; IF S2 = 1 THEN -当按下S2时频率减 S_P = S_P - 1; IF S_P = 000 THEN S_P QIN QIN QIN QIN QIN QIN QIN QIN NULL; END CASE; END PROCESS; -分频后
17、频率- PROCESS(QIN) BEGIN IF QINEVENT AND QIN = 1 THEN Q1 Q1, Q = P1, INCLOCK = CLK); -正弦波例化 U2:Square PORT MAP(ADDRESS = Q1, Q = P2, INCLOCK = CLK); -方波例化 U3:Triangle PORT MAP(ADDRESS = Q1, Q = P3, INCLOCK = CLK); -三角波波例化 U4:Sawtooth PORT MAP(ADDRESS = Q1, Q = P4, INCLOCK = CLK); -锯齿波例化 U5:Display POR
18、T MAP(DCLK = CLK, DISOUT = DOUT, SELD = WSEL, SELQ = S_P); -显示例化 WAV_OVE P = ZZZZZZZZ; LED P = P1; LED P = P2; LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1) SRL 1)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 1); LED P = P3; LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1) SRL 1)+(TO_STDLOGICVECTOR(TO_BITVECTOR
19、(P3) SRL 1); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 1)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P3) SRL 1); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P3) SRL 2); LED P = P4; LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1
20、) SRL 1)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 1); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 1)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 1); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 2); LED P = (TO_ST
21、DLOGICVECTOR(TO_BITVECTOR(P3) SRL 1)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 1); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P3) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 2); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTO
22、R(P3) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 2); LED P = (TO_STDLOGICVECTOR(TO_BITVECTOR(P1) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P2) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P3) SRL 2)+(TO_STDLOGICVECTOR(TO_BITVECTOR(P4) SRL 2); LED NULL; END CASE; END PROCESS;END behav;Display.vhd-数码管显示对照表-
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2