Skip to content

Commit bcb3525

Browse files
committed
axi_adrv9001: Fix CMOS tuning workaround
Signed-off-by: AndreiGrozav <andrei.grozav@analog.com>
1 parent aed4bcf commit bcb3525

File tree

1 file changed

+59
-17
lines changed

1 file changed

+59
-17
lines changed

library/axi_adrv9001/axi_adrv9001_core.v

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -286,27 +286,69 @@ module axi_adrv9001_core #(
286286
reg dac_2_transfer_sync_d1 = 1'b0;
287287
reg dac_2_transfer_sync_d2 = 1'b0;
288288

289+
// workaround registers
290+
reg rx1_r1_mode_d;
291+
reg rx1_symb_op_d;
292+
reg rx1_symb_8_16b_d;
293+
reg rx1_sdr_ddr_n_d;
294+
reg rx1_single_lane_d;
295+
reg rx1_rst_d;
296+
reg adc_sync_2_d;
297+
reg adc_1_ext_sync_disarm_cdc_d;
298+
reg adc_1_ext_sync_arm_cdc_d;
299+
300+
reg tx1_r1_mode_d;
301+
reg tx1_symb_op_d;
302+
reg tx1_symb_8_16b_d;
303+
reg tx1_sdr_ddr_n_d;
304+
reg tx1_single_lane_d;
305+
reg tx1_rst_cdc_s_d;
306+
// end of workaround registers
307+
289308
// rx1_r1_mode and tx1_r1_mode considered static during operation
290309
// rx1_r1_mode should be 0 only when rx1_clk and rx2_clk have the same frequency
291310
// tx1_r1_mode should be 0 only when tx1_clk and tx2_clk have the same frequency
292311

293-
sync_bits #(
294-
.NUM_OF_BITS (8),
295-
.ASYNC_CLK (1)
296-
) i_rx1_ctrl_sync (
297-
.in_bits ({up_rx1_r1_mode,rx1_symb_op,rx1_symb_8_16b,rx1_sdr_ddr_n,rx1_single_lane,rx1_rst,adc_sync_1,adc_1_ext_sync_arm,adc_1_ext_sync_disarm}),
298-
.out_clk (rx2_clk),
299-
.out_resetn (rx2_if_rst),
300-
.out_bits ({rx1_r1_mode,rx1_symb_op_s,rx1_symb_8_16b_s,rx1_sdr_ddr_n_s,rx1_single_lane_s,rx1_rst_s,adc_sync_2,adc_1_ext_sync_arm_cdc_s,adc_1_ext_sync_disarm_cdc_s}));
301-
302-
sync_bits #(
303-
.NUM_OF_BITS (6),
304-
.ASYNC_CLK (1)
305-
) i_tx1_ctrl_sync (
306-
.in_bits ({up_tx1_r1_mode,tx1_symb_op,tx1_symb_8_16b,tx1_sdr_ddr_n,tx1_single_lane,tx1_rst_s}),
307-
.out_clk (tx2_clk),
308-
.out_resetn (tx2_if_rst),
309-
.out_bits ({tx1_r1_mode,tx1_symb_op_s,tx1_symb_8_16b_s,tx1_sdr_ddr_n_s,tx1_single_lane_s,tx1_rst_cdc_s}));
312+
always @(posedge rx2_clk) begin
313+
rx1_r1_mode_d <= up_rx1_r1_mode;
314+
rx1_symb_op_d <= rx1_symb_op;
315+
rx1_symb_8_16b_d <= rx1_symb_8_16b;
316+
rx1_sdr_ddr_n_d <= rx1_sdr_ddr_n;
317+
rx1_single_lane_d <= rx1_single_lane;
318+
rx1_rst_d <= rx1_rst;
319+
adc_sync_2_d <= adc_sync_1;
320+
adc_1_ext_sync_disarm_cdc_d <= adc_1_ext_sync_disarm;
321+
adc_1_ext_sync_arm_cdc_d <= adc_1_ext_sync_arm;
322+
end
323+
324+
assign rx1_r1_mode = rx1_r1_mode_d;
325+
assign rx1_symb_op_s = rx1_symb_op_d;
326+
assign rx1_symb_8_16b_s = rx1_symb_8_16b_d;
327+
assign rx1_sdr_ddr_n_s = rx1_sdr_ddr_n_d;
328+
assign rx1_single_lane_s = rx1_single_lane_d;
329+
assign rx1_rst_s = rx1_rst_d;
330+
assign adc_sync_2 = adc_sync_2_d;
331+
assign adc_1_ext_sync_disarm_cdc_s = adc_1_ext_sync_disarm_cdc_d;
332+
assign adc_1_ext_sync_arm_cdc_s = adc_1_ext_sync_arm_cdc_d;
333+
334+
always @(posedge rx2_clk) begin
335+
tx1_r1_mode_d <= up_tx1_r1_mode;
336+
tx1_symb_op_d <= tx1_symb_op;
337+
tx1_symb_8_16b_d <= tx1_symb_8_16b;
338+
tx1_sdr_ddr_n_d <= tx1_sdr_ddr_n;
339+
tx1_single_lane_d <= tx1_single_lane;
340+
tx1_rst_cdc_s_d <= tx1_rst_s;
341+
adc_sync_2_d <= adc_sync_1;
342+
adc_1_ext_sync_disarm_cdc_d <= adc_1_ext_sync_disarm;
343+
adc_1_ext_sync_arm_cdc_d <= adc_1_ext_sync_arm;
344+
end
345+
346+
assign tx1_r1_mode = tx1_r1_mode_d;
347+
assign tx1_symb_op_s = tx1_symb_op_d;
348+
assign tx1_symb_8_16b_s = tx1_symb_8_16b_d;
349+
assign tx1_sdr_ddr_n_s = tx1_sdr_ddr_n_d;
350+
assign tx1_single_lane_s = tx1_single_lane_d;
351+
assign tx1_rst_cdc_s = tx1_rst_cdc_s_d;
310352

311353
assign rx2_rst = rx1_r1_mode ? rx2_rst_loc : rx1_rst_s;
312354
assign rx2_single_lane = rx1_r1_mode ? rx2_single_lane_loc : rx1_single_lane_s;

0 commit comments

Comments
 (0)