Senior Researcher Tero Säntti

Software

My software projects in the past have mostly been very closely related to some hardware project. These have covered small microcontrollers, medium sized embedded processors as well as full-fledged modern processors. Some of the software has been stand-alone, while others have been developed on top of an operating system. Actually, in a few cases the actual operating system has been modified and/or developed for a given special purpose.

I attempt to list some of the things covered, but the lists are far from complete. Also, the ordering in the lists is approximate at best. As this is the first ever iteration of such a listing, I am sure to miss some important items. But we all need to start somewhere, so here we go:

Microcontroller Level (Assembler)

  • Navigation and motor control for autonomous vehicle. Implemented using PIC16F84, Vehicle built from Legos.
  • JVC compulink coder/decoder, able to receive ad send commands through JVC compulink. Implemented using PIC16F84. Provided remote controlled function through my amplifier :-)
  • Custom operating system for PIC16F84, just for fun. Was capable of running a few separate programs, using time division and clever memory allocation. Not really usefull, more like proof of concept.
  • A huge colletion of experimental hobby projects for the PIC16 and PIC18 series. Too many to actually list, and at least partly rather mundane, so not so interesting in the long run.

Embedded Processor Level (Mostly C/C++)

  • Several small applications for Spectravideo 728 MSX compatible computer. Many things, mostly games. Also apps inspired by listings in magazines, like drawing tool and a biorythm calculator for my mother. Sadly I donÃ't have a working MSX any more, so all of these are useless. I do have a few of the casettes left, but I fear that time has eaten the bits already. After all it has been three decades, or more in some cases.
  • More advanced programming on Amiga 500, a few games, mathematical tools to help me do the demonstrations in basic mathematics courses and an assembler level harddrive driver. As mentioned in the practical page, the HD driver worked only partially. I do have two Amiga 500 computers, and they actually work!
  • Modified Linux for PPC405, running in Xilinx VirtexIIPro and in Xilinx Virtex4FX. Took a long time, as the early data in kernel.org did not cover certain issues with the Xilinx implementation of the CPU cores. Finally worked like a charm,
  • Several communication models for the REALJava, PPC405 CPU in Xilinx. Tested the overall performance using different connections, including PLB, OPB and DCR. All had different fortes and drawbacks. Ended up implementing the system using PLB, as it was the most balanced choice.
  • Several performance analysis tools written in Java, used to measure and compare the performance of the REALJava agains reference systems. Also included self test software to validate the functionality of the ALU.
  • Dynamic reconfiguration software oft Xilinx Virtex4FX and the internal PPC405. Capable of loading a bitstream to selected areas of the FPGA while running on the same FPGA. Strict rules had to be followed in creating the bitsreams, but after some trial and error the system was functional. Even demonstrated loading a REALJava core on the fly, running Java programs on it, and then replacing it with a different core.
  • EuCPAD data collection, archiving, databases, compression and communication processes for PPC405, not on Xilinx. Part of a space project, went to the ISS in 2016. Used a commercial off the shelf CPU, so all processes contained unusual levels of sanity checks to guard agains radiation induced memory flips.
  • ARM Cortex A9 based camera driver with ethernet connection. Running on Xilinx Zynq 7020, no operating system. Ethernet communications provided both the control of this system and also acquired the images stored to the main memory.
  • Data acquisition and communication software for ARM M4, more than a hundred (>100) sensors connected to one ARM M4 CPU over 4 I2C busses. Collects and analyses the sensor data at around 100 fps (all sensors) with longer cables and close to 200 fps without cables (impractical and not 100% reliable). Also contains communication with a PC (serial <-> USB <-> PC) and general purpose I/Os. Has several modes, so analysis can be performed in the device, or from raw sensor data on a PC. Additionally, for debugging and testing, all relevant data can be displayed in a terminal as ASCII, as well as communicated to a PC in binary format.
  • Homeproject, temperature measuments for the ventilation system at our home. As we have a passive heat exchanger, I wanted to know the temperatures on all sides of the cube. Operates over WLAN, data logging to be added later.

