8位十进制显示数字频率计(带周期)设计报告(共16页).doc
-
资源ID:13569366
资源大小:1.09MB
全文页数:16页
- 资源格式: DOC
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
8位十进制显示数字频率计(带周期)设计报告(共16页).doc
精选优质文档-倾情为你奉上EDA期末考试设计报告 设计题目:8位十进制显示数字频率计(带周期测量) 学校:梧州学院 系别:电子信息工程系 班别:09电本2班 姓名:陈迪学号:5 组员:刘芸云 王缉俭 指导老师:黄玉健一、 设计内容:8位十进制显示数字频率计(带周期测量)。二、设计目的与要求:1、 设计电路实现测量1Hz方波信号的频率以及其周期,并以十进制的方式显示。2、 要求其数值用七段LED数码管或液晶屏显示。3、 在实验系统上硬件测试,验证此设计的功能。4、 画出实体图,设计原理图,要求用Protel设计出具体的电路原理图。三、设计原理:8位十进制显示数字频率计(带周期测量)是由8位十进制频率计、8位十进制周期测量器和带锁存功能的64选32数据选择器构成。频率计基准信号采用8Hz的方波信号,而周期测量采用基准信号为50MHz的方波信号。其中,频率计和周期测量由相同的32位数据锁存器和8位十进制计数器及不同的测频控制电路构成。为使电路设计更加简单快捷,且方便阅读与理解,本电路使采用模块化的设计思想,先由VHDL源程序对各个模块进行独立编写、测试,然后封装,再用原理图方式进行连接、整合与波形和硬件仿真。例如将用CLOCK5、CLOCK2输入标准频率,CLOCK0输入被测频,用数码管显示频率和周期。Protel设计原理图:1、 频率测量的基本原理:根据频率的定义,若某一信号在T时间内重复变化N次,则可知该信号的频率为:f =N/T 对此可采用数字逻辑电路中的门电路来实现,如图:在与门端加入被测信号,另一端加宽度为T1的控制信号(称闸门信号),输出端仅能在T1时间内有波形的出现,然后送入计数器计数,得N*T2=T1所以f =N/T1。进一步分析可知,多周期测量可以减小误差。因此,电路设计时我们采用基准信号的8个周期为一个T1。如图CNT-EN信号 在T1时间结束的同时输出一个作用于计数器锁存信号load,在下一个T1来临前输出一个清零信号RST使得计数器复位,为下一次测量做好准备。电路的基准信号为8Hz,由方程可知f=N/(8*(1/8))=N,从而计数器的数值就是被测信号的频率。2、 测量周期的基本原理:如图所示为计数器测量信号周期的原理框图。它是由上图的 标准信号和输入信号位置对调而构成的。可以看出,被测信号经过放大后,形成闸门信号,周期为T2。标准频率的周期为T1,在闸门时间内,标准频率通过闸门形计数脉冲,送至计数器计数,进过译码显示为N。所以T2=N*T1=N/f1。同理,多周期测量也可减小误差,但是由于被测信号为测频控制信号,当被测信号频率较低时,测量需要较长时间,因此我们的电路只采用被测信号的2倍周期进行测量。 为使能测量更高的频率,我们采用了50MHz的信号为计数信号。电路同样设置了锁存和清零的输出信号,同时为防止高频率时锁存和清零过快,电路在闸门时间结束后设置了较长的过渡时间。由方式T=N/(2*50M)=N/,所以数码管显示的最高位位权为0.1依次类推为0.01一直到小数点后8位。当信号小于1Hz和大于100MHz时都超出量程。3、8位十进制计数器的构成:用VHDL语言设计带进位的1位十进制计数器,然后封装如图,再用8个1位计数器和与门连接成8位的十进制计数器。四、 利用VHDL语言来实现各个结构模块:1.带进位的1位10进制计数器COUNTER .VHD带进位的一位十进制计数器 LIBRARY IEEE;-带进位的一位十进制计数器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-允许用户对操作符重新定义 ENTITY COUNTER ISPORT(CLK,RST,EN: IN STD_LOGIC;-clk时钟频率,rst清零,en使能端 DOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-4位输出到7段数码管 COUT:OUT STD_LOGIC-进位信号 );END COUNTER;ARCHITECTURE one OF COUNTER ISBEGINPROCESS(CLK,RST,EN)-时钟,清零,使能为敏感信号 VARIABLE Q: STD_LOGIC_VECTOR(3 DOWNTO 0);-定义变量Q为4位 BEGINIF RST='1' THEN Q:=(OTHERS =>'0');-如果rst为高电平,变量Q清零 ELSIF CLK'EVENT AND CLK='1' THEN-否则,若clk为上升沿,即上升沿触发 IF EN='1' THEN IF Q<9 THEN Q:=Q+1;-使能端高电平有效,当Q小于9时,自加1 ELSE Q:=(OTHERS=>'0');-否则清零 END IF;END IF;END IF;IF Q ="1001" THEN COUT<='1' -当Q为9时输出进位信号 1 ELSE COUT <='0'END IF; -否则输出 0 DOUT<=Q;-把变量信号输出 END PROCESS;END one; 2.32位锁存器REG32B.VHDLIBRARY IEEE; -32位锁存器 USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT ( LK : 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 ISBEGIN PROCESS(LK, DIN) BEGIN IF LK'EVENT AND LK = '1' THEN DOUT <= DIN;-上沿边触发锁存 END IF; END PROCESS;END one; 3.基准频率为8HZ的测频控制电路FTCTRL.VHDLIBRARY IEEE; -频率为8HZ的测频控制电路,用于频率计 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS PORT (CLKK : IN STD_LOGIC; - 8Hz CNT_EN : OUT STD_LOGIC; - 计数器时钟使能 RST_CNT : OUT STD_LOGIC; - 计数器清零 Load : OUT STD_LOGIC ); - 输出锁存信号 END FTCTRL;ARCHITECTURE one OF FTCTRL IS SIGNAL M: STD_LOGIC; SIGNAL C: STD_LOGIC_VECTOR(3 DOWNTO 0 );-计数信号 BEGIN K1:PROCESS( CLKK,C )-16分频 BEGIN IF RISING_EDGE(CLKK)THEN IF(C="1111") THEN C<="0000" ELSE C<=C+1;END IF;-计数为15是清零 IF(C="0001") THEN M<=NOT M;ELSIF (C="1001") THEN M<=NOT M;-由1开始跳变,变到9时跳变 END IF;END IF; END PROCESS;CNT_EN <= M; -输出16分频后的波形Load<=NOT M;-输出锁存信号 F2:PROCESS (C,M)- 产生计数器清零信号 BEGIN IF (C="1101")AND M='0' THEN RST_CNT<='1'ELSE RST_CNT<='0'END IF;-计数为13时为1,否则为0 END PROCESS;END one; 4. 基准频率为50MHZ的测频控制电路FTCTRL2.VHDLIBRARY IEEE; -频率为50MHZ的测频控制电路,USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL2 IS PORT (CLKK2 : IN STD_LOGIC; - 50MHz CNT_EN2 : OUT STD_LOGIC; - 计数器时钟使能 RST_CNT2 : OUT STD_LOGIC; - 计数器清零 Load2 : OUT STD_LOGIC ); - 输出锁存信号 END FTCTRL2;ARCHITECTURE one OF FTCTRL2 IS SIGNAL M: STD_LOGIC; SIGNAL C: STD_LOGIC_VECTOR(3 DOWNTO 0 );-计数信号 BEGIN K1:PROCESS( CLKK2,C )-分频 BEGIN IF RISING_EDGE(CLKK2)THEN IF(C="1111") THEN C<="0000" ELSE C<=C+1;END IF;-清零 IF(C="0001") THEN M<=NOT M;ELSIF (C="0011") THEN M<=NOT M;-由1开始跳变? END IF;END IF; END PROCESS;CNT_EN2 <= M; -输出分频后的波形Load2<=NOT M;-锁存信号 F2:PROCESS (C,M,CLKK2)- 产生计数器清零信号 BEGIN IF C="1010" AND(M='0')AND CLKK2='0' THEN RST_CNT2<='1'ELSE RST_CNT2<='0'END IF;-计数为0时为1,否则为0 END PROCESS;END one; 5. 带锁存的2选1数据选择器MUX2.VHDlibrary ieee;use ieee.std_logic_1164.all;entity mux2 is -64位输入的2选1数据选择器 port (L1,L2:OUT STD_LOGIC; -L1锁存指示灯,L2信号选通灯 S,EN:in std_logic;-选择,锁存AIN,BIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);-输入通道ADOUT3:out STD_LOGIC_VECTOR(31 DOWNTO 0)-数据输出 );end entity mux2;architecture one of mux2 isSIGNAL M:STD_LOGIC_VECTOR(31 DOWNTO 0);-寄存 begin process(AIN,BIN,S,EN)beginIF EN='0' THEN-非0锁存 if S='1' then M<=AIN;else M<=BIN;-选通 end if;END IF;end process;DOUT3<=M;L1<=EN;L2<=S;end architecture one ;五、 利用原理图来完成各个模块的链接与功能的实现:1.8位十进制计数器功能的实现:先编译COUNTER .VHD生成原理图文件,如下图: ,再用元件库中的与门与其链接,然后加上输入输出端口,从而完成电路。具体链接如下:电路完成编译后,继续生产如下原理图文件,为下一阶段工作做好准备。2.8位频率计功能的实现:先编译REG32B.VHD和FTCTRL.VHD,分别生成原理图文件,如下图: 和 。再与上面的8位十进制计数器原理图文件与端口进行链接,完成计数器功能电路。具体链接如下:同时,电路完成编译后,继续生产如下原理图文件,为下一阶段工作做好准备。3. 周期测量功能的实现:先编译FTCTRL2.VHD生成原理图文件,如下图:,再用已经编译生成的计数器和锁存器原理图链接,完成周期测量功能电路。具体链接如下。电路完成编译后,也生产如下原理图文件,为下一阶段工作做好准备。3. 顶层文件用原理图表示实现测频测周功能,设计如下:编译数据选择器MUX2.VHD生成原理图文件,如图:然后与已经生成的测频和测周的原理图文件进行连接,生成带有锁存和选通功能,可显示频率和周期的频率计。设计如下:六 编译仿真、下载:1、 波形仿真:设计好程序后便保存进行编译,查错,修改,成功后,进行仿真,观察波形。如下图:PCLK的基准频率为50MHz,但在综合仿真时,过高的频率需要较长的仿真时间,为了提高软件的效率,PCLK在仿真时设置基准频率为32Hz,FCLK设置为8Hz,测试频率为16Hz.同时对锁存以及选通进行测试。在不同的选通状态下,由方程可知周期T=N/64和f=N。波形仿真结果T=4/64=0.0625s,f=16Hz,经检验,波形正确。2、引脚分配:选用实验模式5,键1(PIO 0)用于锁存信号,cloke2的8Hz用于频率基准信号,cloke0用于被测频率的输入,键2(PIO1)用于选通信号,D1用于锁存指示灯,D2用于选通指示灯,8个数码管用于显示频率或周期大小。具体引脚分配如下:信号名 引脚名EN PIN_8 DATAOUT30PIN_95FCLKPIN_54DATAOUT31PIN_96FINPIN_126L1ENPIN_20L2SPIN_21PCLKPIN_124SPIN_9DATAOUT0 PIN_30DATAOUT1 PIN_31DATAOUT2 PIN_32DATAOUT3PIN_33DATAOUT4PIN_36DATAOUT5PIN_37DATAOUT6PIN_38DATAOUT7PIN_39DATAOUT8PIN_41DATAOUT9PIN_42DATAOUT10PIN_65DATAOUT11PIN_67DATAOUT12PIN_68DATAOUT13PIN_69DATAOUT14PIN_70DATAOUT15PIN_72DATAOUT16PIN_73DATAOUT17PIN_78DATAOUT18PIN_79DATAOUT19PIN_80DATAOUT20PIN_81DATAOUT21PIN_82DATAOUT22PIN_83DATAOUT23PIN_86DATAOUT24PIN_87DATAOUT25PIN_88DATAOUT26PIN_89DATAOUT27PIN_90DATAOUT28PIN_913、 硬件测试:再次编译程序,成功后,下载到实验箱EP1K30TC144-3FPGA中,选用模式5,拨下显示开关拨码4。键2未按下时,输入低电平,8个数码管显示为cloke0所选信号的频率。当按下键1,输出高电平,D1亮,信号被锁存,数码管数字不发生改变。按起键1,停止锁存,使D1灭。按下键2,使其输入高电平,周期选通灯D2亮,8个数码管显示为cloke0所选信号的周期。按下键1,D1亮起,信号再次被锁存,数码管数字不变。注释:超出量程时,显示值为0。通过实物验证,该设计满足所要求的各个功能,达到了设计要求与目的。七、设计结论与总结:1、本设计利用计数器和闸门原理来测试信号的频率与周期,完成8位十进制频率计(周期)的功能。2、本设计可以完全通过VHDL语言来描述,也可以用原理图的方法来实现。通过用两种方法的结合,提高了工作效率,并让我们进一步对Quartus的操作以及VHDL语言有了更深的理解。3、通过此设计实验,让我们对EDA课程有了更深的了解,它不仅功能强大,富于实用性,并且在未来的发展中还有非常广阔的应用前景。同时,实验过程中,我们也体会到了团队合作的力量,以及团队精神的重要。4、感谢黄玉健老师的悉心指导。专心-专注-专业