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;
 
-
 };