diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000000000000000000000000000000000000..43efe824e2532eaad9b38931ed16db1395eb0043 --- /dev/null +++ b/README.adoc @@ -0,0 +1 @@ +include::doc/main.adoc[] diff --git a/doc/main.adoc b/doc/main.adoc index 22a2b8a32ef2528f21d3d08f29702ac5fa5ee456..f4dd16523df689dcbb84007f8317068dccc8aa36 100644 --- a/doc/main.adoc +++ b/doc/main.adoc @@ -118,6 +118,10 @@ This can be used to further routing. .Structural schematic of combpm_packet_filter. image::images/combpm_packet_filter.svg[] +// ================================================================================ +== Registers map +include::regmap.adoc[] + // ================================================================================ == TODO/Future of this module diff --git a/doc/regmap.adoc b/doc/regmap.adoc new file mode 100644 index 0000000000000000000000000000000000000000..625420b4acdc5b4f1642f0a54babd439b1626cc5 --- /dev/null +++ b/doc/regmap.adoc @@ -0,0 +1,35 @@ +.Registers +[.tab-addr-reg,cols="5,1,1,2,1,9"] +|=== +|Name | N | bits | type | RW | Description + +| ID | 1 | 32 | uint | RO | +++Module identifier.+++ +| VERSION | 1 | 32 | uint | RO | +++Module version.+++ +| SFP | 1 | 2 | bitfields | RO | +++SFP module status+++ + +- RXLOS [0:0] sw:RO uint : +++RX lost signal+++ + +- MODABS [1:1] sw:RO uint : +++Module is absent+++ +| GT | 1 | 11 | bitfields | RW | +++GT transceivers status and control+++ + +- POWERGOOD [0:0] sw:RO uint : +++Powergood signal+++ + +- QPLLLOCK [1:1] sw:RO uint : +++PLL lock signal+++ + +- RXCLKACTIVE [2:2] sw:RO uint : +++RX clk active signal+++ + +- RXCDRLOCK [3:3] sw:RO uint : +++RX CDR lock signal+++ + +- RXRESETDONE [4:4] sw:RO uint : +++RX reset done signal+++ + +- RXBYTEISALIGNED [5:5] sw:RO uint : +++RX byte is aligned signal+++ + +- RXBYTEREALIGN [6:6] sw:RO uint : +++RX byte realign signal+++ + +- RXCOMMADET [7:7] sw:RO uint : +++RX comma detected signal+++ + +- RXCOMMADETEN [8:8] sw:RW uint : +++RX comma detection enable signal+++ + +- RXRSTDATAPATH [9:9] sw:RW uint : +++Reset RX datapath+++ + +- RXRSTPLLDATAPATH [10:10] sw:RW uint : +++Reset RX PLL and datapath+++ +| PROTOCOL | 1 | 4 | bitfields | RW | +++BPM protocol status and control+++ + +- FRAMEERROR [0:0] sw:RO uint : +++Frame error+++ + +- SEQFRAMECNTERROR [1:1] sw:RO uint : +++Sequence frame count mismatch+++ + +- SEQFRAMEDISCONT [2:2] sw:RO uint : +++Sequence frame discontinuity+++ + +- SOFTRESET [3:3] sw:RW uint : +++Soft reset+++ +| VALIDFRAMECNT | 1 | 32 | uint | RO | +++BPM protocol valid frame counters+++ +| INVALIDFRAMECNT | 1 | 32 | uint | RO | +++BPM protocol invalid frame counters+++ +| VALIDFRAMERATE | 1 | 32 | uint | RO | +++BPM protocol valid frame rate+++ +| INVALIDFRAMERATE | 1 | 32 | uint | RO | +++BPM protocol invalid frame rate+++ +| FRAMESEQ | 1 | 16 | uint | RO | +++BPM protocol frame sequence+++ +|=== + + diff --git a/hdl/top_combpm_electron.vhd b/hdl/top_combpm_electron.vhd index 9947b273de51747cae8751ec15e28aad1913d7b1..505ff0f6ea2afe439679617a624005514381b8d9 100644 --- a/hdl/top_combpm_electron.vhd +++ b/hdl/top_combpm_electron.vhd @@ -198,17 +198,30 @@ begin ); - addrmap_w.VERSION.data.data <= C_VERSION; - addrmap_w.SFP.RXLOS.data(0) <= sfp_rx_los; - addrmap_w.SFP.MODABS.data(0) <= sfp_mod_abs; - addrmap_w.GT.POWERGOOD.data(0) <= gt_powergood; - addrmap_w.GT.QPLLLOCK.data(0) <= qpll_lock; - -- rxclkactive on test - addrmap_w.GT.RXCDRLOCK.data(0) <= gt_rxcdrlock; - addrmap_w.GT.RXRESETDONE.data(0) <= gt_rxresetdone; - addrmap_w.GT.RXBYTEISALIGNED.data(0) <= gt_rxbyteisaligned; - addrmap_w.GT.RXBYTEREALIGN.data(0) <= gt_rxbyterealign; - addrmap_w.GT.RXCOMMADET.data(0) <= gt_rxcommadet; + addrmap_w.ID.data.data <= x"507E1710"; + addrmap_w.VERSION.data.data <= C_VERSION; + + addrmap_w.SFP.RXLOS.data(0) <= sfp_rx_los; + addrmap_w.SFP.MODABS.data(0) <= sfp_mod_abs; + + addrmap_w.GT.POWERGOOD.data(0) <= gt_powergood; + addrmap_w.GT.QPLLLOCK.data(0) <= qpll_lock; + addrmap_w.GT.RXCDRLOCK.data(0) <= gt_rxcdrlock; + addrmap_w.GT.RXRESETDONE.data(0) <= gt_rxresetdone; + addrmap_w.GT.RXBYTEISALIGNED.data(0) <= gt_rxbyteisaligned; + addrmap_w.GT.RXBYTEREALIGN.data(0) <= gt_rxbyterealign; + addrmap_w.GT.RXCOMMADET.data(0) <= gt_rxcommadet; + + addrmap_w.PROTOCOL.FRAMEERROR.data(0) <= frame_error; + addrmap_w.PROTOCOL.SEQFRAMECNTERROR.data(0) <= cnt_seq_mismatch; + addrmap_w.PROTOCOL.SEQFRAMEDISCONT.data(0) <= seq_discontinuity; + + addrmap_w.VALIDFRAMECNT.data.data <= frame_valid_cnt; + addrmap_w.INVALIDFRAMECNT.data.data <= frame_invalid_cnt; + addrmap_w.VALIDFRAMERATE.data.data <= frame_valid_rate; + addrmap_w.INVALIDFRAMERATE.data.data <= frame_invalid_rate; + addrmap_w.FRAMESEQ.data.data <= frame_seq_cnt; + end block blk_desyrdl; -------------------------------------- diff --git a/rdl/combpm.rdl b/rdl/combpm.rdl index baf7ffdee31456c296291941c5a50da61ca16b10..15019143e4e5a13e47f2d2784d08f30fc0bd37b9 100644 --- a/rdl/combpm.rdl +++ b/rdl/combpm.rdl @@ -8,166 +8,105 @@ addrmap combpm { name="BPM protocol decoder controller"; reg { - field { - hw=w;sw=r; - } data[32]; + desc="Module identifier."; + field {hw=w;sw=r;} data[32]; + } ID; + + reg { + desc="Module version."; + field {hw=w;sw=r;} data[32]; } VERSION; reg { - name="SFP status and control"; + desc="SFP module status"; + desyrdl_data_type="bitfields"; - field { - desc="SFP RX lost signal"; - hw=w; - sw=r; + field {desc="RX lost signal";hw=w;sw=r; } RXLOS; - - field { - desc="SFP module absent signal"; - hw=w; - sw=r; + field {desc="Module is absent";hw=w;sw=r; } MODABS; - - } SFP; reg { - name="GT status and control"; + desc="GT transceivers status and control"; + desyrdl_data_type="bitfields"; - field { - desc="Powergood signal"; - hw=w; - sw=r; + field {desc="Powergood signal";hw=w;sw=r; } POWERGOOD; - field { - desc="PLL lock signal"; - hw=w; - sw=r; + field {desc="PLL lock signal";hw=w;sw=r; } QPLLLOCK; - field { - desc="RX clk active signal"; - hw=w; - sw=r; + field {desc="RX clk active signal";hw=w;sw=r; } RXCLKACTIVE; - field { - desc="RX CDR lock signal"; - hw=w; - sw=r; + field {desc="RX CDR lock signal";hw=w;sw=r; } RXCDRLOCK; - field { - desc="RX reset done signal"; - hw=w; - sw=r; + field {desc="RX reset done signal";hw=w;sw=r; } RXRESETDONE; - field { - desc="RX byte is aligned signal"; - hw=w; - sw=r; + field {desc="RX byte is aligned signal";hw=w;sw=r; } RXBYTEISALIGNED; - field { - desc="RX byte realign signal"; - hw=w; - sw=r; + field {desc="RX byte realign signal";hw=w;sw=r; } RXBYTEREALIGN; - field { - desc="RX comma detected signal"; - hw=w; - sw=r; + field {desc="RX comma detected signal";hw=w;sw=r; } RXCOMMADET; - field { - desc="RX comma detection enable signal"; - hw=r; - sw=rw; + field {desc="RX comma detection enable signal";hw=r;sw=rw; } RXCOMMADETEN = 1; - field { - desc="Reset RX datapath"; - hw=r; - sw=rw; + field {desc="Reset RX datapath";hw=r;sw=rw; } RXRSTDATAPATH = 1; - field { - desc="Reset RX PLL and datapath"; - hw=r; - sw=rw; + field {desc="Reset RX PLL and datapath";hw=r;sw=rw; } RXRSTPLLDATAPATH = 1; } GT; reg { - name="Protocol status and control"; + desc="BPM protocol status and control"; + desyrdl_data_type="bitfields"; - field { - desc="Frame error"; - hw=w;sw=r; + field {desc="Frame error";hw=w;sw=r; } FRAMEERROR; - field { - desc="Sequence frame count mismatch"; - hw=w;sw=r; + field {desc="Sequence frame count mismatch";hw=w;sw=r; } SEQFRAMECNTERROR; - field { - desc="Sequence frame discontinuity"; - hw=w;sw=r; + field {desc="Sequence frame discontinuity";hw=w;sw=r; } SEQFRAMEDISCONT; - field { - desc="Soft reset"; - hw=r;sw=rw; + field {desc="Soft reset";hw=r;sw=rw; } SOFTRESET; } PROTOCOL; reg { - name="Protocol frame counters"; - - field { - desc="Valid frame counter"; - hw=w;sw=r; - } CNT[32]; + desc="BPM protocol valid frame counters"; + field {hw=w;sw=r;} data[32]; } VALIDFRAMECNT; reg { - field { - desc="Invalid frame counter"; - hw=w;sw=r; - } CNT[32]; + desc="BPM protocol invalid frame counters"; + field {hw=w;sw=r;} data[32]; } INVALIDFRAMECNT; reg { - name="Protocol frame rate"; - - field { - desc="Valid frame rate"; - hw=w;sw=r; - } RATE[32]; + desc="BPM protocol valid frame rate"; + field {hw=w;sw=r;} data[32]; } VALIDFRAMERATE; reg { - field { - desc="Invalid frame rate"; - hw=w;sw=r; - } RATE[32]; + desc="BPM protocol invalid frame rate"; + field {hw=w;sw=r;} data[32]; } INVALIDFRAMERATE; reg { - name="Protocol frame sequence"; - - field { - desc="Number of frames in sequence"; - hw=w;sw=r; - } FRAMECNT[16]; - + desc="BPM protocol frame sequence"; + field {hw=w;sw=r;} data[16]; } FRAMESEQ; - };