Skip to content

Commit caf3bb7

Browse files
committed
ws2812_ctl: fix byte shift issue
1 parent 9c9c755 commit caf3bb7

File tree

1 file changed

+15
-21
lines changed

1 file changed

+15
-21
lines changed

rtl/ws2812_ctl.sv

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ parameter [1:0] READ_RAM = 2'b01; // Read RAM Data
2727
parameter [1:0] SEND_BIT = 2'b10; // Send Data Bit
2828
parameter [1:0] SEND_RST = 2'b11; // Send Reset Code
2929

30-
logic bit_rdy;
31-
3230
logic ram_rd_st;
3331
logic ram_rd_en;
3432
logic [31:0] ram_rd_q;
@@ -45,7 +43,7 @@ logic ram_rd_rdy;
4543
logic ram_rd_done;
4644

4745
wire bit_done = ram_rd_st | bit_done_in;
48-
wire ram_next = bit_done & (bit_sel == 5'd23);
46+
wire ram_next = (bit_sel == 5'd23);
4947
wire ram_done = (ram_rd_addr == 6'h00);
5048

5149
edge2en ram_rd_en_edge(
@@ -85,8 +83,6 @@ begin
8583
if (!rst_n_in) begin
8684
ctl_sta <= IDLE;
8785

88-
bit_rdy <= 1'b0;
89-
9086
ram_rd_st <= 1'b0;
9187
ram_rd_en <= 1'b0;
9288

@@ -97,28 +93,26 @@ begin
9793
bit_data_out <= 1'b0;
9894
end else begin
9995
case (ctl_sta)
100-
IDLE:
101-
ctl_sta <= frame_rdy_in ? READ_RAM : ctl_sta;
102-
READ_RAM:
103-
ctl_sta <= ram_rd_done ? SEND_BIT : ctl_sta;
104-
SEND_BIT:
105-
ctl_sta <= ram_next ? (ram_done ? SEND_RST : READ_RAM) : ctl_sta;
106-
SEND_RST:
107-
ctl_sta <= (rst_cnt == CNT_50_US) ? IDLE : ctl_sta;
108-
default:
109-
ctl_sta <= IDLE;
96+
IDLE:
97+
ctl_sta <= frame_rdy_in ? READ_RAM : ctl_sta;
98+
READ_RAM:
99+
ctl_sta <= ram_rd_done ? SEND_BIT : ctl_sta;
100+
SEND_BIT:
101+
ctl_sta <= (bit_done & ram_next) ? (ram_done ? SEND_RST : READ_RAM) : ctl_sta;
102+
SEND_RST:
103+
ctl_sta <= (rst_cnt == CNT_50_US) ? IDLE : ctl_sta;
104+
default:
105+
ctl_sta <= IDLE;
110106
endcase
111107

112-
bit_rdy <= (ctl_sta == SEND_BIT) & bit_done;
113-
114-
ram_rd_st <= ((ctl_sta == IDLE) | ram_rd_st) & (ctl_sta != SEND_BIT);
108+
ram_rd_st <= (ctl_sta != SEND_BIT) & ((ctl_sta == IDLE) | ram_rd_st);
115109
ram_rd_en <= (ctl_sta == READ_RAM) & ~ram_rd_done;
116110

117-
bit_sel <= (ctl_sta == SEND_BIT) ? bit_sel + bit_done : 5'h00;
111+
bit_sel <= (ctl_sta == SEND_BIT) ? bit_sel + (bit_done & ~ram_next) : 5'h00;
118112
rst_cnt <= (ctl_sta == SEND_RST) ? rst_cnt + 1'b1 : 16'h0000;
119113

120-
bit_rdy_out <= bit_rdy;
121-
bit_data_out <= ram_rd_data[5'd23 - bit_sel];
114+
bit_rdy_out <= (ctl_sta == SEND_BIT) & bit_done;
115+
bit_data_out <= (ctl_sta == SEND_BIT) & bit_done ? ram_rd_data[5'd23 - bit_sel] : bit_data_out;
122116
end
123117
end
124118

0 commit comments

Comments
 (0)