设为首页 加入收藏

TOP

基于FPGA的RGB灯WS2812B的控制器设计(三)
2023-07-23 13:25:07 】 浏览:135
Tags:基于 FPGA RGB WS2812B
同步标志,在为高期间会复位单像素控制模块 ila_0 ila_0_inst ( .clk(Clk), // input wire clk .probe0(ram_output_addr), // input wire [3:0] probe0 .probe1(ram_output_data), // input wire [23:0] probe1 .probe2(Data_valid), // input wire [0:0] probe2 .probe3(Data_out) // input wire [0:0] probe3 ); vio_0 vio_0_inst ( .clk(Clk), // input wire clk .probe_out0(ram_input_addr), // output wire [3 : 0] probe_out0 .probe_out1(ram_input_data), // output wire [23 : 0] probe_out1 .probe_out2(ram_input_en) // output wire [0 : 0] probe_out2 ); blk_mem_gen_0 blk_mem_gen_0_inst ( .clka(Clk), // input wire clka .wea(ram_input_en), // input wire [0 : 0] wea .addra(ram_input_addr), // input wire [3 : 0] addra .dina(ram_input_data), // input wire [23 : 0] dina .clkb(Clk), // input wire clkb .addrb(ram_output_addr), // input wire [3 : 0] addrb .doutb(ram_output_data) // output wire [23 : 0] doutb ); WS2812B_controller WS2812B_controller_inst( .Clk(Clk), .Rst_n(~act_60us & Rst_n), .Disp_Data(ram_output_data), .Data_valid(Data_valid), .Send_done(Send_done), .Data_out(Data_out_t) ); always @(posedge Clk or posedge Rst_n) begin if(Rst_n == 0) ram_output_addr <= 0; else if(cnt_60us == CNT_60US - 1 ) ram_output_addr <= 0; else if(Send_done == 1 & ~act_60us) ram_output_addr <= ram_output_addr + 1'b1; else ram_output_addr <= ram_output_addr; end always @(posedge Clk) Send_done_r <= Send_done; always @(posedge Clk or posedge Rst_n) begin if(Rst_n == 0) Data_valid <= 0; else if((Send_done_r == 1 & ~act_60us)|cnt_60us == CNT_60US - 1) Data_valid <= 1; else Data_valid <= 0; end always @(posedge Clk or posedge Rst_n) begin if(Rst_n == 0) act_60us <= 0; else if(ram_output_addr == 4'hf & Send_done == 1) act_60us <= 1; else if(cnt_60us == CNT_60US - 1) act_60us <= 0; else act_60us <= act_60us; end always @(posedge Clk or posedge Rst_n) begin if(Rst_n == 0) cnt_60us <= 0; else if(cnt_60us == CNT_60US - 1) cnt_60us <= 0; else if(act_60us) cnt_60us <= cnt_60us + 1'b1; else cnt_60us <= 0; end assign Data_out = (act_60us)? 0:Data_out_t; endmodule

4、多像素显示模块仿真

仿真文件

`timescale 1ns / 1ps

module display_tb();
    
    
reg clk_50m;
initial clk_50m <= 1;
always #10 clk_50m <= ~clk_50m;
 
reg rst_n;
initial begin
    rst_n <= 0;
    #200
    rst_n <= 1;
end

wire Data_out;

WS2812B_display WS2812B_display_inst(
        .Clk(clk_50m),
        .Rst_n(rst_n),
        .Data_out(Data_out)
    );
endmodule

仿真结果

image
结论:模块能够正确给出Data_valid和send_done信号,且60us的帧同步信号也能正确的给出。仿真通过

二、上板验证

将程序烧入芯片中,通过VIO控制写入RAM的数据可以改变RGB的状态。
image
image
该模块能够正常的改变每个RGB的状态,该模块初步验证可行。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【牛客】6 跨时钟域传输 下一篇【牛客】7 计数器&存储器&综合

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目