FPGA学习篇——Verilog学习之“流水灯”

1.设计规划及波形绘制

1.1原理

流水灯原理很简单,不再赘述。

1.2波形绘制及实验目标

实验目标:板子上电后实现四个LED灯从右到左依次点亮,每个灯间隔0.5s(肉眼能够看到流水的时间)

模块框图:


波形绘制:

先给正确的波形展示:

注意:这里使用了一个flag信号,如果不使用,当counter'计数到24999999时led输出跳变也是可以,但是代码编写时,容易出现时序问题,在进入第24999999个周期时,第一个always块,满足第二个条件,会进行counter清零操作。而第二个always块满足counter最大值要进入led跳变操作,则这两个操作可能会混乱。

因此,加一个flag信号,当counter计数到(cnt_max-1)时拉高,则会产生一个一周期的脉冲,实现效果与计数到24999999时led输出跳变一样,且不会产生操作混乱情况。

2.代码编写

2.1 rtl

这里rtl编写注意看好板子手册led灯到底是低电平还是高电平点亮,不要想当然!!!!

向正点这块板子就是高电平点亮(左边高右边接地才能导通。)

复制代码
module flow_led
#(
    parameter cnt_max = 25'd24999999
)
(
    input               sys_clk     ,
    input               rst_n       ,

    output   reg[3:0]   led         
);
reg     [25:0]      counter;
reg                 cnt_flag;


always @(posedge sys_clk or negedge rst_n) begin
    if(!rst_n)
        counter <= 'b0;
    else if (counter == cnt_max)
        counter <= 'b0;
    else 
        counter <= counter +1;
end

always @(posedge sys_clk or negedge rst_n) begin
    if(!rst_n)
        cnt_flag <= 'b0;
    else if(counter == (cnt_max - 1))
        cnt_flag <= 'b1;
    else  
        cnt_flag <= 'b0;
end

always @(posedge sys_clk or negedge rst_n) begin
    if(!rst_n)
        led <= 4'b0001;
    else if( (led[3] == 'b0)  &&  (cnt_flag == 'b1) )
        led <=  led << 1;
    else if( (led[3] == 'b1)  &&  (cnt_flag == 'b1) )
        led <= (led << 1) + 1;
    else 
        led <= led;
end

endmodule

2.2 tb

复制代码
`timescale 1ns/1ns
module tb_flow_led();
reg           sys_clk;
reg           rst_n  ;
wire  [3:0]   led    ; 

initial begin
    sys_clk <= 1'b0;
    rst_n   <= 1'b0;
    #53
    rst_n   <= 1'b1;
end

//时钟50MHZ
always #10 sys_clk <= ~sys_clk;


flow_led #(
    .cnt_max 	(24999999  ))
u_flow_led(
    .sys_clk 	(sys_clk  ),
    .rst_n   	(rst_n    ),
    .led     	(led      )
);


endmodule

3 逻辑仿真及波形验证

与上面波形图一致。



(本贴仅是个人经验,如有侵权请联系我~)

相关推荐
YCY^v^4 小时前
JeecgBoot 项目运行指南
java·学习
云小逸4 小时前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
JustDI-CM5 小时前
AI学习笔记-提示词工程
人工智能·笔记·学习
悟纤5 小时前
学习与专注音乐流派 (Study & Focus Music):AI 音乐创作终极指南 | Suno高级篇 | 第33篇
大数据·人工智能·深度学习·学习·suno·suno api
爱写bug的野原新之助5 小时前
加密摘要算法MD5、SHA、HMAC:学习笔记
笔记·学习
ZH15455891316 小时前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
百锦再6 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架
CappuccinoRose6 小时前
JavaScript 学习文档(二)
前端·javascript·学习·数据类型·运算符·箭头函数·变量声明
A9better6 小时前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
AI职业加油站6 小时前
职业提升之路:我的大数据分析师学习与备考分享
大数据·人工智能·经验分享·学习·职场和发展·数据分析