基于vhdl时钟、正弦波和方波实验报告设计说明书.doc_第1页
基于vhdl时钟、正弦波和方波实验报告设计说明书.doc_第2页
基于vhdl时钟、正弦波和方波实验报告设计说明书.doc_第3页
基于vhdl时钟、正弦波和方波实验报告设计说明书.doc_第4页
基于vhdl时钟、正弦波和方波实验报告设计说明书.doc_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

数字时钟、正弦波和方波实验报告 一:实验要求。设计一个时钟,能设置两个时间,到这两个时间能够控制自动响铃30秒。时间调整和定时的设置使用两个按钮实现。二:试验程序及说明。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK IS PORT(clk,k:IN STD_LOGIC;clk5,clk2: in std_logic; pb1,pb2: IN STD_LOGIC;pt1,pt2,ptml,ptmh,pthl,pthh: OUT std_logic_vector(3 downto 0); ring: OUT STD_LOGIC); END CLOCK;ARCHITECTURE ONE OF CLOCK ISsignal q1,q2,q3,q4,q5,q6:integer range 0 to 9;signal dq1,dq2,dq3,dq4,dq5,dq6:std_logic_vector(3 downto 0);signal dpa1,dpa2,dpa3,dpa4,dpb1,dpb2,dpb3,dpb4:std_logic_vector(3 downto 0);signal c1,c2,c3,c4: STD_LOGIC;signal clk1s,clk1m,clk1h: STD_LOGIC;signal hour: integer range 0 to 23;signal rhoura,rhourb:integer range 0 to 23;signal rminha,rminhb,rminla,rminlb: integer range 0 to 9;signal rhourha,rhourhb,rhourla,rhourlb: integer range 0 to 9;signal rhac,rhbc,rmac,rmbc: STD_LOGIC;signal sta: integer range 0 to 6;signal ringa,ringb:STD_LOGIC;signal fig:integer range 0 to 1;说明:clk:时钟基准信号,做正常走时的秒时钟信号。 clk2:用于在调整(校准)时间和设置闹铃时间时,相应的时钟位能闪烁。 clk5:用于使蜂鸣器响所需的1KHz的时钟。 pb1:用于调整时间的按钮。每按一下,相应的时钟位时钟加一。pb2:用于调整时钟的状态。正常走时状态0,设置时钟小时1,设置时钟分钟2,设置定时a小时时3,设置定时a分钟4,设置定时b小时5,设置定时b小时6,然后回到0。状态的变化根据pb1的信号变化。pb2用来改变设置值。 pt1:输出的秒时钟信号。 pt2:输出的10秒位信号。 ptml:输出的分钟信号的低位。ptmh:输出的分钟信号的高位。pthl:输出的小时信号的低位。pthh:输出的小时信号的高位。ring:输出的打铃信号,它和时钟信号clk5相与的结果作为蜂鸣器的输入信号。k:打铃开关信号,当为高电平时,打铃时间设置有效,到打铃时间,蜂鸣器会响;当为低电平时,到打铃时间,蜂鸣器不响。 下面的signal信号均为中间量,并不作为最终的输出信号。q1,q2,q3,q4,q5,q6:秒的高低位输出信号,分钟的高低位输出信号,小时的高低位输出信号。dq1,dq2,dq3,dq4,dq5,dq6:正常走时的时钟信号输出,相应的译码输出,分别对应:秒的高低位,分钟的高低位,小时的高低位。dpa1,dpa2,dpa3,dpa4,dpb1,dpb2,dpb3,dpb4:设置的打铃时间的小时和分钟的译码输出信号,分为a和b。dpa1,dpa2:a打铃时间的分钟的低高位,dpa3,dpa4:小时的低高位;dpb1,dpb2:b打铃时间的低高位,dpb3,dpb4:小时的低高位。c1,c2,c3,c4:c1:秒低位的进位信号,c2:秒高位的进位信号,c3:分钟的低位进位信号,c4:分钟的高位进位信号。clk1s,clk1m,clk1h:秒、分、时的时钟信号。hour:正常走时的小时输出信号。rhoura,rhourb:设置的打铃时间的输出小时信号。rminha,rminhb,rminla,rminlb:设置的打铃时间a和b的分钟输出信号。rhourha,rhourhb,rhourla,rhourl:设置的打铃时间a和b的小时输出信号。rhac,rhbc,rmac,rmbc:设置打铃信号的时钟基准信号。sta:状态标志位。ringa,ringb:a和b的打铃标志位。fig:数码管闪烁标志位。beginp1s:process(clk1s) -1s的计数 beginif clk1sEVENT and clk1s=1 thenif q1=9 thenq1=0;c1=1;elseq1=q1+1;c1=0;end if;end if;end process p1s;p10s:process(c1)-10s的计数 beginif c1EVENT and c1=1 thenif q2=5 thenq2=0;c2=1;elseq2=q2+1;c2=0; end if;end if;end process p10s;秒的低位进行计数。秒的高位进行计数p1m:process(clk1m)-1m的计数 beginif clk1mEVENT and clk1m=1 thenif q3=9 thenq3=0;c3=1;elseq3=q3+1;c3=0;end if;end if;end process p1m;p10m:process(c3)-10m的计数 beginif c3EVENT and c3=1 thenif q4=5 thenq4=0;c4=1;elseq4=q4+1;c4=0;end if;end if;end process p10m;分钟的低位计数分钟的高位计数p10h:process(hour)-10h的计数 beginif hour10 thenq5=hour;q6=0;elsif hour 20 thenq5=hour-10;q6=1;elseq5=hour-20;q6=2;end if;end process p10h;p1h:process(clk1h)-1h的计数 beginif clk1hEVENT and clk1h=1 thenif hour=23 thenhour=0;elsehour dq2 dq2 dq2 dq2 dq2 dq2 dq2 dq2 dq2 dq2 NULL;end case;end process;process(q1)-显示1s位begincase q1 iswhen 0= dq1 dq1 dq1 dq1 dq1 dq1 dq1 dq1 dq1 dq1 NULL;end case;end process;显示秒的低位显示秒的高位process(q4)-显示10m位begincase q4 iswhen 0= dq4 dq4 dq4 dq4 dq4 dq4 dq4 dq4 dq4 dq4 NULL;end case;end process;process(q3)-显示1m位begincase q3 iswhen 0= dq3 dq3 dq3 dq3 dq3 dq3 dq3 dq3 dq3 dq3 NULL;end case;end process;显示分钟的低位显示分钟的高位process(q6)-显示10h位begincase q6 iswhen 0= dq6 dq6 dq6 dq6 dq6 dq6 dq6 dq6 dq6 dq6 NULL;end case;end process;process(q5)-显示1h位begincase q5 iswhen 0= dq5 dq5 dq5 dq5 dq5 dq5 dq5 dq5 dq5 dq5 NULL;end case;end process;显示小时的低位显示小时的高位process(rmac)-定时分钟abeginif rmacEVENT and rmac=1 thenif rminla=9 thenrminla=0;if rminha=5 thenrminha=0;elserminha=rminha+1;end if;elserminla=rminla+1;end if;end if;end process;process(rhac)-判定定小时abeginif rhacEVENT and rhac=1thenif rhoura=23 thenrhoura=0;elserhoura=rhoura+1;end if;end if;end process;process(rhoura)-定时小时abeginif rhoura10 thenrhourla=rhoura;rhourha=0;elsif rhoura20 thenrhourla=rhoura-10;rhourha=1;else rhourla=rhoura-20;rhourha=2;end if;end process;说明:a的定时,小时的高位存在rhourh中,低位存在rhourla中;分钟的高 位存在rminha中,低位存在rminla中。process(rhbc)-判定定时bbeginif rhbcEVENT and rhbc=1 thenif rhourb=23 thenrhourb=0;elserhourb=rhourb+1;end if;end if;end process;process(rhourb)-定时小时bbeginif rhourb10 thenrhourlb=rhourb;rhourhb=0;elsif rhourb20 thenrhourlb=rhourb-10;rhourhb=1;else rhourlb=rhourb-20;rhourhb=2;end if;end process;process(rmbc)-定时分钟bbeginif rmbcEVENT and rmbc=1 thenif rminlb=9 thenrminlb=0;if rminhb=5 thenrminhb=0;elserminhb=rminhb+1;end if;elserminlb dpa2 dpa2 dpa2 dpa2 dpa2 dpa2 dpa2 dpa2 dpa2 dpa2 NULL;end case;end process;process(rhourha)-显示设置的a时间:小时高位begincase rhourha iswhen 0= dpa1 dpa1 dpa1 dpa1 dpa1 dpa1 dpa1 dpa1 dpa1 dpa1 NULL;end case;end process;process(rhourlb)-显示设置的b时间:小时低位begincase rhourlb iswhen 0= dpb2 dpb2 dpb2 dpb2 dpb2 dpb2 dpb2 dpb2 dpb2 dpb2 NULL;end case;end process;process(rhourhb)-显示设置的b时间:小时高位begincase rhourhb iswhen 0= dpb1 dpb1 dpb1 dpb1 dpb1 dpb1 dpb1 dpb1 dpb1 dpb1 NULL;end case;end process;process(rminla)-显示设置的a时间:分钟低位begincase rminla iswhen 0= dpa4 dpa4 dpa4 dpa4 dpa4 dpa4 dpa4 dpa4 dpa4 dpa4 NULL;end case;end process;process(rminha)-显示设置的a时间:分钟高位begincase rminha iswhen 0= dpa3 dpa3 dpa3 dpa3 dpa3 dpa3 dpa3 dpa3 dpa3 dpa3 NULL;end case;end process;process(rminlb)-显示设置的b时间:分钟低位begincase rminlb iswhen 0= dpb4 dpb4 dpb4 dpb4 dpb4 dpb4 dpb4 dpb4 dpb4 dpb4 NULL;end case;end process;process(rminhb)-显示设置的b时间:分钟高位begincase rminhb iswhen 0= dpb3 dpb3 dpb3 dpb3 dpb3 dpb3 dpb3 dpb3 dpb3 dpb3 NULL;end case;end process;-系统的状态如下:正常走时状态0,设置时钟小时1,设置时钟分钟2,-设置定时a小时时3,设置定时a分钟4,设置定时b小时5,设置定时b小时6-然后回到0。状态的变化根据pb1的信号变化。pb2用来改变设置值。process(pb1)beginif pb1EVENT and pb1=1 thenif sta=6 thensta=0;elsesta=sta+1;end if;end if;end process;-不同的状态链接不同的时钟信号clk1s=clk when sta7 else 0;clk1m=c2 when sta=0 or sta=1 or sta=3 or sta=4 or sta=5 or sta=6 elsepb2 when sta=2 else 0;clk1h=c4 when sta=0 or sta=2 or sta=3 or sta=4 or sta=5 or sta=6 elsepb2 when sta=1 else 0;rhac=pb2 when sta=3 else 0;rmac=pb2 when sta=4 else 0;rhbc=pb2 when sta=5 else 0;rmbc=pb2 when sta=6 else 0;说明:当状态不同时,相应显示出 来的小时和分钟所代表的义不同。分别为正常走时(0)校准时间(1、2)、打铃时间a(3、4)和打铃时间b(5、6)。process(clk2)-让数码管在调整和设置时间时闪烁beginif clk2EVENT and clk2=1 thenif fig=1 thenfig=0;elsefig=fig+1;end if;end if;end process;-根据状态的不同做出相应的显示-fig为1,时间输出,fig为0,则无输出-从而实现了数码管的闪烁pthh=dpa1 when sta=3 and fig=1 else dpb1 when sta=5 and fig=1 else dq6 when sta=0 or (sta=1 and fig=1) or sta=2 or sta=4 or sta=6 else 0000;pthl=dpa2 when sta=3 and fig=1 else dpb2 when sta=5 and fig=1 else dq5 when sta=0 or (sta=1 and fig=1) or sta=2 or sta=4 or sta=6 else 0000;ptmh=dpa3 when sta=4 and fig=1 else dpb3 when sta=6 and fig=1 else dq4 when sta=0 or (sta=2 and fig=1) or sta=1 or sta=3 or sta=5 else 0000;ptml=dpa4 when sta=4 and fig=1 else dpb4 when sta=6 and fig=1 else dq3 when sta=0 or (sta=2 and fig=1) or sta=1 or sta=3 or sta=5 else 0000;pt1=dq1;pt2=dq2;说明:当fig为1时,数码管显示相应的数, 当fig为0时,数码管显示0(由于硬件电路中,数码管无法消隐,所以无法让它变暗)。如此,fig的值通过时钟信号clk2来控制是0还是1,从而实现了数码管的闪烁显示。-打铃信号产生用比较器处理ringa=1 when hour=rhoura and rminha=q4 and rminla=q3 and k=1 and q23 else 0;ringb=1 when hour=rhourb and rminhb=q4 and rminlb=q3 and k=1 and q23 else 0;ring=(ringa or ringb)and clk5;END ONE;说明:上面的程序,根据状态的不同,让显示模块显示的含义不同。在校准时钟或者在设置打铃时间时,当调整相应的位能闪烁的同时,其他的位照常显示。说明:由于打铃时间有两个(a和b),所以不管哪个打铃时间到了都要打铃。而蜂鸣器是交流的,所以要与上一个时钟信号clk5(1024Hz)。如此,到了打铃时间才会打铃30秒。三:时序仿真。新建一个波形文件。设置仿真截止时间为1毫秒。列出各个管脚。将这些管脚拖到波形文件中,并设置相应的输入信号:以下是设置一个打铃信号a为00:04:00。clk的时间设置如下:输出管脚pt1、pt2、ptml、ptmh、pthl、pthh的输出波形的形式设置为19的整数形式如下:设置完相应的输入输出信号后,点击运行,结果如下:由上面的仿真结果可知,当时钟到达00:04:00时间时,打铃信号产生,并维持了30秒。下面进行两种打铃信号的时序仿真:此时,设置了a打铃时间为:00:05:00.此时设置了b打铃时间为:00:07:00.。运行时序仿真结果如下:此时序图说明:当时钟走到00:05:00时,产生了打铃信号a,并维持了30秒。此时序图说明:当时钟走到了:00:07:00时,产生了打铃信号b,并维持了30秒。四:下载。管脚配置。说明:硬件电路用的是模式7。相应的管脚配置如下:下载:硬件装载:点击“Start”,将程序下载到硬件中。正弦波发生器实验 07电子 马路 0736065一:实验要求。应用的DDS原理,设计一个正弦波的信号发生器,频率可调。二:实验电路及程序代码说明。顶层文件为下图。在Quartus中新建一个项目,命名为dds。在该工程中新建一个block文件,用于设计顶层文件。右击界面,进入“symbol”文件中:在“symbol”中找到“LPM_ROM”元件符号,点击OK。保存ROM数据的文件到工程中,命名为:data_rom。修改相应的设置。Rom中的数据取自文件:rom.mif。最后点击完成即可。生成的rom元件如下:创建rom.mif文件如下。打开的:点击OK,得到数据列表:保存文件。用C程序向mif文件中写入数据。#include #include #define PI 3.14159265main()int i;float s;FILE *fp;if(fp=fopen(rom.mif,w)=NULL)printf(can not creat filen);exit(-1);for(i=0;i1024;i+)s=sin(2.0*PI*i/1024.0);fprintf(fp,%d : %d;n,i,(int)(s+1)*1023/2);fclose(fp);把生成的数据拷贝到rom.mif文件中的相应位置即可。为了实现DDS,需要一个相位加法器。而完成相位加法器功能的是一个32位的加法器ADDER32B和一个32位的寄存器REG32B,把他们顺次链接起来即可构成一个相位加法器。生成的32位的加法器元件:其设计如下:新建一个VHDL文件,代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER32B ISPORT(A:IN STD_LOGIC_VECTOR(31 DOWNTO 0); B:IN STD_LOGIC_VECTOR(31 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ADDER32B;ARCHITECTURE ONE OF ADDER32B ISBEGINS=A+B;END ONE;将其生成元件。生成的32位的寄存器元件:代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT(LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END REG32B;ARCHITECTURE ONE OF REG32B ISBEGINPROCESS(LOAD,DIN)BEGINIF LOADEVENT AND LOAD=1 THENDOUT=DIN;END IF;END PROCESS;END ONE;链接关系:由于使用的M是32位的,如果要精确的取值就必须在rom中存入个数据,同时所用的DA芯片必须是32位的,而所要用来设置频率的按键也必须有32个,但是试验箱中无法办到,所以取采样中间的8个位,分别为:2316。为此就要有个能把32位中间8位给输出来的8位寄存器。生成的元件如下:代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG8B ISPORT(LOAD1:IN STD_LOGIC; DIN1:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END REG8B;ARCHITECTURE ONE OF REG8B ISBEGINPROCESS(LOAD1,DIN1)BEGINIF LOAD1EVENT AND LOAD1=1 THENDOUT1SET THENDOUT2=10000000;ELSIF DIN2=SET THEN DOUT2=10000000;ELSE DOUT2=00000000;END IF;END PROCESS;END ONE;为了便于观察方波的变化,这里把DDS设置为固定频率,即相位输出为定值。32位的高位:3118位全零,低位:170位为全1。占空比通过SET7.0信号调节。时钟信号clk用的是FPGA芯片上的固有频率20M。三:仿真。仿真时,为了提高仿真的效率,可以不加锁相环。如下:仿真波形设置:仿真后的波形:由仿真结果可知,产生了方波。四:下载。管脚设置。电路模式为5。下载: 39大学本科生毕业设计(论文)撰写规范本科生毕业设计(论文)是学生在毕业前提交的一份具有一定研究价值和实用价值的学术资料。它既是本科学生开始从事工程设计、科学实验和科学研究的初步尝试,也是学生在教师的指导下,对所进行研究的适当表述,还是学生毕业及学位资格认定的重要依据。毕业论文撰写是本科生培养过程中的基本训练环节之一,应符合国家及各专业部门制定的有关标准,符合汉语语法规范。指导教师应加强指导,严格把关。1、论文结构及要求论文包括题目、中文摘要、外文摘要、目录、正文、参考文献、致谢和附录等几部分。1.1 题目论文题目应恰当、准确地反映论文的主要研究内容。不应超过25字,原则上不得使用标点符号,不设副标题。1.2 摘要与关键词1.2.1 摘要本科生毕业设计(论文)的摘要均要求用中、英两种文字给出,中文在前。摘要应扼要叙述论文的研究目的、研究方法、研究内容和主要结果或结论,文字要精炼,具有一定的独立性和完整性,摘要一般应在300字左右。摘要中不宜使用公式、图表,不标注引用文献编号,避免将摘要写成目录式的内容介绍。1.2.2 关键词关键词是供检索用的主题词条,应采用能覆盖论文主要内容的通用技术词条(参照相应的技术术语标准),一般列35个,按词条的外延层次从大到小排列,应在摘要中出现。1.3 目录目录应独立成页,包括论文中全部章、节的标题及页码。1.4 论文正文论文正文包括绪论、论文主体及结论等部分。1.4.1 绪论绪论一般作为论文的首篇。绪论应说明选题的背景、目的和意义,国内外文献综述以及论文所要研究的主要内容。文管类论文的绪论是毕业论文的开头部分,一般包括说明论文写作的目的与意义,对所研究问题的认识以及提出问题。绪论只是文章的开头,不必写章号。毕业设计(论文)绪论部分字数不多于全部论文字数的1/4。1.4.2 论文主体论文主体是论文的主要部分,要求结构合理,层次清楚,重点突出,文字简练、通顺。论文主体的内容要求参照大学本科生毕业设计(论文)的规定第五章。论文主体各章后应有一节“本章小结”。1.4.3 结论结论作为单独一章排列,但不加章号。结论是对整个论文主要成果的归纳,要突出设计(论文)的创新点,以简练的文字对论文的主要工作进行评价,一般为4001 000字。1.5 参考文献参考文献是论文不可缺少的组成部分,它反映了论文的取材来源和广博程度。论文中要注重引用近期发表的与论文工作直接有关的学术期刊类文献。对理工类论文,参考文献数量一般应在15篇以上,其中学术期刊类文献不少于8篇,外文文献不少于3篇;对文科类、管理类论文,参考文献数量一般为1020篇,其中学术期刊类文献不少于8篇,外文文献不少于3篇。在论文正文中必须有参考文献的编号,参考文献的序号应按在正文中出现的顺序排列。产品说明书、各类标准、各种报纸上刊登的文章及未公开发表的研究报告(著名的内部报告如PB、AD报告及著名大公司的企业技术报告等除外)不宜做为参考文献引用。但对于工程设计类论文,各种标准、规范和手册可作为参考文献。引用网上参考文献时,应注明该文献的准确网页地址,网上参考文献不包含在上述规定的文献数量之内。1.6 致谢对导师和给予指导或协助完成论文工作的组织和个人表示感谢。内容应简洁明了、实事求是,避免俗套。1.7 附录如开题报告、文献综述、外文译文及外文文献复印件、公式的推导、程序流程图、图纸、数据表格等有些不宜放在正文中,但有参考价值的内容可编入论文的附录中。2、论文书写规定2.1 论文

温馨提示

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

评论

0/150

提交评论