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进行计算。
热门推荐
实用乐观主义是什么样的?
设计中的光与影
整个雪梨炖百合银耳汤
白萝卜减肥方法:原理、食用方法与注意事项全解析
关爱“玻璃人”,了解血友病 | 世界血友病日
血友病B患者缺乏的凝血因子是什么
潍坊海绵城市改造:沃华医药园区的生态转型之路
不同规模企业的人才培养体系应该如何设计?
编程底子不好,如何学习使用DSP和CCS
机动车所有权转移:交付即生效,登记非必要
网络协议大百科:从 TCP 到 IP,彻底搞懂网络世界的底层逻辑
香蕉和啤酒能一起喝吗
如何防范企业在税务规划中陷入偷税
合伙人的权利和义务有哪些
私募基金收益分配模式详解
包装流水线安全操作规程有哪些
周围人的这些表现,说明你比想象的更有吸引力
银行卡新规定:6个月不用将被视为闲置账户
广州中考复读:如何提高注意力与学习效率?
【Qt】如何搭建Qt开发环境
鼻塞流鼻涕怎么治疗
配料表,食品业的新战场 健康趋势引领变革
如何看小说的web版
紫砂大师陈鸣远
历史股票价格对当前投资有何启示?
清明蔗,毒过蛇,手把手教你挑选安全甘蔗
自闭症的训练方法:五个步骤提升孩子的注意力
营业执照经营范围如何准确填写:了解行业分类和法律法规要求
多传感器融合定位技术革新:无线定位精度的新突破
主动买入的时机如何把握?把握这些时机需要考虑哪些因素?