收藏 分销(赏)

函数信号发生器设计(EDA大作业).doc

上传人:精**** 文档编号:1264169 上传时间:2024-04-19 格式:DOC 页数:12 大小:166.51KB 下载积分:8 金币
下载 相关 举报
函数信号发生器设计(EDA大作业).doc_第1页
第1页 / 共12页
函数信号发生器设计(EDA大作业).doc_第2页
第2页 / 共12页


点击查看更多>>
资源描述
EDA课程设计大作业 设计题目: 函数信号发生器设计 学生姓名: 学 号: 专业班级: 20012年 05月 28日 函数信号发生器 1.设计背景和设计方案 1.1 设计背景 在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。 函数信号发生器是一种在科研和生产中经常用到的基本波形发生器,随着大规模集成电路的迅速发展,多功能信号发生器已被制作成专用集成电路,例如ICL8038单片函数波形发生器,可以产生精度较高的正弦波、方波、矩形波、锯齿波等多种信号。 1.2 设计方案及实现 函数信号发生器由递增斜波(zeng),递减斜波产生模块(jian),方波产生模块(square),三角波产生模块(san),正弦波产生模块(sin)和输出波形选择模块(choice)组成。总体设计框图如图所示,图中输出q需要接到外部D/A转换的数据输入端,将数字信号转换为模拟信号,在D/A转换器的输出端即可得到各种不同的函数信号波形。如果输出脉冲波形边沿跳变不理想,可加低通滤波器来加以完善。 将各个模块分开来设计,先设计各个模块的程序,让后将程序生成对应的元件,然后再将这些元件链接到一起组成完整的硬件电路 1.3各模块程序及生成模块 1.3.1 递减斜波产生模块 模块程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity jian is port(clk,reset:in std_logic; //定义输入输出端口 q:out std_logic_vector(7 downto 0)); //定义波形输出端口 end jian; architecture jian_arc of jian is begin process(clk,reset) //模块进程 variable tmp:std_logic_vector(7 downto 0); //定义7位逻辑位变量 begin if reset='0' then //复位有效 tmp:="11111111"; //为变量赋值全1 elsif clk'event and clk='1' then //时钟有效时 if tmp="00000000" then //当前变量值为全0时 tmp:="11111111"; //为变量赋值为全1 else tmp:=tmp-1; //不为全0时,当前变量值减1 end if; end if; q<=tmp; //变量值赋给q end process; end jian_arc; 生成的元件图: 1.3.2 递增斜波产生模块 模块程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity zeng is port(clk,reset:in std_logic; //定义时钟,复位端口 q:out std_logic_vector(7 downto 0)); //定义波形输出端口 end zeng; architecture zeng_arc of zeng is begin process(clk,reset) //模块进程 variable tmp:std_logic_vector(7 downto 0); //定义7位逻辑位变量 begin if reset='0' then //复位有效 tmp:="00000000"; //为变量赋值为全0 elsif clk'event and clk='1' then //时钟有效 if tmp="11111111" then //当前为全1时 tmp:="00000000"; //为变量赋值为全0 else tmp:=tmp+1; //若不为全1,变量加1 end if; end if; q<=tmp; //将变量值付给q end process;end zeng_arc 生成的元件图: 1.3.3 三角波产生模块 模块程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity san is port(clk,reset:in std_logic; //定义时钟,复位端口 q:out std_logic_vector(7 downto 0)); //定义七位波形输出端口 end san; architecture san_arc of san is begin process(clk,reset) //模块进程 variable tmp:std_logic_vector(7 downto 0); //定义7位逻辑位变量 variable a:std_logic; //定义1位逻辑位变量 begin if reset='0' then //复位有效 tmp:="00000000"; //当前变量赋值为全0 elsif clk'event and clk='1' then //时钟有效 if a='0' then //当a为0时 if tmp="11111110" then //判断当前变量值是否为指定值 tmp:="11111111"; //若为指定值变量赋值为全1 a:='1'; //a赋值为1 else tmp:=tmp-1; //若不为指定值变量值减1 end if; else if tmp="00000001"then //判断当前变量值是否为指定值 tmp:="00000000"; //若为指定值变量赋值为全0 a:='0'; //a赋值为0 else tmp:=tmp-1; //若不为变量值变量值减1 end if;end if;end if; q<=tmp; //将变量值付给q end process;end san_arc; 生成的元件图: 1.3.4 方波产生模块 模块程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity square is port(clk,clr:in std_logic; //定义时钟,清除端口 q:out integer range 0 to 255); //定义整型输出端口,范围为0-255 end square; architecture square_arc of square is signal a:bit; //定义信号位a begin process(clk,clr) //模块进程 variable cnt:integer range 0 to 63; //定义整型变量cnt,范围为0-63 begin if clr='0'then //判断清除端是否为0 a<='0'; //若为0,a赋值为0 elsif clk'event and clk ='1'then //时钟有效 if cnt<63 then //判断cnt是否小于63 cnt:=cnt+1; //若小于63,则变量加1 else cnt:=0; //否则变量赋值为0 a<=not a; //a取反再赋给a end if;end if;end process; Process(clk,a) begin if clk'event and clk='1'then //时钟有效 if a='1' then //判断a是否为1 q<=255; //若为1,q赋值为255 else q<=0; //不为1,q赋值为0 end if; end if; end process; end square_arc; 生成的元件图: 1.3.5 正弦波产生模块 模块程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sin is port(clk,clr:in std_logic; //定义时钟,清除端口 d:out integer range 0 to 255); //定义整型输出端口,范围为0-255 end sin; architecture sin_arc of sin is begin process(clk,clr) //模块进程 variable tmp:integer range 0 to 63; //定义整型变量,范围为0-63 begin if clr='0'then //清除端有效 d<=0; //输出赋值为0 elsif clk'event and clk='1'then //时钟有效 if tmp=63 then //判断变量值是否为63 tmp:=0; //若为63,变量赋值为0 else tmp:=tmp+1; //若不为63,变量值加1 end if; case tmp is //变量tmp的各种情况 when 00=>d<=255; when 01=>d<=254; when 02=>d<=252; when 03=>d<=249; when 04=>d<=245; when 05=>d<=239; when 06=>d<=233; when 07=>d<=225; when 08=>d<=217; when 09=>d<=207; when 10=>d<=197; when 11=>d<=186; when 12=>d<=174; when 13=>d<=162; when 14=>d<=150; when 15=>d<=137; when 16=>d<=124; when 17=>d<=112; when 18=>d<=99; when 19=>d<=87; when 20=>d<=75; when 21=>d<=64; when 22=>d<=53; when 23=>d<=43; when 24=>d<=34; when 25=>d<=26; when 26=>d<=19; when 27=>d<=13; when 28=>d<=8; when 29=>d<=4; when 30=>d<=1; when 31=>d<=0; when 32=>d<=0; when 33=>d<=1; when 34=>d<=4; when 35=>d<=8; when 36=>d<=13; when 37=>d<=19; when 38=>d<=26; when 39=>d<=34; when 40=>d<=43; when 41=>d<=53; when 42=>d<=64; when 43=>d<=75; when 44=>d<=87; when 45=>d<=99; when 46=>d<=112; when 47=>d<=124; when 48=>d<=137; when 49=>d<=150; when 50=>d<=162; when 51=>d<=174; when 52=>d<=186; when 53=>d<=197; when 54=>d<=207; when 55=>d<=217; when 56=>d<=225; when 57=>d<=233; when 58=>d<=239; when 59=>d<=245; when 60=>d<=249; when 61=>d<=252; when 62=>d<=254; when 63=>d<=255; when others=>null; end case; end if; end process; end sin_arc; 生成的元件图: 1.3.6 波形选择模块 模块程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity choice is port (sel:in std_logic_vector(2 downto 0); //定义三位选择码 d0,d1,d2,d3,d4:in std_logic_vector(7 downto 0); //定义波形输入端口 q:out std_logic_vector(7 downto 0)); //定义波形输出端口 end choice; architecture choice_arc of choice is begin process(sel) //定义选择进程 begin case sel is when"000"=>q<=d0; //选择递减斜波模块 when"001"=>q<=d1; //选择递增斜波模块 when"010"=>q<=d2; //选择三角波模块 when"011"=>q<=d3; //选择方波模块 when"100"=>q<=d4; //选择正弦波模块 when others=>null; end case; end process; end choice_arc; 生成的元件图: 2.方案实施 reset为复位信号,clk为时钟信号,sel波形选择信号输入口。具体的实现效果为当信号reset为低电平时,既复位端无效。当sel信号为‘000’时选择递减斜波产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图1所示。 图1 递减斜波 当sel信号为‘001’时选择递增斜波产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图2所示。 图 2递增斜波 当sel信号为‘010’时选择三角波信号产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图3所示。 图 3三角波 当sel信号为‘011’时选择方波信号产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图4所示。 图4方波 当sel信号为‘100’时选择正弦波信号产生模块,波形由选择模块choice上的q[7..0]输出,数字信号波形如图2.5所示。 图5 正弦波 3.结果与结论 仿真结果,经过多次调试达到预期效果。本次设计采用了模块化的设计方法,将各个模块分开来设计,设计并仿真好一个模块的电路后再设计另外一个模块,这样便于检查错误和定位修改错误,为最后模块之间的组成提供方便。程序设计值归结于软件的仿真结果,系统的搭建和实物的构造可以借鉴,不能完全照搬! 11
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服