Computers (Desktop/laptop, C/C++)

  • Multiplier generator, generated Spice netlist for a wave-pipelined multiplier of a given size. Used to create the units for my MSc thesis. Implemented in Pascal language.
  • Image viewer and formater, input and output images in various formats (JPG,PNG,GIF,etc.) and convert to others. Also created binary versions compatible with an FPGA prototype, for both input and output). Supported several FPGA configurations and binary file formats.
  • (Second author) Software Java execution engine, parts used as the support system for REALJava. The first step on the way towards co-processor based fully function Java virtual machine. Later eveolved as REALJava (SW), and used as a verification tool for validating and debuging the FPGA-based co-processor. In the end this system supported 3 different FPGA platforms, several parallel FPGA-based co-processors and various communication schemes between the CPU and the co-processor. Even an emulated virtual co-processor could be used. The software could be targetted to desktop (Linux and Windows), PPC405 and MicroBlaze CPUs on Xilinx FPGAs (Linux). All of this was built into one single source code tree, with all the platform specific parts clearly separated.
  • Communication software for an FPGA-based satellite instrument prototype, used RS-232 to communicate with the prototype, allowed setting and reading the internal registers and storing results automatically to files for further analysis. Used during early develepment of BepiColombo/SIXS-P instrument.
  • Communication and control software for an FPGA-based satellite instrument prototype, used RS-232 to communicate with the prototype, allowed setting and reading the internal registers and sending telecommands similarly to the real satellite system. Additionally allowed configuring and reading of the peripheral ASICs in the system. Used during the development and testing of Solar Orbiter/LET instrument.
  • Modifications to the Kova1 support software. Included faster saving of video sequences, seek and jump functions for playback and support for the added functionalities used for monitoring of high power laser welding.
  • (Second author) StreakDet analysis software for finding space debris in telescope images. Participated in the coding of the software, but my main contributions were in the databases and performance analysis tools mentioned below.
  • Experimental machine learning applied to the post processing of the output data from the StreakDet software. I created a few basic identification / classification tools to sort out correct and false detections. In just a few days it reached accuracy of about 95%, using support vector machine approach. Other approaches did not perform as well, and since this was not a commercial project, just my own curiosity, it was abandoned in favor of more urgent matters.
  • Communication and control software for a custom camera system. Communication over ethernet, multiple automated functions and scripting support. Scripts allowed users to run sequences of actions in one command. Usefull examples included INIT, Capture_Image and Exit.
  • Communication and control software for an experimental camera system. Communication over USB3, multiple automated functions and scripting support. Simimilar to the one above, but different communication channel, different hardware at the end of the line and also somewhat different high level functions. Basic functions, like read or write a register, were designed to be identical, as well as the scripting support.
  • (Second author) PC software for the ARM M4 based multiple (>100) sensor system. Display of results in graphical format, session handling, storing to harddrive and reload. My cotribution mostly to the communication parts and to overall concept design.
  • Communication and control software for an FPGA-based satellite instrument prototype, used to communicate with the prototype of two different instrument prototypes, allowed setting and reading the internal registers and sending telecommands similarly to the real satellite system. Used during the development and testing of XFM-CS and PaTe-Foresail instruments. Later the XFM-CS side has grown to a full control software, while the PaTe-Foresail side has been taken over by other people.
  • Communication software for development phase of XFM. The software uses a SpaceWire Brick (StarDundee) to communicate with the XFM. Two threads, one for incoming data and one for outgoing. Link status and initialization and data displays in various formats. Not user friedly, but good enough to facilitate verification and validation, testing and debugging.

Databases (MySQL, unless stated otherwise)

  • Soc-Mobinet, database with the content of the webpages.
  • REALResults, performance data of the REALJava, and all reference systems we could find at the time. Used to generate the performance evaluations in my PhD thesis, as well as guide the development by pointing out weak points in the REALJava.
  • Turkusarja, results and historical records of Hayashi Go club games.
  • Comptersystems, database with the content of the webpages
  • SOLOJava, instruction set of the SOLOJava, with translations from standard Java bytecode, custom functions (methods) and VHDL code segments. Contained several variations, targetting different footprints.
  • EuCPAD databases for both the PPC405 running Linux and a PC running the EGSE. The PPC405 stored all the measuremnt data to these databases, and after communication the data was stored in a PC for long term storage and analysis. Used SQLite databases for both.
  • StreakDet, database used for testing of the software. Included the details of the artificial test images, and several result sections from working versions of the software. used for performance analysis, between versions during design and optimization and for reporting the performance of the final version.
  • Anonymous_1, a database for storing measurement parameters and results. Included also tools, toolsets and sequences of analysis steps.

Browser Based (mainly PHP)

  • Soc-Mobinet, project web pages for all partners, fully database based, editable by all partners (with access levels), every thing from normal publicity to internal calendar. Also included facilities for sharing cource material and news.
  • REALResults, Performance analysis tools for REALJava and reference systems. Included functionality to draw graphs and generate tables in HTML and LaTeX.
  • Turkusarja, a series of Go games. All players have points in the system, and these are used to calculate handicaps. Wins increase points while losses decrease. The idea was developed by a large group of people, but I have been maintaining and updating the system. Additional tools for analysis have been added every now and then. Contains also historical statistics. Still in active use :-)
  • Comptersystems, a collection of project pages. All project leaders received rights to edit their projects, and to grant those rights to others as they saw fit. An archival copy still remains, but has not been updated in ages.
  • SOLOJava translator, a translator from Java bytecode to the internal format of SOLOJava. Accepted Java class files as input, or the user could enter Java opcodes manually. Included a database based translation scheme and internal proprietary method for input and output. The database translation scheme made it possible to generate VHDL code for the ALU, so the hardware and the translator were guaranteed to match,
  • EuCPAD, browser based EGSE for testing and development of the on board software. Several iterations, various communication schemes and channels, all mapping the data between the test devices and a PC. Function included all kinds of data analysis and export tools, house keeping data viewer (with graphical support) and a communication console (running over bidirctional SSH connections over PHP and JavaScript).
  • StreakDet, analysis tools for comparing and analysing the performance metrics of the StreakDet software. Stored data from over 8000 test images, including a lot of internal parameters. Also contained mechanisms for running the tests over the full test image set and collecting the parameters from the executions. Supported comparisons between older versions and the currently running version already during a batch run, with selective comparison algorithm picking only images that had already been processed with both versions.
  • Visualization toolkit for an FPGA-based camera system. The raw binary files transferred from the imaging cell could be decoded and converted to PNG images. Additionally contained support for changing de-bayer options, and comparing the image in different phases of the processing. Used the desktop software to communicate with the hardware directly from the browser.
  • Anonymous_1, browser based tool set. Contained several different database maintenance tools, as well as some analytics and a generator for analysis sequences. The sequence generator is very complex, including the capability to loop over several variables (up, down, enumerated), merge and unmerge loops (execute loops in lockstep) and reorder loops.
| Aboa Space Research Oy |
| Kovilta Oy | University of Turku |
Last updated: March 01 2024 16:08:31.