




免费预览已结束,剩余15页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA的数字系统设计数字频率计设计报告学 号: 2803201008 姓 名:刘 璐 专 业: 集成电路设计与集成系统 实验室:211楼308 设计时间: 2011. 9. 262011. 10. 12一、实验名称数字频率计的设计二、实验地点211楼308三、实验目的和任务(1) 了解数字电路设计的基本特点 (2) 了解数字频率计电路的基本原理 (3) 基本掌握 ISE 软件的使用(设计输入、仿真、实现) (4) 了解可编程逻辑器件( FPGA )的一般情况 (5) 基本掌握 HDL 的使用四、实验内容(1) 设计出符合设计要求的解决方案 (2) 设计出单元电路 (3) 利用 EDA 软件对各单元电路及整体电路进行仿真 (4)利用 EDA 软件在 ELB 电子课程设计实验板实现设计 (5) 观察实验结果五、项目需用仪器设备名称以及所需主要元器件PC 机、EDA教学实验系统一台,带有(SPARTAN -3A XC3S200A芯片 ,LED 管 , 七段数码管 等)的实验板一块 , 跳线、下载电缆一根,函数发生器。六、实验任务与要求频率测量范围为10Hz10MHz,用6只数码管以kHz为单位显示测量结果;有三个带锁按键开关(任何时候都只会有一个被按下)用来选择1S、0.1S和0.01S三个闸门时间中的一个;有一个按钮开关用来使频率计复位;有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。数字频率计的相关技术指标如下:1、位数:测量频率通过LED数码管为六位十进制数显示。2、测试频率范围为:10HZ-10MHZ。3、计数器溢出时要有溢出标志over。4、需要有闸门标志gate。5、显示工作方式:a、用BCD七段共阳极数码管显示读数,只有在读数不发生跳变时才是正确的结果。b、采用记忆显示方法,即在一次测试结束时,显示测试结果,此显示值一直保留到下次测量显示数到来,才将上次显示更新。用第二次测试结果,更新显示值。6、要求被测输入信号应是符合数字电路要求的脉冲波。七、VHDL设计环境介绍VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA /CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。VHDL主要特点有:(1)功能强大、设计灵活(2)支持广泛、易于修改(3)强大的系统硬件描述能力(4)独立于器件的设计、与工艺无关(5)很强的移植能力(6)易于共享和复用VHDL系统优势:(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 (3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。 (4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。 (5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。八、实验原理所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。若在一定时间内计得这个周期信号变化的次数为N,则其频率可表达为: (1)电子技术器可以严格按公式(1)所表达的频率的定义进行测频,其原理方框图如图1所示:计数器闸门放大整形门控电路时基信号发生器 图1 测频原理图 首先,把被测信号(以正弦波为例)通过放大整形电路变成脉冲(实际上变成方波即可)其重复频率等于被测频率,然后将它加到闸门的一个输入端。闸门通过门控信号来控制开、闭时间,只有在闸门开通时间T内,被计数的脉冲才能通过闸门,被送到十进制电子计数器进行计数。门控信号的时间T是非常准确的,以它作为时间基准,它由时基发生器提供。时基信号发生器由一个高稳定的石英振荡器和一系列数字分频器组成,由它输出的标准时间脉冲(时标)去控制门控电路形成门控信号。比如,时标信号的重复周期为1S,则加到闸门的门控信号作用时间T及闸门时间亦准确的等于1S,及闸门开通时间为1S,这时若计得10000个数,则有(1)式知,被测频率。从以上讨论可知,电子计数器的测频原理实质上以比较法为基础,它将和时基信号频率相比,两个频率相比的结果以数字的形式显示出来。9、 设计过程10、 1、原理框图被测信号输入放大整形闸门计数器锁存器Over被测频率显示扫面显示控制子系统(包括显示译码和扫描控制)门控电路分频器石英振荡器GateGateclearLatch基准信号 图2 原理框图2、各模块功能及实现一、数字频率计源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity m10_counter isport(rst,clk2:in std_logic; count_out0,count_out1,count_out2,count_out3,count_out4,count_out5:out std_logic_vector(3 downto 0); over: out std_logic);end m10_counter;architecture Behavioral of m10_counter issignal m10_counter0,m10_counter1,m10_counter2,m10_counter3,m10_counter4,m10_counter5:std_logic_vector(3 downto 0);signal over_1:std_logic;BEGINprocess(rst,clk2)beginif(rst=1)thenover_1=1; m10_counter0=0001; m10_counter1=0000; m10_counter2=0000; m10_counter3=0000; m10_counter4=0000; m10_counter5=0000;elsif(clk2event and clk2=1)thenif m10_counter01001 then m10_counter0= m10_counter0+1;else m10_counter0=0000; m10_counter1= m10_counter1+1; if m10_counter11001 then m10_counter1= m10_counter1+1;else m10_counter1=0000; m10_counter2= m10_counter2+1; if m10_counter21001 then m10_counter2= m10_counter2+1;else m10_counter2=0000; m10_counter3= m10_counter3+1; if m10_counter31001 then m10_counter3= m10_counter3+1;else m10_counter3=0000; m10_counter4= m10_counter4+1; if m10_counter41001 then m10_counter4= m10_counter4+1;else m10_counter4=0000; m10_counter5= m10_counter5+1;end if;end if;end if;end if;end if;end if;if m10_counter5=1010thenover_1=0;end if;end process;over=over_1;count_out0=m10_counter0;count_out1=m10_counter1;count_out2=m10_counter2;count_out3=m10_counter3;count_out4=m10_counter4;count_out5=m10_counter5;end Behavioral;模块图:仿真波形:二、锁存器如果计数器输出直接与译码器相连,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,加锁存器后,则不再跳变,便可清晰读出计数结果。由测频控制模块产生的latch信号来提供锁存脉冲。其生成的功能模块如下图所示:源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity latch isport(over_in,f_hz:in std_logic; counter0,counter1,counter2,counter3,counter4,counter5:in std_logic_vector(3 downto 0); over_out:out std_logic; d0_out,d1_out,d2_out,d3_out,d4_out,d5_out:out std_logic_vector(3 downto 0); end latch;architecture Behavioral of latch isbeginprocess(f_hz,counter0,counter1,counter2,counter3,counter4,counter5)beginif f_hzevent and f_hz=1 thenover_out=over_in; d0_out=counter0; d1_out=counter1; d2_out=counter2; d3_out=counter3; d4_out=counter4; d5_out=counter5;end if;end process;end Behavioral;模块图:三、分频器分频器的功能是提供标准闸门时间控制信号以精确控制计数器的开闭。本设计石英振荡器提供的标准频率是48MHz,采用计数器分频输出四个信号1Hz,10Hz,100Hz,1KHz。 源程序:library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;use IEEE.STD_LOGIC_ARITH.all;entity clk_div is port(rst:in std_logic; clk: in STD_LOGIC; f1hz: out STD_LOGIC; f10hz: out STD_LOGIC; f100hz: out STD_LOGIC; f1khz: out STD_LOGIC);end clk_div;- End of automatically maintained sectionarchitecture rtl of clk_div issignal count_1hz:std_logic_vector(26 downto 0);signal clkout_1hz:std_logic; signal count_10hz:std_logic_vector(26 downto 0);signal clkout_10hz:std_logic;signal count_100hz:std_logic_vector(26 downto 0);signal clkout_100hz:std_logic;signal count_1khz:std_logic_vector(26 downto 0);signal clkout_1khz:std_logic;beginP_F1HZ:process(clk,clkout_1hz,rst)beginif(rst=0)then count_1hz0); elsif rising_edge(clk) thencount_1hz=count_1hz+1;if count_1hz24000000 then clkout_1hz=0; else clkout_1hz=1;if count_1hz=48000000 then count_1hz0);end if;end if;end if; f1hz=clkout_1hz; end process P_F1HZ;P_F10HZ:process(clk,clkout_10hz,rst)beginif(rst=0)then count_10hz0); elsif rising_edge(clk) thencount_10hz=count_10hz+1;if count_10hz2400000 then clkout_10hz=0; else clkout_10hz=1;if count_10hz=4800000 then count_10hz0);end if;end if;end if; f10hz=clkout_10hz; end process P_F10HZ;P_F100HZ:process(clk,clkout_100hz,rst)beginif(rst=0)then count_100hz0); elsif rising_edge(clk) thencount_100hz=count_100hz+1;if count_100hz240000 then clkout_100hz=0; else clkout_100hz=1;if count_100hz=480000 then count_100hz0);end if;end if;end if; f100hz=clkout_100hz; end process P_F100HZ;P_F1KHZ:process(clk,clkout_1khz,rst)beginif(rst=0)then count_1khz0); elsif rising_edge(clk) thencount_1khz=count_1khz+1;if count_1khz24000 then clkout_1khz=0; else clkout_1khz=1;if count_1khz=48000 then count_1khz0);end if;end if;end if; f1khz=clkout_1khz; end process P_F1KHZ; end rtl;模块图:仿真波形:四、测频控制器测频控制器是控制整个频率计各模块进行时序工作的控制装置,它对输入的标准时钟信号进行变换,产生我们所需要的三个闸门信号GATE,锁存信号LATCH以及清零信号rst。计数清零信号也由测频控制器变换后输出,控制整个电路。测频控制器的计数使能信号Gate能产生一个周期信号,并对频率计的计数器使能端进行同步控制。当Gate为高电平时,允许计数,为低电平时停止计数,并保持其所计得脉冲数。在停止计数期间,首先需要一个锁存信号latch的上升沿将计数器在前一秒的计数值锁存进24位锁存器Latch中,并由外部的7段译码器译出,并稳定显示。锁存信号之后,必须有一清零信号clear对计数器清零,为下一秒的计数操作准备。源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity chepinkongzhi isport(clr,f_hz:in std_logic;rst,latch,gate:out std_logic);end chepinkongzhi;architecture Behavioral of chepinkongzhi issignal g1,g2:std_logic;beginprocess(f_hz,clr)beginif(clr=0)theng1=0;elsif rising_edge(f_hz)theng1=not g1;end if;if falling_edge(f_hz)theng2=not g1;end if;end process ;rst=(not f_hz) and (not g1) and (g2);gate=g1;latch=g2;end Behavioral;模块图:仿真波形:五,门控模块本模块通过p1,p2,p3三个开关来控制闸门时间,同时输出位选信号dig(2:0)以及闸门标志light。源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity controler isport(f1hz: in std_logic; f10hz:in std_logic; f100hz:in std_logic; p1,p2,p3:in std_logic; f_hz,light:out std_logic; dp:out std_logic_vector(5 downto 0);end controler;architecture Behavioral of controler isbeginprocess(f1hz,f10hz,f100hz,p1,p2,p3)beginif(p1=0 and p2=1 and p3=1)then f_hz=f1hz;dp=110111;light=0;elsif(p2=0 and p1=1 and p3=1 )then f_hz=f10hz;dp=111011;light=0;elsif(p3=0 and p1=1 and p2=1)then f_hz=f100hz;dp=111101;light=0;else f_hz=Z;light=1;end if;end process;end Behavioral;模块图:仿真波形图:六、扫描显示控制系统本模块通过用一个频率1KHZ的信号扫描一个多路选择器,实现对六位已经锁存的计数结果,标点符号控制信号,位选信号的扫描输出。最终的输出接译码器实现数字显示。源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity mux isport(clk,rst:in std_logic;data_in_0:in std_logic_vector(3 downto 0); data_in_1:in std_logic_vector(3 downto 0); data_in_2:in std_logic_vector(3 downto 0); data_in_3:in std_logic_vector(3 downto 0); data_in_4:in std_logic_vector(3 downto 0); data_in_5:in std_logic_vector(3 downto 0); sel:in std_logic_vector(5 downto 0);data_out:out std_logic_vector(3 downto 0);dig:out std_logic_vector(2 downto 0);dp1:out std_logic);end mux;architecture Behavioral of mux issignal count:std_logic_vector(2 downto 0);beginprocess(rst,clk,sel,data_in_0,data_in_1,data_in_2,data_in_3,data_in_4,data_in_5)beginif(rst=0)thencount=000;data_outdata_out=data_in_0;dp1=sel(0);dig=000;countdata_out=data_in_1;dp1=sel(1);dig=001;countdata_out=data_in_2;dp1=sel(2);dig=010;countdata_out=data_in_3;dp1=sel(3);dig=011; countdata_out=data_in_4;dp1=sel(4);dig=100; countdata_out=data_in_5;dp1=sel(5);dig=101; countdata_out=ZZZZ;dp1=Z;end case;end if;end process;end Behavioral;模块图:仿真波形图:七、7段译码显示控制系统六位十进制数的BCD码相继进入bcd_code,经7段译码输出,显示十进制数。源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity fre_s_decode isport(bcd_code:in std_logic_vector(3 downto 0);dp2,en,rst:in std_logic;seg_out:out std_logic_vector(6 downto 0);dot,nc:out std_logic);end fre_s_decode;architecture Behavioral of fre_s_decode isbeginprocess(bcd_code,dp2,en,rst)beginif rst=0 thenseg_out=0111111;end if;nc=en;dotseg_outseg_outseg_outseg_outseg_outseg_outseg_outseg_outseg_outseg_outseg_out=0111111;end case;end process;end Behavioral;模块图:仿真波形图:8 与门源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity and_2 isport(clk1,f_hz:in std_logic;clk2:out std_logic);end and_2;architecture and2_arc1 of and_2 isbeginclk2=clk1 and f_hz;end and2_arc1 ;模块图:3、 形成顶层原理图生成的各个模块按要求连线,形成顶层原理图,如下:4、分配引脚和下载实现根据XC3S200A I/O口对应管脚参考分配引脚。引脚分配完毕后双击“Generate programming”对所有程序进行综合,改正综合过程中提示的错误和警告,然后运行“Configure Device”把程序下载到电路板上。 5、结果测试在成功下载并运行后,评估该设计系统的实际测量效果,作对比试验,选用频率可调的函数发生器生成测试信号。当闸门时间为1s时,测得结果如下:序号输入(Hz)输出(KHz)11000.001210000.010 31000000.100410000001.000 5100000010.0006100000100.00072000002
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拓片直播测试题及答案
- 保险消保培训
- 肿瘤介入治疗健康宣教
- 支原体肺炎诊疗与防控培训
- 语言教育中的小羊与狼故事应用
- 6S管理内容培训
- 肿瘤科病人饮食
- 2025年中国磨砂皂行业市场全景分析及前景机遇研判报告
- 中医内科学:消渴诊治要点解析
- 团餐服务流程及规范培训
- 广东开放大学Java程序设计基础(专)单元测试1-7答案
- 2024年《招标采购专业知识与法律法规》考前必刷必练题库500题(含真题、必会题)
- 【国网-变电运维】刀闸控制回路及五防(统一格式版本)
- 2022-2023学年天津市滨海新区高二(下)期末地理试卷
- 经济师考试运输经济高级经济实务试题与参考答案
- 体育中国学习通超星期末考试答案章节答案2024年
- 调味品供应合同范本
- 五年级沪教版数学下学期应用题专项针对练习
- 垃圾清运方案、安全作业制度、环保管理制度
- 2024年广西壮族自治区中考地理试题(含解析)
- 安全操作规程汇编(服装厂)
评论
0/150
提交评论