Amogh R

The AR Duck

Hello everyone!

I'm Amogh R,
a graduate from the Indian Institute of Technology, Dharwad.
I hold a Bachelors in Computer Science. and I'm interested in everything computer-ish:
  • Networking and Cybersecurity
  • Operating Systems (primarily *nix-like)
  • Embedded Software
  • Systems Software
  • Compilers and Programming Languages
  • Formal Verification
  • Virtualization and Cloud Technologies...
Okay! You get the point.
I like diving into and learning about shiny new (and mummified archaic) technologies for fun!

Experiences

Internships

  • Cadence Design Systems
    Jan - Jun 2026
    Software Engineer - System Verification Group
I automated the testbench generation for ARM Compute Subsystem (CSS) designs and programmed their integration with Accelerated Verification IPs (AVIPs).

The internship helped me explore the ARM AMBA family of protocols (AXI, ACEL, CHI, APB, etc.) and how higher layer transactional protocols like PCIe are implemented using them. I also got to understand the block level composition of the ARM Neoverse V3.



Background: AVIPs let you emulate and verify a Design Under Test (DUT) on a custom hardware platform (such as the Cadence Palladium Z3), thereby reducing your testing times compared to regular simulations. You can read more about them here.
Writing a testbench requires us to connect the AVIP interfaces to the corresponding DUT interfaces along with the sideband signals (such as clocks and resets); and hence doing it by hand for large DUTs is error prone and leads to wasted hours in debugging.

My automation framework lets users easily create basic testbenches for large ARM designs with standard protocol interfaces, and allows them to configure specific AVIPs they would like to attach to the DUT.
My work reduced testbench setup time of higher core count designs of the ARM Neoverse Compute Subsystem (CSS) V3 from over a month to less than a week.
I also got a chance to work on cutting-edge technologies in the EDA industry while boosting my skills in tracing issues across the low-level stack: right from analysing waveforms at the nanosecond timescale up to debugging C programs running on the emulated ARM cores.

The primary languages and tech I used here were:
  • Python, Make, bash, csh and tcl for automation,
  • Verilog for the testbench and designs, and
  • C for the firmware and test programs
  • Texas Instruments
    May - Jul 2025
    Embedded Software Engineer
I integrated the Java-based Advanced Combinatorial Testing Suite (ACTS) to enable interaction testing among the system parameters of the SHAKTI ADC.

Along with working on testcase automation, I also extended support of Windows-specific SDK code to Linux, enabling customers to build and run ADC interface applications on both operating systems.



Background: All complex systems, be it software or hardware, need to be tested extensively before being released. However, exhaustive testing of all combinations of system parameters is prohibitively expensive and time consuming, due to the simple reason that the number of test vectors grow exponentially with each new parameter added.

Keeping that aside for a moment, here are some resources which show that "all or nearly all failures (in systems) involve only 1 to 6 factors (or parameters)".

T-way combinatorial testing algorithms use the above assumptions to reduce the test vector sets by a significant amount while still covering all "t"-way combinations of parameters. Here is an interactive example for 3 boolean parameters:

ABC
000 <<<
001 <<<
011 <<<
100 <<<
101 <<<
010 <<<
110 <<<
111 <<<



The exhaustive testcase array of three boolean parameters contains 8 entries, while all *pairwise* (2-way) combinations are covered with a total of just 4 entries. The IPOG strategy lets us generate such minimized coverage arrays for t-way interaction testing.

Given the parameter configuration (number of parameters, range and type of each parameter), the ACTS tool (which implements IPOG) can generate all 2-way to 6-way combinations in test sets. My work at TI was to enable auto-extraction and rule-based grouping of function parameter information from the C/C++ programs that interface with the embedded application, provide it to the ACTS tool and finally generate the coverage arrays that can be used for further testing.

Apart from working on testing, porting C programs with layers of abstraction and Python based automation gave me a chance to work with the ctypes library, which still comes in handy as I am learning eBPF toolkits and kernel programming.

Coursework & Research

Formal Verification

    TODO

My favorite place on the web is Neocities.

Things I Like

  • Making websites
  • Cats
  • Naps in sunbeams
The Neocities cat