基于
XILINX--
XSE500E
型
FPGA
的变速流水灯以及花样流水灯的
verilog
语言设计
摘要
临近大四毕业,诸多工科院校电子电科通信等专业会选择用
FPGA
项目作为课程设计的
课题,
笔者同样经历了这个过程,收获颇多,
在此将设计成果在此分享,以帮助大家更好掌
握
FPGA
设计。
FPGA
种类繁多,时效性非常好,设计过程中十分注重实时性,在时间点控制上非常优
秀。此次设计采用
XILINX
的
XSE500E
型芯片的开发板,芯片采用
FG320
型接口,速度级别
-4
。板载时钟
50MHz
,如需其他时钟周期,可采用
IP
核中的
clocking
,其中的
DCM
可以实
现变频,引入
DCM
,输入频率
50MHz
,输出频率填入需要的频率即可,之后进行实例化。此
外,可以借助计数器进行延时减速,此次设计采用了计数器延时方法。
本次列举了四种流水灯相关设计:普通流水灯(向左和向右滚动)
,自动反复式流水灯
(到最右端自动向左滚动,到左端自动向右滚动)
,花样流水灯,变速流水灯。
谢谢大家的支持!
正文
一,普通流水灯
1
,建模思想
普通流水灯,可以向右滚动,到最右端返回最左端,也可以向左滚动,
到最左端返回最
右端。
普通流水灯模块涉及的端口有:
clk
,
它是时钟输入,
一般就是板载时钟,
这里是
50MHz
,
具体参照开发板说明。还有复位输入
rst,
高电平有效。此外就是
led
端口,这个端口有
8
根管脚,共
8
位,连接
8
个
led
灯。
采用
verilog
语言,端口定义格式如下:
module
led(
input clk,
input rst,
output reg[7:0] led
//
此行定义说明
led
端口既是驱动管脚的,又是寄存器
);
采用过程建模,
这里不采用行为建模和功能建模,
因为这个过程就是一个大循环,
规律
性极强。由于板载时钟
50MHz,
如果每个时钟周期都要滚动流水灯,那么速度是惊人的,人
眼根本无法分辨。所以采用计数器延时,
当计数达到约
4
千万时候,驱动系统进行动作,可
以判断,也可以进行流水灯动作。
普通流水灯,需要判断流水灯是否到了尽头,如果到了尽头,需要回归起点。
每次上电之后,需要按一下复位,才能进行流水灯循环。
Rst
的作用就是初始化,首先为
led
赋予一个初始状态,可以让一个灯循环,也可以让
几个灯一起亮,一起循环。几个灯亮,关键在于
rst
初始化。
2
,全部代码如下:这里列举右滚动流水灯
module led(
//
这行定义了模块名字为
led
input
clk,
input
rst,