数字电路课程设计——函数信号发生器_第1页
数字电路课程设计——函数信号发生器_第2页
数字电路课程设计——函数信号发生器_第3页
数字电路课程设计——函数信号发生器_第4页
数字电路课程设计——函数信号发生器_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、数字电路课程设计报告目录第一部分:要求41.1 技术要求41.2 功能要求41.3 本人任务4 第二部分 设计5 2.1 软件电路方案设计5 2.2 原理框图5 第三部分 单元模块设计,仿真结果及分析53.1 分频器模块53.2 频率选择63.3 幅度选择73.4 六种波形设计83.5 输出模块19第四部分 顶层模块214.1 顶层模块设计214.2 仿真结果及分析19第五部分 硬件电路设计及安装图215.1 连线图245.2 输入、输出信号说明245.3 设计中需要注意的问题25第六部分 调试结果说明及分析266.1 实体图266.2 输出实物波形266.3 设计中需要注意的问题32第七部分

2、 收获体会30第一部分:要求1.1 技术要求1)生成方波、三角波、正弦波;2)可以进行简单的频率选择或相幅调节;3)在完成前三种波形的情况下可以进行波形类别的扩展;4)用VHDL语言设计符合上述功能要求的函数发生器,并用层次化设计方法设计该电路; 5)对各个模块的功能进行仿真,并掌握数字信号发生器电路的设计及其调试方法。1.2 功能要求 实现基于FPGA的简易多功能信号发生器,产生稳定的方波、三角波、正弦波、锯齿波、阶梯波、梯形波输出,并用数码管输出相应数字,且频率、幅值可调。具体要求如下:通过拨动开关S3、S2、S1实现波形的选择:共六种,同时数码管显示“1”到“6”;通过拨动开关A2、A1

3、实现波形幅度的选择:共计四种;通过拨动开关F2、F1实现波形频率的选择:共计四种;下载并测试电路的功能,用示波器观察DAC0832输出波形。1.3 本人任务 进行基于vhdl的软件设计,包括顶层模块设计,配合硬件进行硬件仿真和测试。 第二部分 设计 2.1 软件电路方案设计 对六个波形模块和三个选择模块进行单独编写,最后设计顶层模块输出。在确定课题的第一天,我和我的组员查找资料,初步确定了电路的设计方案。2.2 原理框图 信号输出波形选择芯片(信号选择)频率选择幅度选择芯片(信号选择) 输出模块第三部分 单元模块设计,仿真结果及分析3.1 分频器模块实体框图程序清单:library ieee;

4、use ieee.std_logic_1164.all;entity fana is port(a:in integer RANGE 0 TO 312; -a为频率输入的初始值 clk:in std_logic; q:out std_logic); -q为输出的脉冲频率end;architecture fana_arc of fana isbegin process(clk) variable b,d:std_logic; variable c:integer RANGE 0 TO 312; begin if clk'event and clk='1' then if

5、b='0' then -检测b c:=a-1; -b为低电平则将a-1送到c b:='1' -且令b=1 else if c=1 then -b为1时检测c b:='0' -c=1时使b=0 d:=not d; -d取反 else c:=c-1; -c不等于1时c-1 end if; end if; end if; q<=d; -将d作为频率输出 end process;end;分析:这一部分主要实现对fpga内部时钟的初始分频。波形如上,当输入a为256时,每256个clk脉冲后q发生一个脉冲。3.2 频率选择 实体框图 程序清单:lib

6、rary ieee;use ieee.std_logic_1164.all;entity chuzhi is port(f0:in std_logic_vector(1 downto 0); -f0初始频率选择开关 q:out integer RANGE 0 TO 312);end;architecture chu_arc of chuzhi isbegin with f0 select -四种不同的初值 q<=312 when"00", 201 when"01", 101 when"10", 10 when"11&q

7、uot;, NULL when others;end;分析:这部分程序实现脉冲频率的选择,当f0为00、01、10、11时,频率分别为312、201、101、10;将此输出作为分频器的输入。3.3 幅度选择实体框图程序清单:library ieee;use ieee.std_logic_1164.all;entity fudu is port(f1:in std_logic_vector(1 downto 0); -f0初始频率选择开关 q:out integer RANGE 0 TO 255);end;architecture fudu_arc of fudu isbegin with f1

