FPGA-VIVADO学习:使用D触发器和计数器实现LED灯闪烁
创作时间:
作者:
@小白创作中心
FPGA-VIVADO学习:使用D触发器和计数器实现LED灯闪烁
引用
CSDN
1.
https://blog.csdn.net/waS_511/article/details/146316915
本教程将介绍如何使用FPGA开发工具VIVADO实现LED灯闪烁的功能。通过学习D触发器和计数器的工作原理,以及Verilog代码的编写和仿真测试,读者可以掌握基本的FPGA开发技能。
原理详解
D触发器
CK是时钟,Q是输出。
D触发器在时钟信号CK的上升沿读取输入D的值,并将其存储和输出。
计数器
计数器通过加法器add在每个时钟上升沿递增计数值。
Verilog实现
本设计采用低电平有效的复位信号。根据系统时钟频率33.333333MHz(周期30ns)和目标闪烁周期500ms,计算出计数器的最大值:
500ms = 500 * 1000 * 1000 ns = 16,666,666.666666
Verilog代码如下:
module led_twinkle(
Clk,
Reset_n,
Led
);
input Clk;
input Reset_n;
output reg Led;
reg [24:0]counter;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
counter<=0;
else if (counter==16666666)//25000000
counter<=0;
else
counter<=counter+1'd1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led<=1'b0;
else if(counter==16666666)
Led<=!Led;
endmodule
仿真代码
`timescale 1ns / 1ns
module led_twinkle_tb( );
reg Clk;
reg Reset_n;
wire Led;
led_twinkle led_twinkle_inst0(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led)
);
initial Clk=1;
always #15 Clk=~Clk;
initial begin
Reset_n=0;
#301;
Reset_n=1;
#2000_000_000;
$stop;
end
endmodule
板块验证
在硬件平台上,可以通过按键产生复位信号。根据设计要求配置IO口并生成比特流文件。需要注意的是,实际测试中发现频率计算有误,应使用50MHz而非33.333333MHz进行计算。
热门推荐
如何通过API获取显卡信息?
尿酸高可以喝紫菜汤吗
张红甫教你做地三鲜:家常菜简单又美味
图书情报学的可持续发展
个人遗嘱模板:一份合法有效的自书遗嘱指南
如何正确设置A股止损单?这种设置对风险控制有哪些作用?
固定资产入账标准及管理方法详解
如何申请社会福利住房?这种申请过程有哪些具体要求?
探秘阿里秘境:自驾游终极指南与路线攻略
成吉思汗Y染色体有多强?科学家发现今天全球1600万男性和他有关
如何写出真实且建设性的学生评语,激励他们不断进步
登封法院:联动汇聚解纷合力 多元化解矛盾纠纷
40天小狗如何训练(从吃饭到排便)
物业公司对外拓展攻略
一步步拆解案例:什么是逐步分析法?
内向的人该如何交朋友
肠系膜血管CTA检查是什么?原理、步骤及注意事项全解析
抗精神病药为什么会导致猝死(下)?
水培花卉的光照管理
“水培”蝴蝶兰,也能养活,长得还很快,摆在桌子上正合适!
产品如何挖掘需求场景
减肥期间是否可以食用凉皮凉面?医生的专业解答来了
车主死亡后违章罚款和扣分如何处理?
一年质保是什么意思?
如何用 Redis 做实时订阅推送
怎么查找excel更新的内容
清华大学邓志东:人工智能的研究前沿、迭代演进与发展路径
项目公司管理转岗指南:从目标设定到职业发展
结直肠癌免疫逃逸机制研究新突破:单细胞分析揭示患者分层新视角
给娃刷牙刷了个寂寞!不同年龄段如何有效刷牙?