一.SF102开发板简介
SF102开发板主芯片为SF1S60CG121I器件,SF1系列FPSoC器件采用低功耗工艺,以单芯片实现FPGA和RISC-V芯片优势的融合,包含大容量存储资源(PSRAM)及其硬核控制器,6K逻辑资源,集成了MIPI硬核,支持单芯片加载、上电快速启动、非易失性存储等技术,同时RISC-V上集成AHB Slave、SPI、I2C、UART和GPIO等丰富的外设资源。
板载资源:
- 等效 LUT4 逻辑规模为 5824
- 支持分布式和嵌入式存储器
- 源同步输入/输出接口
- 支持 LVTTL33,LVCMOS(3.3/2.5/1.8/1.5/1.2V), LVDS(3.3/2.5/1.8)电平标准
- 2.2Gbps per line MIPI 硬核控制器
- 2x64Mb 200MHz 存储器+硬核控制器
- RISC-V MCU 硬核最大主频 160Mhz
- 丰富的片上时钟资源
- 支持多种配置模式
- 64 位 DNA
还包括:蜂鸣器,TF卡 SPI接口,0.91寸OLED 128x32 分辨率,16个用户IO,USB转串口,3个DPHY接口,FPGA JTAG,25MHz时钟,MCU JTAG,1个DONE指示LED,RGB用户LED,3个用户按键。
二.开发板RGB用户LED灯的硬件电路图
RGB用户LED:
由原理图可知:LED为高电平点亮;
对应引脚:J4 H5 J5;
三.呼吸灯的原理及Verilog代码实现
呼吸灯在我们的生活中很常见,在手机上多作为消息提醒指示灯而被广泛使用,其效果是小灯在一段时间内从完全熄灭的状态逐渐变到最亮,再在同样的时间段内逐渐达到完全熄灭的状态,并循环往复。这种效果就像“呼吸”一样,有张有弛,而且给人一种很舒服的感觉。其工作原理是利用PWM来控制小灯在相同时间段内的不同占空比, 即在同样小时间段内,小灯亮的时间依次增加到最大后再依次减小,从而实现渐亮到渐灭的“呼吸”效果。
1.程序模块设计:breath_led
2.Verilog代码:
module breath_led
(
input wire sys_clk ,
input wire rst_n ,
output reg [2:0] led_out
);
reg [4:0] cnt_1us ;
reg [9:0] cnt_1ms ;
reg [9:0] cnt_1s ;
reg cnt_en ;
always@( posedge sys_clk or negedge rst_n )
if( rst_n == 1'b0 )
cnt_1us <= 5'd0;
else if( cnt_1us == 5'd24 )
cnt_1us <= 5'd0;
else
cnt_1us <= cnt_1us + 1'b1;
always@( posedge sys_clk or negedge rst_n )
if( rst_n == 1'b0 )
cnt_1ms <= 10'd0 ;
else if( cnt_1ms == 10'd999 && cnt_1us == 5'd24 )
cnt_1ms <= 10'd0;
else if( cnt_1us == 5'd24 )
cnt_1ms <= cnt_1ms + 1'b1;
else
cnt_1ms <= cnt_1ms;
always@( posedge sys_clk or negedge rst_n )
if( rst_n == 1'b0 )
cnt_1s <= 10'd0;
else if( cnt_1s == 10'd999 && cnt_1ms == 10'd999 && cnt_1us == 5'd24 )
cnt_1s <= 10'd0;
else if( cnt_1ms == 10'd999 && cnt_1us == 5'd24 )
cnt_1s <= cnt_1s + 1'b1;
else
cnt_1s <= cnt_1s ;
always@( posedge sys_clk or negedge rst_n )
if( rst_n == 1'b0 )
cnt_en <= 1'b0;
else if( cnt_1s == 10'd999 && cnt_1ms == 10'd999 && cnt_1us == 5'd24 )
cnt_en <= ~ cnt_en;
else
cnt_en <= cnt_en;
always@(posedge sys_clk or negedge rst_n)
if(rst_n == 1'b0)
led_out <= 3'b111;
else if((cnt_en == 1'b1 && cnt_1ms < cnt_1s) || (cnt_en == 1'b0 && cnt_1ms > cnt_1s))
led_out <= 3'b111;
else
led_out <= 3'b000;
endmodule
四.运行结果展示:
RGB用户LED灯呈现呼吸的效果。