@@ -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