Skip to content

Commit 92fb76b

Browse files
committed
entdaa: ack address
1 parent ea41bd3 commit 92fb76b

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/ctrl/ccc_entdaa.sv

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ module ccc_entdaa
3232
input logic arbitration_lost_i,
3333

3434
// addr
35-
output logic [7:0] address_o,
35+
output logic [6:0] address_o,
3636
output logic address_valid_o
3737
);
3838

@@ -59,10 +59,13 @@ module ccc_entdaa
5959
logic reserved_word_det;
6060

6161
logic [63:0] device_id;
62+
logic calculated_parity;
6263
logic parity_ok;
6364

6465
assign reserved_word_det = (bus_rx_data_i[7:1] == 7'h7e && bus_rx_data_i[0] == 1'b1);
6566
assign device_id = {id_i, bcr_i, dcr_i};
67+
assign calculated_parity = ~(bus_rx_data_i[7] ^ bus_rx_data_i[6] ^ bus_rx_data_i[5] ^ bus_rx_data_i[4] ^ bus_rx_data_i[3] ^ bus_rx_data_i[2] ^ bus_rx_data_i[1]);
68+
assign parity_ok = (calculated_parity == bus_rx_data_i[0]);
6669

6770
always_ff @(posedge clk_i or negedge rst_ni) begin: id_bit_counter
6871
if (!rst_ni) begin
@@ -130,14 +133,21 @@ module ccc_entdaa
130133
end
131134
end
132135
LostArbitration: begin
136+
state_d = Error;
133137
end
134138
ReceiveAddr: begin
135139
if (bus_rx_done_i) begin
136140
if (parity_ok) state_d = AckAddr;
137141
else state_d = SendNack;
138142
end
139143
end
144+
AckAddr: begin
145+
if (bus_tx_done_i) begin
146+
state_d = Done;
147+
end
148+
end
140149
Done: begin
150+
141151
end
142152
Error: begin
143153
// we wait here until we receive Stop
@@ -158,6 +168,8 @@ module ccc_entdaa
158168

159169
load_id_counter = '0;
160170
tick_id_counter = '0;
171+
address_o = '0;
172+
address_valid_o = '0;
161173
unique case (state_q)
162174
Idle: begin
163175
end
@@ -187,6 +199,14 @@ module ccc_entdaa
187199
end
188200
ReceiveAddr: begin
189201
bus_rx_req_byte_o = '1;
202+
if (bus_rx_done_i) begin
203+
address_valid_o = '1;
204+
address_o = bus_rx_data_i[7:1];
205+
end
206+
end
207+
AckAddr: begin
208+
bus_tx_req_bit_o = '1;
209+
bus_tx_req_value_o = '0;
190210
end
191211
Done: begin
192212
end

0 commit comments

Comments
 (0)