FPGA学习(4)-时序逻辑电路实现D触发器与计数器,LED灯闪烁

1.实现原理

开发板的频率为50MHz,即一个周期为20ns,实现500ms一次翻转,即计数25_000_000次。每次时钟沿来一次,就计一次。

2. 新建工程

2.1源文件代码

在下面=左边的变量值要变的,就用reg。不涉及的缺省;不加位宽默认为10进制;always后面要跟完整,才不会报错;注意格式用法 reg 24:0counter,数据类型声明格式。

复制代码
module led_light(
    reset,
    clk,
    led
    );
    
    input reset;
    input clk;
    output reg led;
    reg [24:0]counter;
    
    always@(posedge clk or negedge reset)
    if(!reset)
    counter<=0;
    else if (counter == 25_000_000)
    counter<=0;
    else
    counter<=counter+1'd1;
    
    always@(posedge clk or negedge reset)
    if(!reset)
    led<=1'b0;
    else if(counter == 25_000_000)
    led<=!led;
    
    
endmodule

点开schematic,可看相关电路图。

2.2添加仿真文件

关于复位信号延时201ns,视频说怕与时钟信号产生冲突,clk的上升沿与复位信号之间的冲突,这点我不是很理解;begin与end必须配套使用;仿真函数名不能与源函数名同名。

复制代码
`timescale 1ns / 1ns
module led_light_tb();
reg clk;
reg reset;
wire led;
led_light led_light(
    .reset(reset),
    .clk(clk),
    .led(led)
);


initial clk=1;
always #10 clk=~clk;

initial begin
    reset =0;
    #201;
    reset=1;
    #2_000_000_000;
    $stop;
end
endmodule

点击simulation,观察仿真波形。vivado仿真中默认1ms,点击这个符号让仿真时间延长到程序中所仿真的时间。

点击led选中,然后上面的+图标是增加一根标注线,选中后,点击左箭头图标,标注线会位于测量起始信号位置,再加一根,弄在右边,点击第一根上面的数字,即可测量信号宽度。

2.3 其他步骤

跟之前的一样进行程序烧录。

2.4实验现象

板子上的LED灯按照程序设定时间闪烁,但按复位键没用。

相关推荐
通信小呆呆4 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick4 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee4 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
坏孩子的诺亚方舟4 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e4 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨4 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq4 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan4 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend4 天前
理论学习:什么是 Coding Agent?
学习