How do I handle register rollover for xPC Target encoder blocks?

Illustration
ishan_kishan - 2021-10-25T09:54:49+00:00
Question: How do I handle register rollover for xPC Target encoder blocks?

I am using xPC Target Encoder blocks in my Simulink model. I would like to know how to handle potential register rollover.  

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

This enhancement has been incorporated in Release 2006a (R2006a). For previous product releases, read below for any possible workarounds:
 
Encoder boards have a fixed size counter register of 16 bits, 24 bits, or 32 bits. Regardless of the size, the register always eventually overflows and rolls over. This can happen in either the positive or negative direction.
 
Some boards provide a hardware mechanism to account for overflows or rollovers. As a best practice, you should design your model to always deal with overflows or rollovers. An initial count can handle the issue for some applications.
 
To handle register rollovers, you can use standard Simulink blocks to design the following counter algorithm types:
Rollover Counter - Count the number of rollovers
 
Extended Counter - Provide an extended counter that is not limited by register size
 
The attached files contain example Rollover Counter and Extended Counter blocks (handle rollover in positive direction).
 
You can use these blocks in your model as is or modified for your model. Connect the output of the encoder block to these blocks.
 
These counters perform the following:
  • A rollover counter counts the number of times the output of an encoder block has rolled over. It counts up for positive direction rollovers and down for negative direction rollovers.
To view the algorithm used in this rollover counter implementation, right-click the 'Rollover Counter' subsystem and select the 'Look Under Mask' option.
  • An extended counter takes the output of an encoder block and provides a count that is not limited by register size. For an n-bit register, this counter should be able to count values greater than 2^(n-1).
Notes on using the counter sample blocks
  • For seamless operation in Simulink, provide the correct information to the counter blocks.
  • To determine when a rollover has occurred, the model compares two consecutive encoder outputs and looks for a large jump. A large jump indicates a register overflow.
The threshold you choose defines a large jump. The smaller the threshold, the more likely the model will misinterpret a jump in successive encoder counts as a rollover. The larger the threshold, the more likely the model will not detect a rollover. Ideally, choose a number that is half the size of the register (for example, 2^(n-1)), where n is the size of the register in bits.
  • Some driver blocks allow an initial starting value to be loaded into the register. You must pass this value to the rollover blocks to adjust for that offset.
  • The rollover block needs to know how many counts each rollover represents. Typically, this number is 2^n, where n is the size of the register in bits.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!