From 868e8f6bfaeffc55c5e5462cb0daed44a5028807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Bron=C3=A8s?= <romain.brones@synchrotron-soleil.fr> Date: Mon, 23 Oct 2023 16:47:02 +0200 Subject: [PATCH] feat(RDL): Update control/status registers layout * Break sw R/RW registers, for OPCUA/ChimeraTK compatibility * No behavioral change --- hdl/top_combpm_electron.vhd | 48 ++++++++++----------- rdl/combpm.rdl | 85 ++++++++++++++----------------------- 2 files changed, 56 insertions(+), 77 deletions(-) diff --git a/hdl/top_combpm_electron.vhd b/hdl/top_combpm_electron.vhd index 83b9a7c..69508b4 100644 --- a/hdl/top_combpm_electron.vhd +++ b/hdl/top_combpm_electron.vhd @@ -200,28 +200,28 @@ begin src_in => cdc_control_array_axi ); - addrmap_w.SFP.RXLOS.data(0) <= cdc_status_array_axi(0); - addrmap_w.SFP.MODABS.data(0) <= cdc_status_array_axi(1); - addrmap_w.GT.POWERGOOD.data(0) <= cdc_status_array_axi(2); - addrmap_w.GT.QPLLLOCK.data(0) <= cdc_status_array_axi(3); - addrmap_w.GT.RXCDRLOCK.data(0) <= cdc_status_array_axi(4); - addrmap_w.GT.RXRESETDONE.data(0) <= cdc_status_array_axi(5); - addrmap_w.GT.RXBYTEISALIGNED.data(0) <= cdc_status_array_axi(6); - addrmap_w.GT.RXBYTEREALIGN.data(0) <= cdc_status_array_axi(7); - addrmap_w.GT.RXCOMMADET.data(0) <= cdc_status_array_axi(8); - addrmap_w.PROTOCOL.FRAMEERROR.data(0) <= cdc_status_array_axi(9); - addrmap_w.PROTOCOL.SEQFRAMECNTERROR.data(0) <= cdc_status_array_axi(10); - addrmap_w.PROTOCOL.SEQFRAMEDISCONT.data(0) <= cdc_status_array_axi(11); - - addrmap_w.VALIDFRAMECNT.data.data <= cdc_status_array_axi(43 downto 12); - addrmap_w.INVALIDFRAMECNT.data.data <= cdc_status_array_axi(75 downto 44); - addrmap_w.VALIDFRAMERATE.data.data <= cdc_status_array_axi(107 downto 76); - addrmap_w.INVALIDFRAMERATE.data.data <= cdc_status_array_axi(139 downto 108); - addrmap_w.FRAMESEQ.data.data <= cdc_status_array_axi(155 downto 140); - - cdc_control_array_axi(0) <= addrmap_r.GT.RXRSTDATAPATH.data(0); - cdc_control_array_axi(1) <= addrmap_r.GT.RXRSTPLLDATAPATH.data(0); - cdc_control_array_axi(2) <= addrmap_r.GT.RXCOMMADETEN.data(0); + addrmap_w.SFP.RXLOS.data(0) <= cdc_status_array_axi(0); + addrmap_w.SFP.MODABS.data(0) <= cdc_status_array_axi(1); + addrmap_w.GT_STATUS.POWERGOOD.data(0) <= cdc_status_array_axi(2); + addrmap_w.GT_STATUS.QPLLLOCK.data(0) <= cdc_status_array_axi(3); + addrmap_w.GT_STATUS.RXCDRLOCK.data(0) <= cdc_status_array_axi(4); + addrmap_w.GT_STATUS.RXRESETDONE.data(0) <= cdc_status_array_axi(5); + addrmap_w.GT_STATUS.RXBYTEISALIGNED.data(0) <= cdc_status_array_axi(6); + addrmap_w.GT_STATUS.RXBYTEREALIGN.data(0) <= cdc_status_array_axi(7); + addrmap_w.GT_STATUS.RXCOMMADET.data(0) <= cdc_status_array_axi(8); + addrmap_w.PROTOCOL_ERROR.FRAMEERROR.data(0) <= cdc_status_array_axi(9); + addrmap_w.PROTOCOL_ERROR.SEQFRAMECNTERROR.data(0) <= cdc_status_array_axi(10); + addrmap_w.PROTOCOL_ERROR.SEQFRAMEDISCONT.data(0) <= cdc_status_array_axi(11); + + addrmap_w.VALIDFRAMECNT.data.data <= cdc_status_array_axi(43 downto 12); + addrmap_w.INVALIDFRAMECNT.data.data <= cdc_status_array_axi(75 downto 44); + addrmap_w.VALIDFRAMERATE.data.data <= cdc_status_array_axi(107 downto 76); + addrmap_w.INVALIDFRAMERATE.data.data <= cdc_status_array_axi(139 downto 108); + addrmap_w.FRAMESEQ.data.data <= cdc_status_array_axi(155 downto 140); + + cdc_control_array_axi(0) <= addrmap_r.GT_CONTROL.RXRSTDATAPATH.data(0); + cdc_control_array_axi(1) <= addrmap_r.GT_CONTROL.RXRSTPLLDATAPATH.data(0); + cdc_control_array_axi(2) <= addrmap_r.GT_CONTROL.RXCOMMADETEN.data(0); end block blk_desyrdl; @@ -238,7 +238,7 @@ begin m_axis_m2s => m_axis_decoded_m2s, mc_time => mc_time, - soft_reset => addrmap_w.PROTOCOL.SOFTRESET.data(0), + soft_reset => addrmap_w.RESET.SOFTRESET.data(0), frame_seq_cnt => frame_seq_cnt, frame_valid_cnt => frame_valid_cnt, frame_invalid_cnt => frame_invalid_cnt, @@ -287,7 +287,7 @@ begin -- Status gtwiz_userclk_tx_active_out => open, - gtwiz_userclk_rx_active_out => addrmap_w.GT.RXCLKACTIVE.data, + gtwiz_userclk_rx_active_out => addrmap_w.GT_STATUS.RXCLKACTIVE.data, gtwiz_reset_tx_done_out => open, gtwiz_reset_rx_done_out(0) => gt_rxresetdone, gtpowergood_out(0) => gt_powergood, diff --git a/rdl/combpm.rdl b/rdl/combpm.rdl index 4cd1004..8fabb38 100644 --- a/rdl/combpm.rdl +++ b/rdl/combpm.rdl @@ -10,12 +10,11 @@ addrmap combpm { desyrdl_interface = "AXI4L"; - reg { + reg { desc="Module Identification Number"; - default sw = r; - default hw = r; + default sw = r; default hw = r; field {} data[32] = `C_ID; - } ID @0x00; + } ID @0x00; reg { desc="Module version."; @@ -33,61 +32,41 @@ addrmap combpm { } SFP; reg { - desc="GT transceivers status and control"; + desc="GT transceivers status"; desyrdl_data_type="bitfields"; + default sw = r; default hw = w; + field {desc="Powergood signal";} POWERGOOD; + field {desc="PLL lock signal";} QPLLLOCK; + field {desc="RX clk active signal";} RXCLKACTIVE; + field {desc="RX CDR lock signal";} RXCDRLOCK; + field {desc="RX reset done signal";} RXRESETDONE; + field {desc="RX byte is aligned signal";} RXBYTEISALIGNED; + field {desc="RX byte realign signal";} RXBYTEREALIGN; + field {desc="RX comma detected signal";} RXCOMMADET; + } GT_STATUS; - field {desc="Powergood signal";hw=w;sw=r; - } POWERGOOD; - - field {desc="PLL lock signal";hw=w;sw=r; - } QPLLLOCK; - - field {desc="RX clk active signal";hw=w;sw=r; - } RXCLKACTIVE; - - field {desc="RX CDR lock signal";hw=w;sw=r; - } RXCDRLOCK; - - field {desc="RX reset done signal";hw=w;sw=r; - } RXRESETDONE; - - field {desc="RX byte is aligned signal";hw=w;sw=r; - } RXBYTEISALIGNED; - - field {desc="RX byte realign signal";hw=w;sw=r; - } RXBYTEREALIGN; - - field {desc="RX comma detected signal";hw=w;sw=r; - } RXCOMMADET; - - field {desc="RX comma detection enable signal";hw=r;sw=rw; - } RXCOMMADETEN = 1; - - field {desc="Reset RX datapath";hw=r;sw=rw; - } RXRSTDATAPATH = 1; - - field {desc="Reset RX PLL and datapath";hw=r;sw=rw; - } RXRSTPLLDATAPATH = 1; - - } GT; + reg { + desc="GT transceivers control"; + desyrdl_data_type="bitfields"; + default sw = rw; default hw = r; + field {desc="RX comma detection enable signal";} RXCOMMADETEN = 1; + field {desc="Reset RX datapath";} RXRSTDATAPATH = 1; + field {desc="Reset RX PLL and datapath";} RXRSTPLLDATAPATH = 1; + } GT_CONTROL; reg { desc="BPM protocol status and control"; desyrdl_data_type="bitfields"; - - field {desc="Frame error";hw=w;sw=r; - } FRAMEERROR; - - field {desc="Sequence frame count mismatch";hw=w;sw=r; - } SEQFRAMECNTERROR; - - field {desc="Sequence frame discontinuity";hw=w;sw=r; - } SEQFRAMEDISCONT; - - field {desc="Soft reset";hw=r;sw=rw; - } SOFTRESET; - - } PROTOCOL; + default sw = r; default hw = w; + field {desc="Frame error";} FRAMEERROR; + field {desc="Sequence frame count mismatch";} SEQFRAMECNTERROR; + field {desc="Sequence frame discontinuity";} SEQFRAMEDISCONT; + } PROTOCOL_ERROR; + + reg { + default sw = rw; default hw = r; + field {desc="Soft reset";} SOFTRESET; + } RESET; reg { desc="BPM protocol valid frame counters"; -- GitLab