- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2021广东选调生面试真题(1月10日).pdf
- 2025年高级项目管理师复习资料多选题(高项有答案) .pdf VIP
- Haier海尔洗衣机MS100-BZ886U1使用说明书手册参数图解图示pdf电子版下载.pdf VIP
- 新部编五年级语文下册第四单元(教案).pdf
- 2024款长城哈弗H6 1.5T2.0T两驱ProMaxUltra_用户手册驾驶指南车主车辆说明书电子版.pdf
- 第一章 世界的物质性及发展规律-马克思主义基本原理讲稿.pdf
- 培训机构校长述职报告.pptx
- 固体矿产勘查规范总则.pdf VIP
- 做账实操-合伙企业的利润分配规则.doc VIP
- 高中数学课堂教学改革实施方案.docx VIP
文档评论(0)