网站大量收购闲置独家精品文档,联系QQ:2885784924

可编程实践报告.doc

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

温州大学物理与电子信息工程学院 可编程逻辑器件 实践报告 实验名称: 可编程逻辑器件及应用实践 班 级: 姓 名: 学 号: 实验地点: 1B409 日 期: 2012.3 一、实验目的: 1、实现跑马灯电路 2、实现LED灯的自动左移和右移。 二、实验环境: 1、计算机 2、FPGA实验开发板 3、Xilinx ISE软件环境 三、实验内容和要求: 1、实现50MHz时钟信号的输入和分频,能根据开关改变分频的结果,以实现跑马灯电路 移位速度的变化; 2、系统自动实现分频结果的变化,自动改变跑马灯电路的移位速度; 3、完成跑马灯移位电路的设计,实现LED灯的自动左移和右移。 四、实验步骤: 1、一个简单的跑马灯的显示情况如下图3.1所示。 图中的每个小方格代表一盏LED灯,黑色代表相应位置的灯点亮,白色代表相应位置 的灯未点亮。每过一个时间段,LED灯向左移动一个位置,从而产生跑马灯的效果。 图3.1 2、跑马灯移动的时间段需要时钟信号通过定时功能去控制。时间段的选择以0.5s、0.6s、 0.7s、0.8s、0.9s和1.0s等较为适宜。通过编写定时模块实现不同移动时间段的控制。 三、 设计实现 1、移位模块:要实现LED灯左移和右移并自动变换的功能。 左移的Verilog HDL程序代码如下页图3.2所示。 要实现LED灯的左移和右移,并能够自动循环变换,需要添加一个内部控制信号。根 据该内部控制信号的值为低电平或者高电平, 则该内部控制信号的值需要能自动地在低电平和高电平之间转化。 图3.2 2、分频模块:控制跑马灯移动的时间间隔,并实现频率的自动变化。 以50MHz的基准时钟为例,为了得到1s的时间间隔,需要对基准时钟进分频,其Verilog HDL程序代码如图3.3所示: 图3.3 为了控制跑马灯移动的时间间隔发生变化, 要的不同时间间隔的数量决定该控制信号的位宽; 信号的值需要能自动地在模块内部变化。 3、顶层模块:通过调用移位模块和分频模块形成顶层模块。 模块的调用可以参照Verilog HDL的结构化描述的语法格式: 模块名称 调用实例名称(端口列表) 其中端口列表可以采取通过位置相关联的方式 体的描述可以参考教材。 简单只有一种移动时间间隔和移位方式的跑马灯顶层模块如图3.4所示。 图3.4 五、实验源代码 1、Top 模块: module top(clk,rst,dir,cho,out); input clk,rst; input dir,cho; output [7:0]out; wire newclk; divider M1(clk,rst,newclk,cho); shift M2(newclk,dir,rst,out); endmodule 2、分频模块: module divider(clk,rst,newclk,cho); input clk,rst; input cho; output reg newclk; reg [24:0] count; always @(posedge clk or negedge rst) if(!rst) begin count=0; newclk=0; end else begin count=count+1; if(cho==0)begin if(count= begin count=0; newclk=~newclk; end end if(cho==1)begin if(count= begin count=0; newclk=~newclk; end end end endmodule 3、循环移位寄存器: module shift(newclk,dir,rst,out); input newclk,rst; input dir; output reg [7:0] out; always @(posedge newclk or negedge rst) if(!rst) out=1; else begin if(dir==1) begin out[7:1]=out[6:0]; out[0]=out[7]; end else if(dir==0) begin out[7]=out[0]; out[6:0]=out[7:1]; end

文档评论(0)

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

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

1亿VIP精品文档

相关文档