ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:1.58MB ,
资源ID:10503734      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10503734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA数字跑表的设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA数字跑表的设计.docx

1、基于FPGA数字跑表的设计基于FPGA数字跑表的设计现代电子技术实验报告数字跑表的设计 目 录 2 一、基于FPGA的VHDL设计流程.3 1.1 VHDL语言介绍.3 1.1.1 VHDL的特点. 3 1.2 FPGA开发介绍. 4 1.2.1 FPGA简介. 4 1.2.2 FPGA设计流程. 4 1.2.3 实验板使用芯片XC3S200A介绍 6 二、总体电路的设计6 2.1设计要求 .6 2.2系统工作原理6 2.3单元电路的划分.6 三、电子秒表的单元电路设计.7 3.1 电子秒表的设计过程及结果分析.7 3.1.1 分频器.7 3.1.2按键消抖.8 3.1.3 控制电路.8 3.

2、1.4 计数器.9 3.1.5 寄存器.12 3.1.6 显示模块.15 3.1.7 使能模块.17 四、 顶层设计.18 4.1 顶层设计.18 4.2 分配引脚和下载实现.19 4.3 测试结果及结论.20 五、 经验及收获.22一、基于FPGA的VHDL设计流程1.1 VHDL语言介绍VHDL(Very-high-speed Integrated Circuit Hardware Description Language)诞生于1982年.1987年底,VHDL被IEEE(The Institute of Electrical and Electronics Engineers)和美国国

3、防部确认为标准硬件描述语言.自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,并宣布自己的设计工具可以和VHDL接口.此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言.1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本.现在,VHDL和VERILOG作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言.有专家认为,在新的世纪中,VHDL和VER

4、ILOG语言将承担起几乎全部的数字系统设计任务.1.1.1 VHDL语言的特点与其他硬件描述语言相比,VHDL具有以下特点:1、功能强大、设计灵活:VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制.它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述.VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的.VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计.2、支持广泛、易于修改:由于VHDL已经成为IEEE标准所规范的硬件描述语言,大多数EDA工几乎都支持VHDL,这为VHD

5、L的进一步推广和广泛应用奠定了基础.在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计.3、强大的系统硬件描述能力:VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路.而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述.另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型.VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型.4、独立于器件的设计、与工艺无关:设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的

6、器件,就可以集中精力进行设计的优化.当设计描述完成后,可以用多种不同的器件结构来实现其功能.5、很强的移植能力:VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能.6、易于共享和复用:VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块.这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计.1.2 FPGA开发介绍现场可编程门阵列(FPGA)器件是八十年代中期出现的新产品,它的应用大大地方便了IC的设计,因而随着数

7、字技术日益广泛的应用,以FPGA为代表的ASIC器件得到了迅速的普及和发展,器件集成度和速度都在高速增长.传统的电路设计过程是:先画原理图、把原理图绘制成印制电路板图、再制版、安装、调试.有了FPGA,我们只需要在计算机上绘出原理图,再运行相应的软件,就可把所设计的逻辑电路在FPGA中实现.所有步骤均可自动完成.电子设计工程师自己设计专用集成电路成为了一件很容易的事情.FPGA作为专用集成电路(ASIC)概念上的一个新型范畴和门类,以其高度灵活的用户现场编程方式,现场定义高容量数字单片系统的能力,能够重复定义、反复改写的新颖功能,为复杂数字系统设计、研制以及产品开发提供了有效的技术手段.电子应

8、用设计工程师应用FPGA技术不仅可避免通常ASIC单片系统设计周期长,前期投资风险大的弱点,而且克服了过去板级通用数字电路应用设计的落后,繁琐和不可靠性.目前FPGA的两个重要发展与突破是,大多数厂商在其高端器件上都提供了片上的处理器(如CPU、DSP)等硬核(Hard Core)或固化核(Fixed Core).比如Xilinx的Virtex II Pro芯片可以提供Power PC,而Altera的Stratix、Excalibur等系列芯片可以提供Nios、DSP和Arm等模块.在FPGA上集成微处理器,使SOPC设计更加便利与强大.另一个发展是在不同器件商推出的高端芯片上大都集成了高速

9、串行收发器,一般能够达到3Gb/s以上的数据处理能力,在Xilinx、Altera、Lattice都有相应的器件型号提供该功能.这些新功能使FPGA的数据吞吐能力大幅度增强.1.2.2 FPGA设计流程对于目标器件为FPGA和CPLD的HDL设计,其工程设计的基本流程如图: 图1FPGA设计流程图1、文本编辑用任何文本编辑器都可以进行,通常VHDL文件保存为vhd文件,Verilog文件保存为v文件.2、使用编译工具编译源文件HDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器.3、逻辑综合将源文件

