PLD运动计时器实验报告.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PLD运动计时器实验报告

PLD与数字系统设计实验报告 --设计性实验报告(运动计时器 1、实验说明: 作为Verilog语言的初学者,此次报告全面的展示了计时器实验设计的过程,总结了自己学习的一些内容。计时器设计的实现方法比较多,本设计的创新点主要有以下方面: ①使用了硬件描述语言和原理图混合输入的方式,进行模块化设计,生成电路元件符号,设计方法比较直观,方便其他实验进行模块调用。 ②计时器的暂停\开始功能的控制,使用StateCAD图像化的设计方式,利用状态机实现该模块的设计。 1.1 实验要求 使用Xilinx公司的Spartan3S 400AN开发板上的相关模块,利用ISE开发软件完成运动计时器的设计,要求实现如下功能: (1)在LED数码管上显示分钟和秒,最长的计时时间为59:59。 (2)自定义清零按键,按下该按键,在数码管上显示的时间为00:00。 (3)自定义启动/暂停按键,按下该按键,则启动或暂停计时器计时。其功能与实际的计时器的开始/停止按钮功能相同。 1.2 实验工具 XUP(FPGA:Spartan3S400AN)实验开发板 Xilinx软件ISE13.4开发软件 二、实验分析设计过程 实验设计理念主要为自顶向下的设计方法,这也是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。它的基本原理框图如下: 图 1 设计方法框图 自顶向下的设计方法利用功能分割手段将设计由上到下进行层次化和模块化,即分层次、分模块进行设计和仿真。功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。如此分割,逐步的将系统细化,将功能逐步具体化,模块化。高层次设计进行功能和接口描述,说明模块的功能和接口,模块功能的更详细描述在下一设计层次说明,最底层的设计才涉及具体寄存器和逻辑门电路等实现方式的描述。 2.1 各模块描述语言的实现 本实验采用硬件描述语言和电路原理图混合输入的方式实现,用Verilog描述语言分别产生计数、显示和控制模块,然后将这些模块生成电路符号并构成一个顶层电路原理图,这种方法使用方便,设计也比较直观,并且生成的功能模块方便其他设计的调用。下面是每个模块设计的思路: 2.1.1 计时模块的设计 本模块的设计类似于数字时钟的方法,秒、分都是60 进制计数,采用了 6 进制计数器与10 进制计数器的组合实现;控制逻辑主要是用来实现计数和清零。 首先,要由系统时钟(50Mhz)分频得到秒信号,秒时钟累加即可得到分钟信号,分频方案主要有以下两种: 占空比1:1方波信号 分频效果如下图所示,(这里为了仿真的方便改变计数器的数值) 图 2 秒信号(方波形式) 非方波形式 从50Mhz的时钟信号分频,得到秒信号高电平的脉冲宽度为分频时钟的一个周期,控制秒钟加1。 图 3 秒信号(非方波形式) 本实验采用第二种分频方式,主要是为了防止在进行综合的时候出现分频信号向系统时钟偏移(clock skew)的警告,一般遵循使用一个时钟域几个使能域优于多个全局时钟域的规则。 图4 时钟偏移的考虑 其次,用分频出的秒信号,作为计数模块秒低位计数器的触发信号,依此完成秒高位、分低位、分高位的计数功能。其实现方法是使用四个always进程模块,分别对计时器的四位计数,由于always进程是并行的,因此可以提高程序运行的效率。对其仿真结果如下所示: 图 5 计数器仿真 上图是计数器仿真部分截图,从图中数据看到,计数器功能正常。此模块所对应的程序如下所示: module timer(clken,rst,clk_50M,sec1,sec2,min1,min2); input clk_50M;//系统时钟 input clken,rst;//其中clken是控制计数信号,rst是清零信号,都由控制模块产生 output [3:0]sec1; output [3:0]sec2; output [3:0]min1; output [3:0]min2; reg [3:0] sec1; //秒低位信号 reg [3:0] sec2; //秒高位信号 reg [3:0] min1; //分钟低位信号 reg [3:0] min2; //分钟高位信号 reg [27:0] count; reg clk_1H; //分频得到1s的信号 always @(posedge clk_50M or posedge rst ) begin if(rst) begin count = 28d0; end else begin //if(count==28d2499_9999) if(count==28d4

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档