FPGA|CPLD|ASICwilliam hill官网
登录
直播中
Legen
6年用户
3经验值
擅长:嵌入式技术,处理器/DSP
私信
关注
[经验]
【FPGA开发者项目连载】Led流水灯小程序测试
1.简介
本次led流水灯实验是基于MINI_STAR_4K
开发板
,并且以高云
半导体
独家秘制的GOWIN云源软件为编译工具而实现。实验结果验证了该开发板和eda工具的可行性。实验成果展示在最底部。
2.环境
Windows 10 64位
MINI_STAR_4K开发板
云源软件 for win V1.9.7.03 Beta
3.程序设计
开发板上有两个led灯(高电平点亮),设定四种闪烁组合模式,模式一:led[0]和led[1]的亮灭周期都是一秒,交替闪烁。模式二:两个灯亮灭周期都是半秒,交替闪烁。 模式三:两灯亮灭周期都是半秒,同亮同灭。模式三:一个灯亮灭周期是一秒,另一个灯亮灭周期是半秒,一快一慢闪烁。
3.1
led计数器:设定两个计数器,一个计数器控制一个led。当时钟频率是25 MHz(周期是40ns)时,led延时计数器计数12500000个时钟周期为一秒,计数6250000个时钟周期为一秒。开发板上的晶振是27 MHz,这里设定12500000个时钟周期延时其实不够一秒钟,但这种试验要求没那么严格,可用。
//led[0] 延时计数器
always @(posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
cnt <= 24'b0 ;
else if (add_cnt) begin
if (end_cnt)
cnt <= 24'b0 ;
else
cnt <= cnt + 1'b1;
end
end
assign add_cnt = 1 ;
assign end_cnt = add_cnt && cnt == total-1;
//led[1]延时计数器
always @(posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
cnt2 <= 24'b0 ;
else if (add_cnt2) begin
if (end_cnt2)
cnt2 <= 24'b0 ;
else
cnt2 <= cnt2 + 1'b1;
end
end
assign add_cnt2 = 1 ;
assign end_cnt2 = add_cnt2 && cnt2 == total_2-1;
3.2
模式切换计数器:模式切换计数器一在led[0]亮灭一次后加一,计数十次。模式切换计数器二在模式切换计数器一计数满时加一,计数四次。
always @(posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
cnt_model <= 4'b0 ;
else if (add_cnt_model) begin
if (end_cnt_model)
cnt_model <= 4'b0 ;
else
cnt_model <= cnt_model + 1'b1;
end
end
assign add_cnt_model = end_cnt ; // led[0] 闪烁一次加一次一
assign end_cnt_model = add_cnt_model && cnt_model == 9;
always @(posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
wave_mode <= 2'b0 ;
else if (add_wave_mode) begin
if (end_wave_mode)
wave_mode <= 2'b0 ;
else
wave_mode <= wave_mode + 1'b1;
end
end
assign add_wave_mode = end_cnt_model ; // 前一级计数器计满一次加一次一
assign end_wave_mode = add_wave_mode && wave_mode == 3;
3.3
led控制:使用组合逻辑,根据模式切换计数器二的值更改两个led计数器的最大计数值,以及两个led的亮灭规律。代码如下(一种模式实现方式已注释):
// 设定led[0]在计数半周期和整周期的状态
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
led[0] <= 1'b0;
end
else if(cnt == total/2-1) begin
led[0] <= wave_1;
end
else if(cnt == total-1)begin
led[0] <= wave_2 ;
end
end
// 设定led[1]在计数半周期和整周期的状态
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
led[1] <= 1'b0;
end
else if(cnt2 == total_2 / 2 - 1) begin
led[1] <= wave_1_2 ;
end
else if(cnt2 == total_2 - 1)begin
led[1] <= wave_2_2 ;
end
end
// 实现不同模式下led的闪烁组合
always @(*) begin
if(!rst_n)begin
total = 0;
total_2 = 0;
wave_1 = 1'b0;
wave_2 = 1'b0;
wave_1_2 = 1'b0;
wave_2_2 = 1'b0;
end
// 此模式下 led[0]和led[1]亮灭周期都是半秒,交替闪烁
else if (wave_mode == 0) begin
total = 6250000;
total_2 = 6250000;
wave_1 = 1'b0; // led[0]在半周期时灭
wave_2 = 1'b1; // led[0]在全周期时亮
wave_1_2 = 1'b1; // led[1]在半周期时亮
wave_2_2 = 1'b0; // led[1]在全周期时灭
end
else if (wave_mode == 1)begin
total = 12500000;
total_2 = 6250000;
wave_1 = 1'b0;
wave_2 = 1'b1;
wave_1_2 = 1'b1;
wave_2_2 = 1'b0;
end
else if (wave_mode == 2) begin
total = 6250000;
total_2 = 6250000;
wave_1 = 1'b1;
wave_2 = 1'b0;
wave_1_2 = 1'b1;
wave_2_2 = 1'b0;
end
else if (wave_mode == 3) begin
total = 12500000;
total_2 = 12500000;
wave_1 = 1'b1;
wave_2 = 1'b0;
wave_1_2 = 1'b1;
wave_2_2 = 1'b0;
end
else begin
total = 0;
total_2 = 0;
wave_1 = 1'b0;
wave_2 = 1'b0;
wave_1_2 = 1'b0;
wave_2_2 = 1'b0;
end
end
3.4 结语
最初想着把按键消抖模块调用进来,用按键控制led灯的闪烁模式,各模块儿
仿真
都成功了,不过最终未遂。之后修改的程序,设定成延期一段时间自动跳转状态,搞得程序中的名称有些乱。好消息是,通过这一段小程序的编写,我发现了个很基础问题,之前一直没注意:
笔记
(
https://www.no
ti
on.so/Verilog-29f34f2560294bea8acfaa26f535eed4
)
4. GOWIN云源软件说明
云源软件的使用感受:感觉它挺像vivado的,界面很简洁,看着十分清爽。仿真麻烦了点,需借用Multisim,我干脆用vivado创建的工程,仿真完成后再搬过来用的。
软件使用方法:B站搜索Myminieye ,进入TA的视频,会看到详细的软件使用教程,包括软件安装的步骤,视频远比文字描述直观。
led闪烁效果
回帖
(1)
Legen
2021-5-13 10:00:06
Verilog中不支持参数动态调整
Verilog中不支持参数动态调整
举报
更多回帖
rotate(-90deg);
回复
相关帖子
【
FPGA
开发者
项目连载
】
led
点灯
3227
【
FPGA
开发者
项目连载
】一.MiniStar开箱
3897
【
FPGA
开发者
项目连载
】客制化键盘
2973
【
FPGA
开发者
项目连载
】
LED
旋转显示-硬件威廉希尔官方网站
4440
【
FPGA
开发者
项目连载
】
LED
旋转显示-软件篇
3987
【
FPGA
开发者
项目连载
】基于Gowin Ministar的Nano Viewer 小
项目
3424
【
FPGA
开发者
项目连载
】基于
FPGA
的红外激光图像采集及显示
3647
【
FPGA
开发者
项目连载
】【MiniStar
FPGA
开发
板】+ 搭建
开发
环境及点亮
LED
灯
3332
【
FPGA
开发者
项目连载
】一次
开发
经验浅谈
1188
【
FPGA
开发者
项目连载
】高云
FPGA
初探,基于GWINSR的超声波测距
3392
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分