10、调入逻辑综合软件进行综合.综合的目的是在于将设计的源文件由语言转换为实际的电路.但是此时还没有在芯片中形成真正的电路.这一步的最终目的是生成门电路级的网表(Netlist).4、布局、布线将第3步生成的网表文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLDFPGA内.这一步的目的是生成用于下载(编程Programming)的编程文件.在这一步,将用到第3步生成的网表,并根据CPLDFPGA厂商的器件容量,结构等进行布局、布线.这就好像在设计PCB时的布局布线一样.先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位.然后,在根据网表中提供的各门的连接,把各个门的输

11、入输出连接起来.最后,生成一个供编程的文件.这一步同时还会加一些时序信息(Timing)到你的设计项目中去,以便于你做后仿真.5、后仿真利用在布局布线中获得的精确参数,用仿真软件验证电路的时序.(也叫布局布线仿真或时序仿真).这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求.6、编程,下载如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器等产生的配置或下载文件通过编程器或下载电缆下载到目标芯片中.7、硬件测试硬件测试的目的是为了在更真实的环境中检验HDL设计的运行情况,特别是对于HDL程序设计上不是十分规范,语义上含有一定歧义的程序.1.2.3 实验板使

12、用芯片XC3S200A介绍本实验设计中采用的是Xilinx公司的ETL-001 FPGA开发板进行开发设计,该开发板所提供的主芯片XC3S200A是Xilinx公司最新推出的90nm半导体工艺的低端低成本的FPGA芯片,可以广泛地运用在通信,军事,电力,控制,消费电子,汽车电子绝大多数电子应用领域.芯片主要特性如下表1所示:表1实验板XC3S200A该芯片是基于SRAM工艺的超大规模可编程逻辑芯片,提供了高达20万的等效系统门,3854个查找表(LUT),3854个寄存器(FF),288Kbit的块状SRAM以及16个18*18的乘法器,以及60对差分I/O,LVD.芯片主要特性如上表示.二、

13、系统总体设计2.1 电子秒表的设计任务目标 1、跑表精度为0.01秒 2、跑表计时范围为:1小时 3、设置开始计时/停止计时、复位两个按钮 4、显示工作方式:用六位BCD七段数码管显示读数.显示格式:00:00:00 扩展功能: 按键消抖; 选手时间分时显示;2.2系统工作原理 系统基本流程图如图:图1系统基本流程图2.3单元电路的划分根据要求设计的电路包括以下几个模块:1.分频器:由于我们要以1ms为最小单位进行计时.分频器的功能是对晶体振荡器产生的48MHz时钟信号进行分频,产生1KHz的基准信号,对晶体振荡器产生的时钟信号进行分频,产生时间基准信号.2.计数锁存器:由于我们要实现按不同的

14、键让秒表产生不同的反应.所以需要这个模块对时间基准脉冲进行计数,完成计时功能.并完成对数据的锁存使显示保持暂停.3.控制器:由于我们要实现按不同的键让秒表产生不同的反应.所以需要这个模块控制计数器的运行、停止以及复位,产生锁存器的使能信号.4.按键消抖电路:由于普通按键会产生抖动现象,只按一下,可能出现多次抖动的现象,使按键不灵敏.所以需要消除按键输入信号抖动的影响,输出单脉冲.5.扫描显示的控制电路:包括扫描计数器、数据选择器和7段译码器,控制8个数码管以扫描方式显示计时结果.单元电路划分总框图如下图2:图2单元电路划分总框图三、单元电路设计3.1单元电路设计思路3.1.1分频器分频器的功能

15、是对晶体振荡器产生的48MHz时钟信号进行分频,产生1KHz和100Hz的基准信号.对于频率为1khz的信号,分频系数为48000,因此需要一个24000进制的计数器,每当计数24000个时钟,分频输出信号c1000取反一次,c1000取反两次得到一个周期的信号.这样可实现对输入时钟信号的4800次分频,从而得到1khz的信号.对于频率为100hz的信号,原理相同,分频系数为480000.生成的分频器模块如图3所示:图3分频器模块其中,clkin为48MHz晶振时钟信号;c1000为分频输出的1KHz时钟信号,c100为分频输出的100Hz时钟信号.设计程序如下:library IEEE;us

16、e IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity fdiv is Port ( clkin : in STD_LOGIC; c1000 : out STD_LOGIC; c100 : out STD_LOGIC);end fdiv;architecture Behavioral of fdiv issignal c1000_temp:integer range 0 to 23999:=0;signal c100_temp:integer range 0 to

17、 239999:=0;signal fd1000,fd100:STD_LOGIC:=0;begin process (clkin) is begin if rising_edge(clkin) then if c1000_temp=23999 then c1000_temp=0;fd1000= not fd1000; else c1000_temp=c1000_temp+1; end if; end if; end process; c1000 =fd1000; process (clkin) is begin if rising_edge(clkin) then if c100_temp=2

