wiki:ApolloSM Software ToDo
  1. All existing daemons (at the time ie ~April 2020) had some amount of code factorized. They have all been tested except xvcserver (which requires Vivado)
  2. It is critical that the SM_boot daemon does not terminate even if there were bad command line or config file options or some kind of error with boost parsing. An overloaded function in parser.hh/cc makes sure of this. Make sure that the other daemons that also are required to not terminate also receive this functionality.
  3. The GetVoltage? and GetPhase? functions in the Apollo_eyescan class are still not written.
  4. Even if the Kintex or Virtex are not fully functional (cm powred up, programmed, intialized, unblocked), an eyescan can still be done (which results in a bunch of random colors). Maybe the CM and/or FPGA class(es) can have a "GetStatus?" function to let others (in this case Apollo_eyescan) know if everything is good to go (to avoid wasting time and then realizing later that, for example, a non-sensical eyescan was made)
  5. Bit Error Rate (BER) for eyescans have confidence level defined only in a table in the ultrascale plus datasheet. It would be nice to dig up the equivalent table for series 7 FPGAs.
  6. There are probably a good number of class variables/functions that can be private in the classes that the standalone daemons use (ie. CM, FPGA, daemon). They should be made private. More: there are probably several places that variables and function arguments can be made const; it would be good practice to do that
  7. A full eyescan currently uses a precision map (related to the BER confidence level table). This map is utilized in the EyeScanLink?.cc class. A single eyescan point should also do this (Apollo_eyescan) but it doesn't. Although the single eyescan command from BUTool will probably rarely be used, it would be more technically correct if it used a precision map.
  8. User can specify a prescale in the config file, but looking at the EyeScanLink?.cc class we note that only certain prescales have defined confidence levels (datasheet), so currently, any calculated BER below the precision is rounded upto the next biggest precision (ex: if a prescale of 7 is between 10-4 and 10-3, 10-3 is used). Actually, the prescale should be rounded down to the nearest well defined prescale BEFORE the scan is performed and the BER is calculated because there is no point of scanning up to a non-well defined prescale. It might even make more sense, however, for a user simply to specify the precision they want in the config file instead of the prescale (ie 10-6 or 10-7 or 10-9 etc). More: May also be good to have the eyescan daemon warn the user when they have specified a precision that will take a very long time (ie longer than the polltime they specify) to scan (remember these are exponential).
  9. LPM and DFE eyescan modes are currently implemented in the code. The code automatically checks the RXLPMEN port to see what mode is being used. That code can be condensed a little. May also be good to be able to configure the mode (although we currently aren't writing to any ports). More: The difference between these two modes, as far as eyescan is concerned, is taking 1 or 2 eyescans after changing the UT sign. Since the UT sign is important, it should probably be its own separate node in both the 7 series and ultrascale plus DRP address tables.
  10. Print firmware build date function is written but doesn't work for some reason (maybe the node name changed). that should be checked and also a decision to put it either in the CM or FPGA class should be made
  11. The code for setting the FPGA done bit is written (it's just a matter of RegWrite?) but is commented out. That should be implemented once the done bits exist
  12. A "Vivado style" eyescan data file outputted by either the eyescan daemon or EyeScanLink? class would be nice. This could then be fed into Vivado to check Vivado's reconstruction of the eye vs our plots
  13. Some standalones that Peter requested, cmpwrup, cmpwrdown, uartcmd, don't use boost to parse the command line (probably overkill) but it may be good to have it in there anyway
  14. SIGTERM related stuff needs to be fixed in some standalones. Currently SIGINT original functionality is reinstated at the end of the daemon but SIGTERM is not (at least for some daemons). Consult Dan about why we did this (maybe it was an aciddent)
  15. system() is being used to call and other linux commands. This (at least the python part) will need to be fixed one day.
  16. BUTool TCLAP should be replaced with Boost program options. Corollary: Decide how the BUTool config file should look like
  17. Use system alarm or sig alarm in eyescan daemon (consult Dan).
  18. Ben's Grafana code should use the daemon class to become a standalone daemon
  19. Maybe if an FPGA needs to be programmed and for some reason the corresponding CM is not told to be powered up (which is probably a mistake), then power the CM up anyway prior to progamming the FPGA
  20. Help menu for all code that uses boost program option
  21. Probably some functions right now won't work if you have nodes like: SOMENODE instead of SOMENODE. with a period. Functions should always work regardless of whether the node name come with a period or not.
  22. Check that the daemon class has a properly written private assignment and copy constructor (so that it will be uncopyable).
  23. Put sigaction structs in the deconstructor of instead of inside the standalone daemon itself
  24. The default signal handler we have right now is one where we set loop = false (instead of the program just crashing) for all daemons. Maybe define other signal handlers (which aren't needed now but knowing how to later will be helpful if some other functionality is desired later)
  25. Move standalones to another repo
  26. CM class should be named something else
  27. In a lot of daemons a 'configFilePO' variable is passed to other object constructors; this variable should be passed by reference to save time/memory
  28. The algorithm for parsing the SMboot and eyescan config files scale as n3 (3 nested for loops). This is terrible from a theoretical standpoint but since we aren't using many options currently it's fine for now
  29. The call to openlog() takes certain different options and since openlog() is called in for all daemons, all daemons have logs opened with the same options. This should be changed if some daemons prefer different options
  30. EnableEyeScan?() function doesn't need its second argument anymore since all prescales are retreived from config files and scanning always starts at prescale = 0

To make any of the above changes either:

  1. Ask Felex if he has merged the latest changes of his repo back into apollo-lhc yet, or
  2. Fork felexchen/ApolloSM-plugin-1, make the changes on feature-EyeScan?, then pull apollo-lhc/develop to <your fork>/develop, then pull <your fork>/feature-EyeScan? to <your fork>/develop, and then ultimately pull <your fork>/develop to apollo-lhc/develop (this last pull should be trivial if pulling <your fork>/feature-EyeScan? to <your fork>/develop worked). Make sure after every pull somethings don't get written over. Although GitHub? will allow you to manually resolve conflicts (which there probably will be), some things could get deleted without you or GitHub? noticing. Make sure to go through all relevant files to make sure nothing is missing.
Last modified 2 years ago Last modified on Jun 14, 2020, 2:19:10 PM