Skip to content

Commit ca6688c

Browse files
committed
Convert latching status bits to write 1 to clear
1 parent d8a7f9f commit ca6688c

File tree

3 files changed

+47
-30
lines changed

3 files changed

+47
-30
lines changed

rtl/i2c_master_axil.v

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,13 @@ Status register:
123123
busy: high when module is performing an I2C operation
124124
bus_cont: high when module has control of active bus
125125
bus_act: high when bus is active
126-
miss_ack: set high when an ACK pulse from a slave device is not seen; cleared when read
126+
miss_ack: set high when an ACK pulse from a slave device is not seen; write 1 to clear
127127
cmd_empty: command FIFO empty
128128
cmd_full: command FIFO full
129-
cmd_ovf: command FIFO overflow; cleared when read
129+
cmd_ovf: command FIFO overflow; write 1 to clear
130130
wr_empty: write data FIFO empty
131131
wr_full: write data FIFO full
132-
wr_ovf: write data FIFO overflow; cleared when read
132+
wr_ovf: write data FIFO overflow; write 1 to clear
133133
rd_empty: read data FIFO is empty
134134
rd_full: read data FIFO is full
135135
@@ -534,6 +534,19 @@ always @* begin
534534
case ({s_axil_awaddr[3:2], 2'b00})
535535
4'h0: begin
536536
// status register
537+
if (s_axil_wstrb[0]) begin
538+
if (s_axil_wdata[3]) begin
539+
missed_ack_next = missed_ack_int;
540+
end
541+
end
542+
if (s_axil_wstrb[1]) begin
543+
if (s_axil_wdata[10]) begin
544+
cmd_fifo_overflow_next = 1'b0;
545+
end
546+
if (s_axil_wdata[13]) begin
547+
write_fifo_overflow_next = 1'b0;
548+
end
549+
end
537550
end
538551
4'h4: begin
539552
// command
@@ -605,11 +618,6 @@ always @* begin
605618
s_axil_rdata_next[13] = write_fifo_overflow_reg;
606619
s_axil_rdata_next[14] = read_fifo_empty;
607620
s_axil_rdata_next[15] = read_fifo_full;
608-
609-
missed_ack_next = missed_ack_int;
610-
611-
cmd_fifo_overflow_next = 1'b0;
612-
write_fifo_overflow_next = 1'b0;
613621
end
614622
4'h4: begin
615623
// command

rtl/i2c_master_wbs_16.v

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,13 @@ Status register:
104104
busy: high when module is performing an I2C operation
105105
bus_cont: high when module has control of active bus
106106
bus_act: high when bus is active
107-
miss_ack: set high when an ACK pulse from a slave device is not seen; cleared when read
107+
miss_ack: set high when an ACK pulse from a slave device is not seen; write 1 to clear
108108
cmd_empty: command FIFO empty
109109
cmd_full: command FIFO full
110-
cmd_ovf: command FIFO overflow; cleared when read
110+
cmd_ovf: command FIFO overflow; write 1 to clear
111111
wr_empty: write data FIFO empty
112112
wr_full: write data FIFO full
113-
wr_ovf: write data FIFO overflow; cleared when read
113+
wr_ovf: write data FIFO overflow; write 1 to clear
114114
rd_empty: read data FIFO is empty
115115
rd_full: read data FIFO is full
116116
@@ -475,6 +475,19 @@ always @* begin
475475
case (wbs_adr_i)
476476
3'h0: begin
477477
// status register
478+
if (wbs_sel_i[0]) begin
479+
if (wbs_dat_i[3]) begin
480+
missed_ack_next = missed_ack_int;
481+
end
482+
end
483+
if (wbs_sel_i[1]) begin
484+
if (wbs_dat_i[10]) begin
485+
cmd_fifo_overflow_next = 1'b0;
486+
end
487+
if (wbs_dat_i[13]) begin
488+
write_fifo_overflow_next = 1'b0;
489+
end
490+
end
478491
end
479492
3'h2: begin
480493
// command
@@ -541,14 +554,6 @@ always @* begin
541554
wbs_dat_o_next[13] = write_fifo_overflow_reg;
542555
wbs_dat_o_next[14] = read_fifo_empty;
543556
wbs_dat_o_next[15] = read_fifo_full;
544-
545-
if (wbs_sel_i[0]) begin
546-
missed_ack_next = missed_ack_int;
547-
end
548-
if (wbs_sel_i[1]) begin
549-
cmd_fifo_overflow_next = 1'b0;
550-
write_fifo_overflow_next = 1'b0;
551-
end
552557
end
553558
3'h2: begin
554559
// command

rtl/i2c_master_wbs_8.v

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,13 @@ Status registers:
104104
busy: high when module is performing an I2C operation
105105
bus_cont: high when module has control of active bus
106106
bus_act: high when bus is active
107-
miss_ack: set high when an ACK pulse from a slave device is not seen; cleared when read
107+
miss_ack: set high when an ACK pulse from a slave device is not seen; write 1 to clear
108108
cmd_empty: command FIFO empty
109109
cmd_full: command FIFO full
110-
cmd_ovf: command FIFO overflow; cleared when read
110+
cmd_ovf: command FIFO overflow; write 1 to clear
111111
wr_empty: write data FIFO empty
112112
wr_full: write data FIFO full
113-
wr_ovf: write data FIFO overflow; cleared when read
113+
wr_ovf: write data FIFO overflow; write 1 to clear
114114
rd_empty: read data FIFO is empty
115115
rd_full: read data FIFO is full
116116
@@ -462,10 +462,19 @@ always @* begin
462462
// write cycle
463463
case (wbs_adr_i)
464464
4'h0: begin
465-
// status register
465+
// status
466+
if (wbs_dat_i[3]) begin
467+
missed_ack_next = missed_ack_int;
468+
end
466469
end
467470
4'h1: begin
468-
// status register
471+
// FIFO status
472+
if (wbs_dat_i[2]) begin
473+
cmd_fifo_overflow_next = 1'b0;
474+
end
475+
if (wbs_dat_i[5]) begin
476+
write_fifo_overflow_next = 1'b0;
477+
end
469478
end
470479
4'h2: begin
471480
// command address
@@ -519,11 +528,9 @@ always @* begin
519528
wbs_dat_o_next[5] = 1'b0;
520529
wbs_dat_o_next[6] = 1'b0;
521530
wbs_dat_o_next[7] = 1'b0;
522-
523-
missed_ack_next = missed_ack_int;
524531
end
525532
4'h1: begin
526-
// status
533+
// FIFO status
527534
wbs_dat_o_next[0] = cmd_fifo_empty;
528535
wbs_dat_o_next[1] = cmd_fifo_full;
529536
wbs_dat_o_next[2] = cmd_fifo_overflow_reg;
@@ -532,9 +539,6 @@ always @* begin
532539
wbs_dat_o_next[5] = write_fifo_overflow_reg;
533540
wbs_dat_o_next[6] = read_fifo_empty;
534541
wbs_dat_o_next[7] = read_fifo_full;
535-
536-
cmd_fifo_overflow_next = 1'b0;
537-
write_fifo_overflow_next = 1'b0;
538542
end
539543
4'h2: begin
540544
// command address

0 commit comments

Comments
 (0)