8、 select -四种不同的初值 q<=255 when"00", 207 when"01", 167 when"10", 119 when"11", NULL when others;end; 分析:此程序为幅度选择,当f1为00、01、10、11时,幅度分别为255、207、167、169。3.4 六种波形设计a、 方波 实体框图程序清单:library ieee;use ieee.std_logic_1164.all;entity square isport(clk,clr:in std_logic;

9、k:in integer range 0 to 255; -幅度选择信号 q:out integer range 0 to 255); -方波输出end;architecture sq_arc of square issignal a:bit;begin process(clr,clk) variable cnt:integer; begin if clr='0' then a<='0' elsif clk'event and clk='1' then -时钟上升沿 if cnt<31 then cnt:=cnt+1; -cn

10、t未到31时加1 else cnt:=0; -cnt到31时清零 a<=not a; -并将a取反 end if; end if; end process;process(clk,a) begin if clk'event and clk='1' then if a='1' then -每个时钟上升沿检测a q<=k; -a为1则q为最大值,即高电平else q<=0; -a为0时取反,q为最小值end if; end if; end process;end;分析:64个上升沿脉冲形成一个周期,半个周期为高电平255,半个周期低电平0。

11、b、三角波实体框图程序清单:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity delta is port(clk,clr:in std_logic; k:in integer range 0 to 255; -k幅度选择信号 q:out integer range 0 to 255);end delta;architecture a of delta isbegin process(clk,clr) variable num:integer range 0 to 255; variab

12、le ff:std_logic;-上升沿/下降沿判断标志,为0时上升,为1时下降 begin if clr='0' then -异步复位端 num:=0; elsif clk'event and clk='1' then -上升沿 if ff='0' then if num=k-7 then num:=k; ff:='1' else num:=num+8; -ff=0,每个上升沿脉冲加8 end if; else if num=7 then num:=0; ff:='0' else num:=num-8;

13、-ff=1,下降沿,每个脉冲减8 end if; end if; end if; q<=num; end process;end a;分析:每个脉冲上升8个点,点连成线形成三角的上升和下降曲线。由上图可知当幅度输入为207时,当上升到207个点时下降。c、正弦波实体框图程序清单:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sin is port(clk,clr:in std_logic; k:in integer range 0 to 255; -幅度选择信号 d:out

14、integer range 0 to 255);end;architecture sin_arc of sin isbegin process(clk,clr,k) variable tmp:integer range 0 to 63; begin if clr='0' then d<=0; elsif clk'event and clk='1' then -时钟上升沿 if tmp=63 then -tmp=63则清零 tmp:=0; else tmp:=tmp+1; -否则tmp+1 end if; if k=255 then case tmp

15、 is 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&

16、lt;=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;

17、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<

18、;=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; w

19、hen 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; elsif k=

20、207 then case tmp is when 00=>d<=207; when 01=>d<=206; when 02=>d<=205; -上升曲线 when 03=>d<=202; when 04=>d<=199; when 05=>d<=195; when 06=>d<=190; when 07=>d<=183; when 08=>d<=177; when 09=>d<=169; when 10=>d<=160; when 11=>d<=15

21、2; when 12=>d<=142; when 13=>d<=132; when 14=>d<=123; when 15=>d<=111; when 16=>d<=100; when 17=>d<=91; when 18=>d<=80; when 19=>d<=70; when 20=>d<=61; when 21=>d<=52; when 22=>d<=43; when 23=>d<=35; when 24=>d<=28; when 2

22、5=>d<=21; when 26=>d<=15; when 27=>d<=10; when 28=>d<=6; when 29=>d<=3; when 30=>d<=1; when 31=>d<=0; when 32=>d<=0; -下降曲线 when 33=>d<=1; when 34=>d<=3; when 35=>d<=6; when 36=>d<=10; when 37=>d<=15; when 38=>d<=21;

23、when 39=>d<=28; when 40=>d<=35; when 41=>d<=43; when 42=>d<=52; when 43=>d<=61; when 44=>d<=70; when 45=>d<=80; when 46=>d<=91; when 47=>d<=100; when 48=>d<=111; when 49=>d<=123; when 50=>d<=132; when 51=>d<=142; when 52=&

