@@ -32,7 +32,7 @@ module ccc_entdaa
32
32
input logic arbitration_lost_i,
33
33
34
34
// addr
35
- output logic [7 : 0 ] address_o,
35
+ output logic [6 : 0 ] address_o,
36
36
output logic address_valid_o
37
37
);
38
38
@@ -59,10 +59,13 @@ module ccc_entdaa
59
59
logic reserved_word_det;
60
60
61
61
logic [63 : 0 ] device_id;
62
+ logic calculated_parity;
62
63
logic parity_ok;
63
64
64
65
assign reserved_word_det = (bus_rx_data_i[7 : 1 ] == 7'h7e && bus_rx_data_i[0 ] == 1'b1 );
65
66
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 ]);
66
69
67
70
always_ff @ (posedge clk_i or negedge rst_ni) begin : id_bit_counter
68
71
if (! rst_ni) begin
@@ -130,14 +133,21 @@ module ccc_entdaa
130
133
end
131
134
end
132
135
LostArbitration: begin
136
+ state_d = Error;
133
137
end
134
138
ReceiveAddr: begin
135
139
if (bus_rx_done_i) begin
136
140
if (parity_ok) state_d = AckAddr;
137
141
else state_d = SendNack;
138
142
end
139
143
end
144
+ AckAddr: begin
145
+ if (bus_tx_done_i) begin
146
+ state_d = Done;
147
+ end
148
+ end
140
149
Done: begin
150
+
141
151
end
142
152
Error: begin
143
153
// we wait here until we receive Stop
@@ -158,6 +168,8 @@ module ccc_entdaa
158
168
159
169
load_id_counter = '0 ;
160
170
tick_id_counter = '0 ;
171
+ address_o = '0 ;
172
+ address_valid_o = '0 ;
161
173
unique case (state_q)
162
174
Idle: begin
163
175
end
@@ -187,6 +199,14 @@ module ccc_entdaa
187
199
end
188
200
ReceiveAddr: begin
189
201
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 ;
190
210
end
191
211
Done: begin
192
212
end
0 commit comments