2677|2

324

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

XILINX NEXYS3-实现流水灯 [复制链接]

本帖最后由 hjl240 于 2014-1-24 19:49 编辑

(本文适合FPGA及Verilog初学者,大牛们可以直接忽略)上一次已经讲过如何实现点亮全部的LED,这次分享一下如何实现简单的流水灯。如果不知道如何新建工程以及怎么下载程序,可以参考“XILINX NEXYS3—教你如何点亮LED”一文(https://bbs.eeworld.com.cn/thread-429046-1-1.html)。
程序如下:
module led_test(
         clk,
         rst_n,
         led
   );
input clk;//100MHz
input rst_n;//低电平复位信号
output[7:0]led;

reg[22:0] cnt;//分频信号

always @(posedge clk or negedge rst_n)
         if(!rst_n)cnt<=23'd0;
         elsecnt<=cnt+1'b1;

reg[7:0] ledr;   
always @(posedge clk or negedge rst_n)        
         if(!rst_n)ledr<=8'd1;
         elseif(cnt==23'h7fffff) ledr<={ledr[6:0],ledr[7]};
//7fffff(16进制)=8388607(十进制)8388607/100MHz约等于83ms,即每83ms左移一次

assign led=ledr;


endmodule

端口分配情况如下:





  下面对程序进行简单分析一下:
1.      reg[22:0] cnt;//分频信号
always @(posedge clk or negedge rst_n)         
        if(!rst_n) cnt<=23'd0;           
        else cnt<=cnt+1'b1;
  cnt用于计数,在每个时钟的上升沿(posedgeclk)或者复位信号的下降沿(negedge rst_n)到来时,如果复位电平rst_n为高(1),则cnt自加1,如果复位电平rst_n为低(0),则cnt0.
2. always @(posedge clk or negedgerst_n)         
if(!rst_n)ledr<=8'd1;
else if(cnt==23'h7fffff)  ledr<={ledr[6:0],ledr[7]};
两个always语句是同时进行的,当cnt计数到7fffff时,ledr进行左移一位。
{ }为连接运算符,连接操作是将小表达式合并形成大表达式的操作。
形式如下:{expr1, expr2, . . .exprN}比如,ledr[6:0]=0010000ledr[7]=0,则,ledr<=00100000。那么下一次再进入时,ledr[6:0]=0100000ledr[7]=0ledr<=01000000,因此实现了左移功能。
3.      assign led=ledr;assign语句是连续赋值语句,它用于对wire型的变量赋值。
assign语句描述逻辑功能的基本格式如下:assign 信号=表达式;

注意:体会一下“赋值语句”用“<=”与“=”的区别。

如果有什么地方说的不好或者不对,可以提出来讨论讨论一下。

附:pdf版的文字以及整个工程。

XILINX NEXYS3-实现流水灯.pdf

319.88 KB, 下载次数: 36

led_test.rar

121.51 KB, 下载次数: 18

此帖出自FPGA/CPLD论坛

最新回复

第二个程序了  详情 回复 发表于 2014-12-2 20:11
点赞 关注
个人签名

欢迎关注:JL单片机

 

回复
举报

324

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
注意:程序下载到板子上时,要把SW0开关拨到朝里,才会有流水灯现象
此帖出自FPGA/CPLD论坛
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
第二个程序了
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表