- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于 XILINX-XSE500E 型 FPGA
的变速流水灯以及花样流水灯的verilog语言设计
摘要
临近大四毕业,诸多工科院校电子电科通信等专业会选择用FPGA项目作为课程设计的 课题,笔者同样经历了这个过程,收获颇多,在此将设汁成果在此分享,以帮助大家更好掌 握FPGA设计。
FPGA种类繁多,时效性非常好,设计过程中十分注重实时性,在时间点控制上非常优 秀。此次设计采用XILINX的XSE500E型芯片的开发板,芯片采用FG320型接口,速度级别 -4。板载时钟50MHz,如需其他时钟周期,可采用IP核中的clocking,其中的DCM可以实 现变频,引入DCM,输入频率50MHz,输出频率填入需要的频率即可,之后进行实例化。此 外,可以借助计数器进行延时减速,此次设汁采用了计数器延时方法。
本次列举了四种流水灯相关设讣:普通流水灯(向左和向右滚动),自动反复式流水灯 (到最右端自动向左滚动,到左端自动向右滚动),花样流水灯,变速流水灯。
谢谢大家的支持!
正文
一,普通流水灯
建模思想
普通流水灯,可以向右滚动,到最右端返回最左端,也可以向左滚动,到最左端返回最 右端。
普通流水灯模块涉及的端口有:elk,它是时钟输入,一般就是板载时钟,这里是50MHz, 具体参照开发板说明。还有复位输入rst,髙电平有效。此外就是led端口,这个端口有8 根管脚,共8位,连接8个led灯。
采用verilog语言,端口泄义格式如下:
module led(
input elk,
input rst,
output reg[7:0] led //此行泄义说明Zd端口既是驱动管脚的,又是寄
存器
);
采用过程建模,这里不采用行为建模和功能建模,因为这个过程就是一个大循环,规律 性极强。由于板载时钟50MHz,如果每个时钟周期都要滚动流水灯,那么速度是惊人的,人 眼根本无法分辨。所以采用计数器延时,当计数达到约4千万时候,驱动系统进行动作,可 以判断,也可以进行流水灯动作。
普通流水灯,需要判断流水灯是否到了尽头,如果到了尽头,需要回归起点。
每次上电之后,需要按一下复位,才能进行流水灯循环。
Rst的作用就是初始化,首先为led赋予一个初始状态,可以让一个灯循环,也可以让 几个灯一起亮,一起循环。几个灯亮,关键在于rst初始化。
全部代码如下:这里列举右滚动流水灯
module led(inputelk,//这行立义了模块需字为
module led(input
elk,
//这行立义了模块需字为led
input rst,
output reg [7:0] led
);
reg [25:0] count; //延时计数器,这里是25位计数器,为32M。
always @(posedge elk) //每个时钟上升沿进行下面动作
辻(rst)
led = 8 //复位初始化,只有一个灯亮着,这里做一个灯的流水灯,
如
always @(posedge elk) 果做两个灯,就是If (reg [25] = 1) //计数满32M之后再进行下而动作,延时。
begin
If (led = 8 bOOOOOOOl) //当滚动到尽头,回到左侧起始端
led = 8’ bl0000000;
else
led = {led[0],led[7:l]} //右移,用并置符实现
endmodule左滚动可以很容易得岀,
endmodule
左滚动可以很容易得岀,
module led(
input
input
在此不做详细解释,读者自行分析。
//这行定义了模块名字为led elk,
rst,
output reg[7:0] led
);
reg [25:0] count; //延时计数器,这里是25位计数器,为32M。
always @(posedge elk) //每个时钟上升沿进行下面动作
辻(rst)
led U 8 //复位初始化,只有一个灯亮着,这里做一个灯的流水灯,
如
always @(posedge elk) 果做两个灯,就是If (reg [25] = 1) //计数满32M之后再进行下而动作,延时。
begin
If (led = 8 bl0000000) //当滚动到尽头,回到左侧起始端
led = 8’ bOOOOOOOl;
else
led = {led[6:0],led[7]} //左移,用并置符实现
end
endmodule
二,自循环流水灯
此代码引用自课堂实验的代码,非本人原创,在此分析一下。大家可以自行理解。每次 上电,按一下rst复位键,流水灯出现一个或者几个灯亮起来,接下来按住run,则流水灯 从左向右滚动,滚到最右
原创力文档


文档评论(0)