24、gt;d<=152; when 53=>d<=160; when 54=>d<=169; when 55=>d<=177; when 56=>d<=183; when 57=>d<=190; when 58=>d<=195; when 59=>d<=199; when 60=>d<=202; when 61=>d<=205; when 62=>d<=206; when 63=>d<=207; -完成一个周期 when others=>NULL; end

25、 case; elsif k=167 then case tmp is when 00=>d<=167; when 01=>d<=166; when 02=>d<=165; -上升曲线 when 03=>d<=163; when 04=>d<=162; when 05=>d<=155; when 06=>d<=151; when 07=>d<=146; when 08=>d<=141; when 09=>d<=134; when 10=>d<=128; when

26、11=>d<=121; when 12=>d<=113; when 13=>d<=105; when 14=>d<=97; when 15=>d<=89; when 16=>d<=81; when 17=>d<=73; when 18=>d<=64; when 19=>d<=56; when 20=>d<=49; when 21=>d<=42; when 22=>d<=34; when 23=>d<=28; when 24=>d<

27、;=22; when 25=>d<=17; when 26=>d<=12; when 27=>d<=8; when 28=>d<=5; when 29=>d<=3; when 30=>d<=1; when 31=>d<=0; when 32=>d<=0; -下降曲线 when 33=>d<=1; when 34=>d<=3; when 35=>d<=5; when 36=>d<=8; when 37=>d<=12; when 38=>

28、d<=17; when 39=>d<=22; when 40=>d<=28; when 41=>d<=34; when 42=>d<=42; when 43=>d<=49; when 44=>d<=56; when 45=>d<=64; when 46=>d<=73; when 47=>d<=81; when 48=>d<=89; when 49=>d<=97; when 50=>d<=105; when 51=>d<=113; wh

29、en 52=>d<=121; when 53=>d<=128; when 54=>d<=134; when 55=>d<=141; when 56=>d<=146; when 57=>d<=151; when 58=>d<=155; when 59=>d<=162; when 60=>d<=163; when 61=>d<=165; when 62=>d<=166; when 63=>d<=167; -完成一个周期 when others=>NU

30、LL; end case; elsif k=119 then case tmp is when 00=>d<=119; when 01=>d<=118; when 02=>d<=117; -上升曲线 when 03=>d<=116; when 04=>d<=114; when 05=>d<=112; when 06=>d<=109; when 07=>d<=105; when 08=>d<=101; when 09=>d<=97; when 10=>d<=92;

31、when 11=>d<=87; when 12=>d<=81; when 13=>d<=76; when 14=>d<=70; when 15=>d<=64; when 16=>d<=58; when 17=>d<=52; when 18=>d<=46; when 19=>d<=41; when 20=>d<=35; when 21=>d<=30; when 22=>d<=25; when 23=>d<=20; when 24=>d&

32、lt;=16; when 25=>d<=12; when 26=>d<=9; when 27=>d<=6; when 28=>d<=4; when 29=>d<=2; when 30=>d<=1; when 31=>d<=0; when 32=>d<=0;-下降曲线 when 33=>d<=1; when 34=>d<=2; when 35=>d<=4; when 36=>d<=6; when 37=>d<=9; when 38=>d

33、<=12; when 39=>d<=16; when 40=>d<=20; when 41=>d<=25; when 42=>d<=30; when 43=>d<=35; when 44=>d<=41; when 45=>d<=46; when 46=>d<=52; when 47=>d<=58; when 48=>d<=64; when 49=>d<=70; when 50=>d<=76; when 51=>d<=81; when

34、52=>d<=87; when 53=>d<=92; when 54=>d<=97; when 55=>d<=101; when 56=>d<=105; when 57=>d<=109; when 58=>d<=112; when 59=>d<=114; when 60=>d<=116; when 61=>d<=117; when 62=>d<=118; when 63=>d<=119; -完成一个周期 when others=>NULL; en

35、d case; end if; end if; end process;end;分析:与三角波一样,正弦波也是采用点连成曲线的方法完成的。d、锯齿波实体框图程序清单:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity juchi is port(clk,clr:in std_logic; k:in integer range 0 to 255; -幅度选择信号 q:out integer range 0 to 255);end juchi;architecture juchi_arc o