18、39999 then c100_temp=0;fd100= not fd100; else c100_temp=c100_temp+1; end if; end if; end process; c100 =fd100;end Behavioral;仿真波形图4如下图4分频器仿真波形由仿真波形可知,分频器的设计是符合预期期望的,当产生输入晶振信号时,经过分频器内部处理的信号最终产生两个输出信号,分别是1KHz和100Hz,由波形图可以看出,当时钟信号计数24000个脉冲时,1KZ的波形翻转一次,从而产生1KZ的信号;同理,100Hz的信号也符合预期设计.3.1.2按键消抖由于实验板上的按键,在

19、按下和松开的短暂时间里,会出现抖动现象,这样会严重影响按键的效果,故此需要设计一个消抖电路,来消除这种不利的影响,按键消抖电路不仅可以消除按键抖动的影响,而且每按一次键,只输出一个脉冲,其宽度为一个时钟周期,达到整形的作用, 按键消抖电路是利用时间基准信号对按键按下时产生的抖动进行整形,使其输出为正常的脉冲信号的.消抖设计框图5如下:图5消抖模块设计原理图程序设计如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_unsigned.ALL;use IEEE.STD_LOGIC_arith.ALL;entity XD is

20、 Port ( clk1k : in STD_LOGIC; keyin : in STD_LOGIC; keyout : out STD_LOGIC);end XD;architecture Behavioral of XD issignal key1,key2:std_logic;signal count:integer range 1 to 3:=1beginprocess(clk1k,keyin) begin if clk1kevent and clk1k=1 then if count=3 then key1=1; else key1=0; count=count+1; end if;

21、 key2=key1; end if; if keyin=0 then count=1; end if; end process; keyout=(not key1) and key2;end Behavioral;仿真波形图6如下: 在按键按下的一个周期内,消抖模块输出仅有一个时钟周期,抑制了按键按下状态不稳的情况。3.1.3计数器十进制计数器是每当计数从1记到9时,下一位产生一个进位信号,进而输入到下一个计数器的时钟输入端,进而达到秒表所要求的计数进制.计数器是在时钟基准信号的情况下,分频为我们需要的计时时间信号,电子秒表的最低位为0.01秒,即需要100Hz的脉冲,当最低一位计数满9时,

22、向前进1,同时自身为0,重复循环.本设计中采用的是异步计时器,当上一位计数到9时,产生时钟进位,下一时钟在进位成立时,开始计时加1,以此内推,最终输出6组,计时信号,分别是0.01秒位,0.1秒位,秒个位,秒十位,分个位,分十位.当计数到5959 59时计数清零为0000 00 重复计时.数字跑表需要用六位七段数码管显示,数码管显示数字分别用2个6进制计数器和4个10进制计数器对其计数,从秒表显示的右侧到左侧计数器分别为十进制、十进制、十进制、六进制、十进制、六进制、十进制计数器,如图7所示: 图7 数码管显示示意图计数器的设计图如下:10进制计数器的框图如下:图8 10进制计数器的框图6进制

23、计数器的框图如下:图9 6进制计数器的框图相应程序设计如下:10进制程序设计如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity count101 is Port ( rst : in STD_LOGIC; clk : in STD_LOGIC; carryin : in STD_LOGIC; carryout : out STD_LOGIC; countout : out STD_LOGIC_VECTOR (3 downto

24、 0);end count101;architecture Behavioral of count101 issignal count:STD_LOGIC_VECTOR (3 downto 0):=0000;begin process(clk,rst) begin if rst=1 then count=0000; else if rising_edge (clk) then if carryin=1 then if count1001 then count=count+1; else count=0000; end if; end if; else null; end if; end if;

25、 end process; countout=count; carryout=1 when carryin=1 and count=1001 else 0;end Behavioral;6进制程序设计如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity count6 is Port ( rst : in STD_LOGIC; clk : in STD_LOGIC; carryin : in STD_LOGIC; carryou

26、t : out STD_LOGIC; countout : out STD_LOGIC_VECTOR (3 downto 0);end count6;architecture Behavioral of count6 issignal count:STD_LOGIC_VECTOR (3 downto 0):=0000;begin process(clk,rst) begin if rst=1 then count=0000; else if rising_edge (clk) then if carryin=1 then if count0101 then count=count+1; els

27、e count=0000; end if; end if; else null; end if; end if; end process; countout=count; carryout=1 when carryin=1 and count=0101 else 0;end Behavioral;仿真波形如下图:10进制的仿真波形如下:图10 10进制计数器仿真图形由图可见,设计模块对波形个数计数,从产生结果为2进制的4位数.从0000到1001,结果正确.6进制的仿真波形如下:图11 6进制计数器的仿真波形有图可知,6进制计数器设计正确,脉冲时钟上升沿到来时计数器开始计数,从0000到1001,然后重复循环.3.1.4 寄存器数据锁存器,在使能为1时,将当前数据送到寄存器中保存,可记录4组数据,当再次使能时,将寄存的数据赋给输出,显示寄存器中的4组数据.设计框图如下图:图12 寄存器设计框图寄存器程序设计如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.STD_LOGIC_ARITH.ALL;entity save2 is Port ( lacthin : in STD_LOGIC; reset : in STD_LOG

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1