通过点灯逻辑体验FPGA的编程流程

“点灯”是我们板农们拿到一块板子后第一个要实现的目标,正如软件工程师尝试新的语言必然会先写出“hello world”一样。
学习fpga也不例外,不要小瞧这只小小的led,它能在你学习的路上带给你光明,引导一个门外汉跨进可编程逻辑世界的大门!
作为“寒假在家一起练”的第二次直播讲座,我们今天就基于1个led做了1个多小时的分享,从创建第一个fpga项目、写下第一句verilog代码,到调用fpga的ip cores,体验了fpga的设计流程以及verilog的基本语法规范。
用的平台是这款:
模块microusb右侧白色的小东东就是一只用fpga的io连接的led,左侧的一只是电源指示灯,只要板上电源工作正常它就能亮。而fpga连接的led则可以通过编程fpga内部的逻辑实现不同的状态。
btw,苏老师所有的fpga项目中最前面的几行代码肯定是一个每秒跳动一次的“心跳灯”,看着它跳动,心安。
先简单说一下点灯的要素 - led点灯的工作原理:
led的典型连接方式
灯亮以及灯亮时的亮度取决于下面的因素:
供电电源和控制管脚之间的压差一定要大于led的正向偏压vbias灯才能亮,否则是灭的。不同的器件,不同颜色的led其偏压也是不同的,要看数据手册;
改变电阻值r1(我们一般称之为限流电阻), i = (3.3v-vbias)/r1也就发生了变化,led的亮度也跟着变;
已经设计好的板子,限流电阻的值已经可能动态地改变,如果要调整led的亮度,就要调节流经led和限流电阻上的平均电流;
项目1 - 让led灯亮起来:
创建项目一个新项目 - led
创建verilog代码 module(led),体会verilog的语法结构;
module led (led); output led; assign led = 1'b0; endmodule
编译
分配管脚(查找管脚映射表,通过电路图或项目中的表格)
生成jed文件
查看资源占用情况
下载到16管脚的fpga模块上
项目2 - 让led灯跳动起来
在module的端口中添加clk的输入信号
在verilog逻辑中通过计数分频产生12m/2 23 (~1.5hz) 的周期信号,体会wire、reg的区别以及计数分频的实现方法
module led (clk_in,led);input clk_in;output led; reg [23:0] counter; always @(posedge clk_in) counter = counter + 1'b1; assign led = counter[23]; endmodule
编译
分配管脚中补充新的clk管脚
生成jed文件
查看资源占用情况
下载到16管脚的fpga模块上
项目3 - 让led灯每秒刚好跳动1次
修改verilog逻辑,能够产生精准的1hz的周期信号,体会偶数分频乃至奇数分频的实现方法
module led (clk_in,led);input clk_in;output led; parameter t1s = 12_000_000;parameter t05s = t1s/2; reg [23:0] counter; always @(posedge clk_in) begin if(counter < t1s-1) counter <= counter + 1'b1; else counter <= 1'b0; end assign led = (counter < t05s); endmodule
生成jed文件
查看资源占用情况
下载到16管脚的fpga模块上,对比结果
项目4 - 心跳加速会如何?- 50hz的心跳灯
修改verilog逻辑,产生50hz的周期信号
生成jed文件
下载到16管脚的fpga模块上,led亮度变化,视觉暂留的效果,可以通过调节占空比控制led的亮度(pwm),亮度与占空比(平均电流)非线性
单色的led - 通过调节驱动信号的占空比调节led的亮度
3色的led - 通过调节每种颜色的led的亮度实现不同的颜色组合
项目5 - 体验内部锁相环的使用以及内部ip core的调用方式
添加pll的ip
修改verilog逻辑,通过pll输出的时钟,产生1hz的周期信号
生成jed文件
查看资源占用情况
下载到16管脚的fpga模块上
其实还有更多可玩的,时间关系就让同学们自己去琢磨和体验去了,比如:
“呼吸”灯 - 通过pwm来实现呼吸的效果
“流水”灯 - 多只led组合,通过逻辑编程可以实现炫酷的效果(1维)
“交通”灯 - r、g、b三色组合,通过状态机的编程模拟道路交通灯的工作状态
数码管 - 其实也是几根led组合在一起的显示器件
点阵led屏 - 体会图形化显示的基本原理
一颗led才几分钱,但可以玩出很多花样,可以锻炼很多技能,是不是?
原文标题:通过点灯的逻辑体验fpga的编程流程以及verilog语法基础
文章出处:【微信公众号:fpga入门到精通】欢迎添加关注!文章转载请注明出处。


能效管理平台在污水处理厂电气节能中的应用
中国电信携手海思和长虹打造5G机器视觉方案
如何才能有效解决LED显示屏“毛毛虫”的问题
访中科院自动化研究所复杂系统管理与控制国家重点实验室主任
华为海思地位不保?芯片龙头或将易主?
通过点灯逻辑体验FPGA的编程流程
TDK产品in多元化的未来游戏设备
中国电信表示坚决不打价格战 将共同维护行业生态
关于云端保护的介绍和应用
银行的智能客服质量怎样可以得到改善
博鳌论坛:AI时代下人类教育将如何开展?
vivo推出了iQOO Neo凭借超高的性价比,日销售额就突破亿元
All in Cloud 时代已来,“安防云”已初现雏形
【教程】数传电台如何选择分包长度?
国内一线汽车主机厂赞誉新零售:想到火,没想到这么火!
数据至上 迈凯伦COO的技术哲学
2022年中国DPU行业白皮书 DPU将成为CPU、GPU后的第三块主力芯片
盘点新能源汽车自燃事故:今年已有20例,多为三元锂电池
比特币现金和比特币之间有什么差距
工业4.0如何帮助钢铁产业数字化转型