时间:2024-07-28 来源:网络搜集 关于我们 0
现代数字电路的设计是基于大规模集成电路,人工智能等技术的兴起对高速数据处理和高速计算提出了新的需求,但数字电路课程仍然以讲授中小规模电路为主,为解决这种矛盾,北邮数电采用将理论教学是实践教学相融合的教学模式,把FPGA引入随课实验,在理论授课过程中,对典型的传统电路给出其Verilog描述,并要求学生在课下用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学习资源
WiFi开发之环境配置--Arduino for ESP8266
WiFi开发之入门篇--Arduino for ESP8266