当前位置:首页 > 新闻资讯 > FPGA之家动态 >

FPGA入门--彩虹呼吸灯

时间:2024-07-28      来源:网络搜集 关于我们 0

现代数字电路的设计是基于大规模集成电路,人工智能等技术的兴起对高速数据处理和高速计算提出了新的需求,但数字电路课程仍然以讲授中小规模电路为主,为解决这种矛盾,北邮数电采用将理论教学是实践教学相融合的教学模式,把FPGA引入随课实验,在理论授课过程中,对典型的传统电路给出其Verilog描述,并要求学生在课下用FPGA进行验证,较好地解决了理论和现实脱节的矛盾。经过几年的尝试,一个小小的口袋型FPGA开发板,可以极大地调动学生的学习积极性和学习热情,使数字电路课程不再枯燥,也使这个课程具有了鲜明的时代气息。

北邮版FPGA开发板

上有两个RGB LED,利用两个RGB LED,采用PWM技术,可以实现一种彩虹效果的呼吸灯,挺有趣的,不妨试试?

板上配置了2路的全彩色RGB LED。RGB LED二极管有四个引脚,它把3个普通led被封装在其内部,这三个led颜色分别为红、绿、蓝三种颜色,通过控制各个LED的亮度,可以混合出几乎任何想要的颜色。

本款FPGA开发板中的RGB三色LED采用共阳极接法,R、G、B这三个脚分别引出接负极,这三脚之外的第四脚为公共端接正极(阳极)。

参考代码

module rgb(clk, rst_n, r, g, b);

input clk;

input rst_n;

output r, g, b;

reg [15:0] wheel_pos;

reg [7:0] wheel_pos_buffer;

reg [7:0] r_buf,g_buf,b_buf;

reg [31:0] div_buffer;

wire clk;

reg div_clk;

pwm pwm_r(r, r_buf, clk);

pwm pwm_g(g, g_buf, clk);

pwm pwm_b(b, b_buf, clk);

always@(posedge clk)

begin

if(div_buffer < 50000)

begin

div_buffer <= div_buffer + 1;

end

else

begin

div_clk <= ~div_clk;

div_buffer <= 0;

end

end

always@(posedge div_clk)

begin

if(wheel_pos < 765)

wheel_pos <= wheel_pos + 1;

else

wheel_pos <= 0;

if(wheel_pos < 255)

begin

r_buf <= 255 - wheel_pos;

g_buf <= 0;

b_buf <= wheel_pos;

end

else if(wheel_pos < 510)

begin

r_buf <= 0;

g_buf <= (wheel_pos - 255);

b_buf <= 255 - (wheel_pos - 255);

end

else

begin

r_buf <= (wheel_pos - 510);

g_buf <= 255 - (wheel_pos - 510);

b_buf <= 0;

end

end

endmodule;

module pwm(out, duty, clk);

output reg out;

input [7:0] duty;

input clk;

reg [7:0] buffer;

always@(posedge clk)

begin

buffer <= buffer + 1;

if(buffer < duty)

begin

out <= 0;

end

else

begin

out <= 1;

end

end

endmodule

注:该代码仅为参考,相信您能实现效果更好的彩虹呼吸灯,请同学们自己建立工程实现。

FPGA板的资源分配表

北邮版FPGA开发板

8个LED,共阴极,高电平点亮

七段数码管,共阴极,高电平点亮

RGB LED,共阳极,低电平点亮

2个按键:按下为高电平

附:FPGA学习资源

让中学生一天学会FPGA开发

FPGA入门--安装集成开发环境Quartus

FPGA入门--建立第一个工程

大学生上课为什么一定要认真听讲?

FPGA入门--点亮LED

FPGA入门--七段数码管显示

FPGA入门--在FPGA中实现8051单片机

口袋型FPGA开发板--《数字电路》课程的辅助教学工具

FPGA入门--一个简单的DEMO例程

在Verilog中何时用wire,何时用reg?

Verilog中阻塞和非阻塞赋值原则

真有人在不经意间或在世人毫不知情的情况下拯救了世界吗?

为什么大多数人宁愿吃生活的苦,也不愿吃学习的苦?

国内大学为什么不推行单人宿舍?

大学生上课为什么一定要认真听讲?

我们在北邮等你

Arduino基础实验教程

Arduino示例--超声波测距

Arduino示例--用DHT11检测环境温度和湿度

Arduino示例--热释电传感器

你真的熟悉Arduino吗?

Arduino示例--点亮OLED屏

最小的Arduino开发板Digispark

WiFi开发之环境配置--Arduino for ESP8266

WiFi开发之入门篇--Arduino for ESP8266


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言