ws2812 animation

main
lincaigui 5 months ago
parent 695c3033e9
commit 68fc82897a

@ -1,74 +1,270 @@
module data_cfg(
input wire [4: 0] cnt_bit,
input wire [6: 0] cnt_led,
input wire [1: 0] frame ,
output wire bit
);
wire [23: 0] data[63: 0];//
assign bit = data[cnt_led][23 - cnt_bit];
assign data[00] = {8'hff, 8'hff, 8'hff};//GRB
assign data[01] = {8'h00, 8'h00, 8'h00};//GRB
assign data[02] = {8'h00, 8'hff, 8'h00};//GRB
assign data[03] = {8'h00, 8'h00, 8'h00};//GRB
assign data[04] = {8'h00, 8'h00, 8'h00};//GRB
assign data[05] = {8'h00, 8'h00, 8'h00};//GRB
assign data[06] = {8'h00, 8'h00, 8'h00};//GRB
assign data[07] = {8'h00, 8'h00, 8'h00};//GRB
assign data[08] = {8'h00, 8'h00, 8'h00};//GRB
assign data[09] = {8'h00, 8'h00, 8'h00};//GRB
assign data[10] = {8'h00, 8'h00, 8'h00};//GRB
assign data[11] = {8'h00, 8'h00, 8'h00};//GRB
assign data[12] = {8'h00, 8'h00, 8'h00};//GRB
assign data[13] = {8'h00, 8'h00, 8'h00};//GRB
assign data[14] = {8'h00, 8'h00, 8'h00};//GRB
assign data[15] = {8'h00, 8'h00, 8'h00};//GRB
assign data[16] = {8'h00, 8'h00, 8'h00};//GRB
assign data[17] = {8'h00, 8'h00, 8'h00};//GRB
assign data[18] = {8'h00, 8'h00, 8'h00};//GRB
assign data[19] = {8'h00, 8'h00, 8'h00};//GRB
assign data[20] = {8'h00, 8'h00, 8'h00};//GRB
assign data[21] = {8'h00, 8'h00, 8'h00};//GRB
assign data[22] = {8'h00, 8'h00, 8'h00};//GRB
assign data[23] = {8'h00, 8'h00, 8'h00};//GRB
assign data[24] = {8'h00, 8'h00, 8'h00};//GRB
assign data[25] = {8'h00, 8'h00, 8'h00};//GRB
assign data[26] = {8'h00, 8'h00, 8'h00};//GRB
assign data[27] = {8'h00, 8'h00, 8'h00};//GRB
assign data[28] = {8'h00, 8'h00, 8'h00};//GRB
assign data[29] = {8'h00, 8'h00, 8'h00};//GRB
assign data[30] = {8'h00, 8'h00, 8'h00};//GRB
assign data[31] = {8'h00, 8'h00, 8'h00};//GRB
assign data[32] = {8'h00, 8'h00, 8'h00};//GRB
assign data[33] = {8'h00, 8'h00, 8'h00};//GRB
assign data[34] = {8'h00, 8'h00, 8'h00};//GRB
assign data[35] = {8'h00, 8'h00, 8'h00};//GRB
assign data[36] = {8'h00, 8'h00, 8'h00};//GRB
assign data[37] = {8'h00, 8'h00, 8'h00};//GRB
assign data[38] = {8'h00, 8'h00, 8'h00};//GRB
assign data[39] = {8'h00, 8'h00, 8'h00};//GRB
assign data[40] = {8'h00, 8'h00, 8'h00};//GRB
assign data[41] = {8'h00, 8'h00, 8'h00};//GRB
assign data[42] = {8'h00, 8'h00, 8'h00};//GRB
assign data[43] = {8'h00, 8'h00, 8'h00};//GRB
assign data[44] = {8'h00, 8'h00, 8'h00};//GRB
assign data[45] = {8'h00, 8'h00, 8'h00};//GRB
assign data[46] = {8'h00, 8'h00, 8'h00};//GRB
assign data[47] = {8'h00, 8'h00, 8'h00};//GRB
assign data[48] = {8'h00, 8'h00, 8'h00};//GRB
assign data[49] = {8'h00, 8'h00, 8'h00};//GRB
assign data[50] = {8'h00, 8'h00, 8'h00};//GRB
assign data[51] = {8'h00, 8'h00, 8'h00};//GRB
assign data[52] = {8'h00, 8'h00, 8'h00};//GRB
assign data[53] = {8'h00, 8'h00, 8'h00};//GRB
assign data[54] = {8'h00, 8'h00, 8'h00};//GRB
assign data[55] = {8'h00, 8'h00, 8'h00};//GRB
assign data[56] = {8'h00, 8'h00, 8'h00};//GRB
assign data[57] = {8'h00, 8'h00, 8'h00};//GRB
assign data[58] = {8'h00, 8'h00, 8'h00};//GRB
assign data[59] = {8'h00, 8'h00, 8'h00};//GRB
assign data[60] = {8'h00, 8'h00, 8'h00};//GRB
assign data[61] = {8'h00, 8'h00, 8'h00};//GRB
assign data[62] = {8'h00, 8'h00, 8'h00};//GRB
assign data[63] = {8'h00, 8'h00, 8'h00};//GRB
wire [23: 0] data[255: 0];//
assign bit = data[frame * 64 + cnt_led][23 - cnt_bit];
//U
assign data[00] = {8'h00,8'h00,8'h00} ;//0
assign data[01] = {8'hff,8'hff,8'hff} ;
assign data[02] = {8'h00,8'h00,8'h00} ;
assign data[03] = {8'h00,8'h00,8'h00} ;
assign data[04] = {8'h00,8'h00,8'h00} ;
assign data[05] = {8'h00,8'h00,8'h00} ;
assign data[06] = {8'hff,8'hff,8'hff} ;
assign data[07] = {8'h00,8'h00,8'h00} ;
assign data[08] = {8'h00,8'h00,8'h00} ;//1
assign data[09] = {8'hff,8'hff,8'hff} ;
assign data[10] = {8'h00,8'h00,8'h00} ;
assign data[11] = {8'h00,8'h00,8'h00} ;
assign data[12] = {8'h00,8'h00,8'h00} ;
assign data[13] = {8'h00,8'h00,8'h00} ;
assign data[14] = {8'hff,8'hff,8'hff} ;
assign data[15] = {8'h00,8'h00,8'h00} ;
assign data[16] = {8'h00,8'h00,8'h00} ;//2
assign data[17] = {8'hff,8'hff,8'hff} ;
assign data[18] = {8'h00,8'h00,8'h00} ;
assign data[19] = {8'h00,8'h00,8'h00} ;
assign data[20] = {8'h00,8'h00,8'h00} ;
assign data[21] = {8'h00,8'h00,8'h00} ;
assign data[22] = {8'hff,8'hff,8'hff} ;
assign data[23] = {8'h00,8'h00,8'h00} ;
assign data[24] = {8'h00,8'h00,8'h00} ;//3
assign data[25] = {8'hff,8'hff,8'hff} ;
assign data[26] = {8'h00,8'h00,8'h00} ;
assign data[27] = {8'h00,8'h00,8'h00} ;
assign data[28] = {8'h00,8'h00,8'h00} ;
assign data[29] = {8'h00,8'h00,8'h00} ;
assign data[30] = {8'hff,8'hff,8'hff} ;
assign data[31] = {8'h00,8'h00,8'h00} ;
assign data[32] = {8'h00,8'h00,8'h00} ;//4
assign data[33] = {8'hff,8'hff,8'hff} ;
assign data[34] = {8'h00,8'h00,8'h00} ;
assign data[35] = {8'h00,8'h00,8'h00} ;
assign data[36] = {8'h00,8'h00,8'h00} ;
assign data[37] = {8'h00,8'h00,8'h00} ;
assign data[38] = {8'hff,8'hff,8'hff} ;
assign data[39] = {8'h00,8'h00,8'h00} ;
assign data[40] = {8'h00,8'h00,8'h00} ;//5
assign data[41] = {8'hff,8'hff,8'hff} ;
assign data[42] = {8'h00,8'h00,8'h00} ;
assign data[43] = {8'h00,8'h00,8'h00} ;
assign data[44] = {8'h00,8'h00,8'h00} ;
assign data[45] = {8'h00,8'h00,8'h00} ;
assign data[46] = {8'hff,8'hff,8'hff} ;
assign data[47] = {8'h00,8'h00,8'h00} ;
assign data[48] = {8'h00,8'h00,8'h00} ;//6
assign data[49] = {8'h00,8'h00,8'h00} ;
assign data[50] = {8'hff,8'hff,8'hff} ;
assign data[51] = {8'h00,8'h00,8'h00} ;
assign data[52] = {8'h00,8'h00,8'h00} ;
assign data[53] = {8'hff,8'hff,8'hff} ;
assign data[54] = {8'h00,8'h00,8'h00} ;
assign data[55] = {8'h00,8'h00,8'h00} ;
assign data[56] = {8'h00,8'h00,8'h00} ;//7
assign data[57] = {8'h00,8'h00,8'h00} ;
assign data[58] = {8'h00,8'h00,8'h00} ;
assign data[59] = {8'hff,8'hff,8'hff} ;
assign data[60] = {8'hff,8'hff,8'hff} ;
assign data[61] = {8'h00,8'h00,8'h00} ;
assign data[62] = {8'h00,8'h00,8'h00} ;
assign data[63] = {8'h00,8'h00,8'h00} ;//8
//D
assign data[64] = {8'h00,8'h00,8'h00} ;//0
assign data[65] = {8'hff,8'hff,8'hff} ;
assign data[66] = {8'hff,8'hff,8'hff} ;
assign data[67] = {8'hff,8'hff,8'hff} ;
assign data[68] = {8'hff,8'hff,8'hff} ;
assign data[69] = {8'h00,8'h00,8'h00} ;
assign data[70] = {8'h00,8'h00,8'h00} ;
assign data[71] = {8'h00,8'h00,8'h00} ;
assign data[72] = {8'h00,8'h00,8'h00} ;//1
assign data[73] = {8'hff,8'hff,8'hff} ;
assign data[74] = {8'h00,8'h00,8'h00} ;
assign data[75] = {8'h00,8'h00,8'h00} ;
assign data[76] = {8'h00,8'h00,8'h00} ;
assign data[77] = {8'hff,8'hff,8'hff} ;
assign data[78] = {8'h00,8'h00,8'h00} ;
assign data[79] = {8'h00,8'h00,8'h00} ;
assign data[80] = {8'h00,8'h00,8'h00} ;//2
assign data[81] = {8'hff,8'hff,8'hff} ;
assign data[82] = {8'h00,8'h00,8'h00} ;
assign data[83] = {8'h00,8'h00,8'h00} ;
assign data[84] = {8'h00,8'h00,8'h00} ;
assign data[85] = {8'h00,8'h00,8'h00} ;
assign data[86] = {8'hff,8'hff,8'hff} ;
assign data[87] = {8'h00,8'h00,8'h00} ;
assign data[88] = {8'h00,8'h00,8'h00} ;//3
assign data[89] = {8'hff,8'hff,8'hff} ;
assign data[90] = {8'h00,8'h00,8'h00} ;
assign data[91] = {8'h00,8'h00,8'h00} ;
assign data[92] = {8'h00,8'h00,8'h00} ;
assign data[93] = {8'h00,8'h00,8'h00} ;
assign data[94] = {8'hff,8'hff,8'hff} ;
assign data[95] = {8'h00,8'h00,8'h00} ;
assign data[96] = {8'h00,8'h00,8'h00} ;//4
assign data[97] = {8'hff,8'hff,8'hff} ;
assign data[98] = {8'h00,8'h00,8'h00} ;
assign data[99] = {8'h00,8'h00,8'h00} ;
assign data[100] = {8'h00,8'h00,8'h00} ;
assign data[101] = {8'h00,8'h00,8'h00} ;
assign data[102] = {8'hff,8'hff,8'hff} ;
assign data[103] = {8'h00,8'h00,8'h00} ;
assign data[104] = {8'h00,8'h00,8'h00} ;//5
assign data[105] = {8'hff,8'hff,8'hff} ;
assign data[106] = {8'h00,8'h00,8'h00} ;
assign data[107] = {8'h00,8'h00,8'h00} ;
assign data[108] = {8'h00,8'h00,8'h00} ;
assign data[109] = {8'h00,8'h00,8'h00} ;
assign data[110] = {8'hff,8'hff,8'hff} ;
assign data[111] = {8'h00,8'h00,8'h00} ;
assign data[112] = {8'h00,8'h00,8'h00} ;//6
assign data[113] = {8'hff,8'hff,8'hff} ;
assign data[114] = {8'h00,8'h00,8'h00} ;
assign data[115] = {8'h00,8'h00,8'h00} ;
assign data[116] = {8'h00,8'h00,8'h00} ;
assign data[117] = {8'hff,8'hff,8'hff} ;
assign data[118] = {8'h00,8'h00,8'h00} ;
assign data[119] = {8'h00,8'h00,8'h00} ;
assign data[120] = {8'h00,8'h00,8'h00} ;//7
assign data[121] = {8'hff,8'hff,8'hff} ;
assign data[122] = {8'hff,8'hff,8'hff} ;
assign data[123] = {8'hff,8'hff,8'hff} ;
assign data[124] = {8'hff,8'hff,8'hff} ;
assign data[125] = {8'h00,8'h00,8'h00} ;
assign data[126] = {8'h00,8'h00,8'h00} ;
assign data[127] = {8'h00,8'h00,8'h00} ;
//L
assign data[128] = {8'h00,8'h00,8'h00} ;//0
assign data[129] = {8'hff,8'hff,8'hff} ;
assign data[130] = {8'h00,8'h00,8'h00} ;
assign data[131] = {8'h00,8'h00,8'h00} ;
assign data[132] = {8'h00,8'h00,8'h00} ;
assign data[133] = {8'h00,8'h00,8'h00} ;
assign data[134] = {8'h00,8'h00,8'h00} ;
assign data[135] = {8'h00,8'h00,8'h00} ;
assign data[136] = {8'h00,8'h00,8'h00} ;//1
assign data[137] = {8'hff,8'hff,8'hff} ;
assign data[138] = {8'h00,8'h00,8'h00} ;
assign data[139] = {8'h00,8'h00,8'h00} ;
assign data[140] = {8'h00,8'h00,8'h00} ;
assign data[141] = {8'h00,8'h00,8'h00} ;
assign data[142] = {8'h00,8'h00,8'h00} ;
assign data[143] = {8'h00,8'h00,8'h00} ;
assign data[144] = {8'h00,8'h00,8'h00} ;//2
assign data[145] = {8'hff,8'hff,8'hff} ;
assign data[146] = {8'h00,8'h00,8'h00} ;
assign data[147] = {8'h00,8'h00,8'h00} ;
assign data[148] = {8'h00,8'h00,8'h00} ;
assign data[149] = {8'h00,8'h00,8'h00} ;
assign data[150] = {8'h00,8'h00,8'h00} ;
assign data[151] = {8'h00,8'h00,8'h00} ;
assign data[152] = {8'h00,8'h00,8'h00} ;//3
assign data[153] = {8'hff,8'hff,8'hff} ;
assign data[154] = {8'h00,8'h00,8'h00} ;
assign data[155] = {8'h00,8'h00,8'h00} ;
assign data[156] = {8'h00,8'h00,8'h00} ;
assign data[157] = {8'h00,8'h00,8'h00} ;
assign data[158] = {8'h00,8'h00,8'h00} ;
assign data[159] = {8'h00,8'h00,8'h00} ;
assign data[160] = {8'h00,8'h00,8'h00} ;//4
assign data[161] = {8'hff,8'hff,8'hff} ;
assign data[162] = {8'h00,8'h00,8'h00} ;
assign data[163] = {8'h00,8'h00,8'h00} ;
assign data[164] = {8'h00,8'h00,8'h00} ;
assign data[165] = {8'h00,8'h00,8'h00} ;
assign data[166] = {8'h00,8'h00,8'h00} ;
assign data[167] = {8'h00,8'h00,8'h00} ;
assign data[168] = {8'h00,8'h00,8'h00} ;//5
assign data[169] = {8'hff,8'hff,8'hff} ;
assign data[170] = {8'h00,8'h00,8'h00} ;
assign data[171] = {8'h00,8'h00,8'h00} ;
assign data[172] = {8'h00,8'h00,8'h00} ;
assign data[173] = {8'h00,8'h00,8'h00} ;
assign data[174] = {8'h00,8'h00,8'h00} ;
assign data[175] = {8'h00,8'h00,8'h00} ;
assign data[176] = {8'h00,8'h00,8'h00} ;//6
assign data[177] = {8'hff,8'hff,8'hff} ;
assign data[178] = {8'h00,8'h00,8'h00} ;
assign data[179] = {8'h00,8'h00,8'h00} ;
assign data[180] = {8'h00,8'h00,8'h00} ;
assign data[181] = {8'h00,8'h00,8'h00} ;
assign data[182] = {8'h00,8'h00,8'h00} ;
assign data[183] = {8'h00,8'h00,8'h00} ;
assign data[184] = {8'h00,8'h00,8'h00} ;//7
assign data[185] = {8'hff,8'hff,8'hff} ;
assign data[186] = {8'hff,8'hff,8'hff} ;
assign data[187] = {8'hff,8'hff,8'hff} ;
assign data[188] = {8'hff,8'hff,8'hff} ;
assign data[189] = {8'hff,8'hff,8'hff} ;
assign data[190] = {8'hff,8'hff,8'hff} ;
assign data[191] = {8'h00,8'h00,8'h00} ;
//R
assign data[192]= {8'h00,8'h00,8'h00} ;//0
assign data[193]= {8'hff,8'hff,8'hff} ;
assign data[194]= {8'hff,8'hff,8'hff} ;
assign data[195]= {8'hff,8'hff,8'hff} ;
assign data[196]= {8'hff,8'hff,8'hff} ;
assign data[197]= {8'h00,8'h00,8'h00} ;
assign data[198]= {8'h00,8'h00,8'h00} ;
assign data[199]= {8'h00,8'h00,8'h00} ;
assign data[200]= {8'h00,8'h00,8'h00} ;//1
assign data[201]= {8'hff,8'hff,8'hff} ;
assign data[202]= {8'h00,8'h00,8'h00} ;
assign data[203]= {8'h00,8'h00,8'h00} ;
assign data[204]= {8'h00,8'h00,8'h00} ;
assign data[205]= {8'hff,8'hff,8'hff} ;
assign data[206]= {8'h00,8'h00,8'h00} ;
assign data[207]= {8'h00,8'h00,8'h00} ;
assign data[208]= {8'h00,8'h00,8'h00} ;//2
assign data[209]= {8'hff,8'hff,8'hff} ;
assign data[210]= {8'h00,8'h00,8'h00} ;
assign data[211]= {8'h00,8'h00,8'h00} ;
assign data[212]= {8'h00,8'h00,8'h00} ;
assign data[213]= {8'hff,8'hff,8'hff} ;
assign data[214]= {8'h00,8'h00,8'h00} ;
assign data[215]= {8'h00,8'h00,8'h00} ;
assign data[216]= {8'h00,8'h00,8'h00} ;//3
assign data[217]= {8'hff,8'hff,8'hff} ;
assign data[218]= {8'hff,8'hff,8'hff} ;
assign data[219]= {8'hff,8'hff,8'hff} ;
assign data[220]= {8'hff,8'hff,8'hff} ;
assign data[221]= {8'h00,8'h00,8'h00} ;
assign data[222]= {8'h00,8'h00,8'h00} ;
assign data[223]= {8'h00,8'h00,8'h00} ;
assign data[224]= {8'h00,8'h00,8'h00} ;//4
assign data[225]= {8'hff,8'hff,8'hff} ;
assign data[226]= {8'hff,8'hff,8'hff} ;
assign data[227]= {8'h00,8'h00,8'h00} ;
assign data[228] = {8'h00,8'h00,8'h00} ;
assign data[229] = {8'h00,8'h00,8'h00} ;
assign data[230] = {8'h00,8'h00,8'h00} ;
assign data[231] = {8'h00,8'h00,8'h00} ;
assign data[232] = {8'h00,8'h00,8'h00} ;//5
assign data[233] = {8'hff,8'hff,8'hff} ;
assign data[234] = {8'h00,8'h00,8'h00} ;
assign data[235] = {8'hff,8'hff,8'hff} ;
assign data[236] = {8'h00,8'h00,8'h00} ;
assign data[237] = {8'h00,8'h00,8'h00} ;
assign data[238] = {8'h00,8'h00,8'h00} ;
assign data[239] = {8'h00,8'h00,8'h00} ;
assign data[240] = {8'h00,8'h00,8'h00} ;//6
assign data[241] = {8'hff,8'hff,8'hff} ;
assign data[242] = {8'h00,8'h00,8'h00} ;
assign data[243] = {8'h00,8'h00,8'h00} ;
assign data[244] = {8'hff,8'hff,8'hff} ;
assign data[245] = {8'h00,8'h00,8'h00} ;
assign data[246] = {8'h00,8'h00,8'h00} ;
assign data[247] = {8'h00,8'h00,8'h00} ;
assign data[248] = {8'h00,8'h00,8'h00} ;//7
assign data[249] = {8'hff,8'hff,8'hff} ;
assign data[250] = {8'h00,8'h00,8'h00} ;
assign data[251] = {8'h00,8'h00,8'h00} ;
assign data[252] = {8'h00,8'h00,8'h00} ;
assign data[253] = {8'hff,8'hff,8'hff} ;
assign data[254] = {8'h00,8'h00,8'h00} ;
assign data[255] = {8'h00,8'h00,8'h00} ;
endmodule

@ -5,13 +5,18 @@ module ws2812_ctrl(
output wire dout ,
output reg [4: 0] cnt_bit ,
output reg [6: 0] cnt_led
output reg [6: 0] cnt_led ,
output reg [1: 0] frame
);
parameter T0H = 4'd15 ,//bit0
T0L = 6'd40 ,//bit0
T1H = 6'd40 ,//bit1
T1L = 6'd40 ,//bit1
RST = 14'd15000 ;//64led0
RST = 28'd50_000_000 ;//64led0
wire add_frame;//
wire end_frame;//
reg [5: 0] cnt_0;//bit0
wire add_cnt0;//bit0
@ -29,7 +34,7 @@ wire end_cnt_bit;//24bit计数器结束计数条件
wire add_cnt_led;//64led
wire end_cnt_led;//64led
reg [13: 0] cnt_rst;//
reg [27: 0] cnt_rst;//
wire add_cnt_rst;//
wire end_cnt_rst;//
@ -117,11 +122,11 @@ assign end_cnt_led = add_cnt_led && (cnt_led == 7'd63);
//cnt_rst
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)begin
cnt_rst <= 14'd0;
cnt_rst <= 28'd0;
end
else if(add_cnt_rst)begin
if(end_cnt_rst)begin
cnt_rst <= 14'd0;
cnt_rst <= 28'd0;
end
else begin
cnt_rst <= cnt_rst + 1'd1;
@ -149,6 +154,25 @@ always @(posedge sys_clk or negedge sys_rst_n)begin
flag_rst <= flag_rst;//flag_rst
end
end
//frame
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)begin
frame <= 2'd0;
end
else if(add_frame)begin
if(end_frame)begin
frame <= 2'd0;
end
else begin
frame <= frame + 1'd1;
end
end
else begin
frame <= frame;
end
end
assign add_frame = end_cnt_rst;
assign end_frame = add_frame && frame == 2'd3;
//dout
assign dout = (flag_rst == 0) ? (((bit == 0 && cnt_0 < T0H) ? 1'b1 : 1'b0) | ((bit == 1 && cnt_1 < T1H) ? 1'b1 : 1'b0)): 1'b0;
endmodule

@ -7,7 +7,7 @@ module ws2812_top(
wire bit ;
wire [4: 0] cnt_bit;
wire [6: 0] cnt_led;
wire [1: 0] frame ;
ws2812_ctrl ws2812_ctrl_inst(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
@ -15,12 +15,14 @@ ws2812_ctrl ws2812_ctrl_inst(
.dout (dout),
.cnt_bit (cnt_bit),
.cnt_led (cnt_led)
.cnt_led (cnt_led),
.frame (frame)
);
data_cfg data_cfg_inst(
.cnt_bit (cnt_bit),
.cnt_led (cnt_led),
.frame (frame),
.bit (bit)
);

Loading…
Cancel
Save