About this Blog:

These are Phil Mulholland’s GitHub pages. The topics here are a memo pad, a place to remember things needed for day to day work as a software developer and stuff I’m looking into as side projects. Anything written here is not polished or promised to be of any use. If I feel like elaborating on a topic I’ll put it on Medium.



Theme derived from Centrarium. Search uses lunr. Search code from CloudCannon.


Here is a short summary of my professional experience and the technology stack I’m familiar with.

  • Embedded software engineer.
    • Designing and building embedded control firmware for Systems on a Chip (SoC): Power conversion, USB-PD (from v1.0 to v3.0), USB Type-C, USB Type C Port Controller (TCPC). (C).
    • Bringing up and verification of CPUs and simulators/emulators using baremetal code, RTOS and Linux. (C/C++/Asm)
    • Extensive automation of system and conformance testing. Putting firmware in ROM and having it functional in the first samples back from the fab is one of the rewards of pre-silicon test automation. (C++/Python/System Verilog)
  • Tools and middle-ware developer, in particular interfacing to various hardware via front end GUIs, command line interfaces and libraries. (C++)
    • Interfacing to embedded devices via SPI, I2C, USB, DisplayPort and UART. For example tools for flashing, log reading, host register access etc.
    • Control and data interfaces for reconfigurable computing based accelerator boards.
  • Simulator developer for embedded systems.
    • Modeling Systems on a Chip, IO peripherals and boards. (System-C/C++/Python).
    • Simulink toolboxes for reconfigurable computing. (C++/Matlab)
  • Network monitoring tools and server appliances. (C++/Ruby/TCL/Custom DSLs)
    • Line speed (1G->10G) full packet analysis/filtering and capture to disk.
    • Acceleration kernels and middle-ware for accelerated NICs.
    • A lot of system control scripts to manage a headless appliance. (Ruby/Bash)
  • Acceleration kernel developer targeting reconfigurable computing devices.
    • Image and network processing kernels. (Machine Code/Custom DSLs - a bit like CUDA/OpenCL)
    • Simulator, high level code generation and compiler development. (C++/Simulink Coder)
  • Digital design engineer.
    • RTL co-simulation for pre-silicon firmware development. (System Verilog)
    • RTL development/logic synthesis/STA etc for micro-controllers and DSPs. (Verilog/TCL)
  • Front end/Backend developer. (Ruby on Rails/MySql/Sqlite/Javascript)
  • IOS app/game development. (C++/Objective C++/OpenGLES)
  • Multi-lingual user interfaces, Japanese localization.

About ShinCBM.com

If ShinCBM had an office it would be in Shimokitazawa, Tokyo, just near the Commodore Amiga sign below. The domain name was inspired after seeing an unexpected Commodore (CBM) Amiga sign while riding my bike in my one time Tokyo neighborhood. (下北沢CBM changed to 新CBM along the way)

Head Office

The banner image was taken from a hike near Mitsutogeyama in Yamanashi. You can get there via Mitsutoge station, on the Fujikyu railway.

Training Office