36、f juchi isbegin process(clk,clr) variable num:integer range 0 to 255; variable ff:std_logic; -上升沿/下降沿判断标志,为0时上升,为1时下降 begin if clr='0' then -异步复位端 num:=0; elsif clk'event and clk='1' then -上升沿 if ff='0' then -ff=0,上升沿,直线 num:=k; ff:='1' else if num=7 then num:=0;

37、ff:='0' else num:=num-8; -ff=1,下降沿,每个脉冲减8 end if; end if; end if; q<=num; end process;end juchi_arc;分析:锯齿波建立在三角波的基础上,但在下降时用一条直线表示,周期是三角波的两倍。e、阶梯波实体框图程序清单:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jieti is port(clk,clr:in std_logic; k:in integer range

38、0 to 255; -幅度选择信号 y:out integer range 0 to 255);end;architecture jieti_arc of jieti issignal d,tmp:integer range 0 to 255;begin process(clk,clr,k,tmp) begin if clr='0' then d<=0; elsif clk'event and clk='1' then if tmp=63 then tmp<=0; else tmp<=tmp+1; end if; if k=255 th

39、en case tmp is when 00=>d<=255; -每八个脉冲一个台阶; when 07=>d<=191; when 15=>d<=127; when 23=>d<=63; when 31=>d<=0; when 39=>d<=63; when 47=>d<=127; when 55=>d<=191; when 63=>d<=255; when others=>d<=d; end case; elsif k=207 then case tmp is when 0

40、0=>d<=207; when 07=>d<=155; when 15=>d<=103; when 23=>d<=51; when 31=>d<=0; when 39=>d<=51; when 47=>d<=103; when 55=>d<=155; when 63=>d<=207; -完成一个周期 when others=>d<=d; end case; elsif k=167 then case tmp is when 00=>d<=167; -每八个脉冲一个

41、台阶; when 07=>d<=125; when 15=>d<=83; when 23=>d<=41; when 31=>d<=0; when 39=>d<=41; when 47=>d<=83; when 55=>d<=125; when 63=>d<=167; when others=>d<=d; end case; elsif k=119 then case tmp is when 00=>d<=119; -每八个脉冲一个台阶; when 07=>d<=8

42、9; when 15=>d<=59; when 23=>d<=29; when 31=>d<=0; when 39=>d<=29; when 47=>d<=59; when 55=>d<=89; when 63=>d<=119; when others=>d<=d; end case; end if; end if; end process; y<=d;end;分析:阶梯波每八个脉冲上升十个点。f、梯形波实体框图程序清单:library ieee;use ieee.std_logic_1164

43、.all;use ieee.std_logic_unsigned.all;entity tixing is   port(clk,clr:in std_logic;        k:in integer range 0 to 255;       -幅度选择信号        q:out integer range 0 to 255);end tixing;architect

44、ure a of tixing isbegin      process(clk,clr)          variable num,n:integer range 0 to 255; -n计数          variable ff:integer range 0 to 2;    -ff上升沿/下降沿判断标志,为0时上升,为1时上

45、底边,为2时下降   begin       if clr='0' then                                -异步复位端   

46、60;        num:=0;       elsif clk'event and clk='1' then               -上升沿         if ff=0 then  

47、0;        if num=k-7 then              num:=k;                          

48、60;           ff:=1;           else              num:=num+8;n:=n+1;           &#

49、160;          -ff=0,每个上升沿脉冲加8           end if;         elsif ff=1 then            if n=0 then   

50、60;          ff:=2;            else num:=num;                  n:=n-1;       

51、60;    end if;          else              if num=7 then                 num:=0;  

52、0;               ff:=0;              else                  num:=num-8;  

53、60;                      -ff=2,下降沿,每个脉冲减8              end if;           end if;        end if;        q<=num;       end process;end a; 分析:当输入幅度为255时,梯形波在前三分之一个周期在上升,中间三分之一保持高电平直线,后三分之一下降。仿真波形如上。3.5 输出模块实体框图程序清单:library ieee;

温馨提示

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

评论

0/150

提交评论