• Guides
  • Videos
  • Publications
  • API
  • Github
  • Community
  • Release Notes
  • Plugins
Installing Origen
  • Introduction
  • How to Install
  • How to Install (Windows)
  • Company Customization
  • Understanding Gems
  • Invoking Considerations
  • Workspace Management
Getting Started with Origen
  • Core concepts
  • Creating a New App
  • Directory Structure
  • The Initial Commit
  • Creating New Files
  • Understanding Blocks
  • Application Architecture
Runtime Environment
  • Introduction
  • Mode
  • Environment
  • Target
  • Production Targets
  • Global Setup
  • Load Order
  • Programming
Models
  • Introduction
  • Naming
  • Definition & Hierarchy
  • Adding Attributes
  • Versioning
  • Bugs & Features
  • Package, Mode & Configuration
  • Registers
  • Pins
  • Power Domains
  • Hardware Attributes
  • Parameters
  • Specifications
  • Fuses
  • Generic Components
  • Creating Your Own Components
Compiler (Views)
  • Introduction
  • Creating Templates
  • Using Sub-Templates
  • Helpers
  • Running The Compiler
  • Inline Compiler
Controllers
  • Introduction
  • Shadow Controllers
  • Direct Controllers
Pattern Generator
  • Introduction
  • Creating Patterns
  • Pins
  • Timing and Waiting
  • Registers
  • Documenting Patterns
  • Generating by Name
  • Common API
  • J750 API
  • V93K API
  • UltraFlex API
  • STIL & Other Formats
  • Custom Testers
  • Running The PatGen
  • Concurrent Patterns
Test Program Generator
  • Introduction
  • Philosophy
  • Creating Flows
  • Managing Flow Control
  • Creating an Interface
  • Additional Resources
  • Dynamic Custom Code
  • Characterization API
  • J750 API
  • V93K Common API
  • V93K SMT7 API
  • V93K SMT8 API
  • UltraFLEX API
  • Documenting the Program
  • Creating Custom Testers
  • Running the ProgGen
Decompilation
  • Overview & Example
  • Decompiling, Adding Pins, & Executing
  • Working with Decompiled Patterns
  • Platform Specifics
Simulation
  • Introduction
  • How It Works
  • Compiling the DUT
  • AMS Support
  • Environment Setup
  • Application Setup
  • Simulating Patterns
  • Simulating Flows
  • Direct DUT Manipulation
  • Simulator Log Output
  • Artifacts
  • Debugging
Documentation Generator
  • Introduction
  • Markdown
  • Linking
  • Styling
  • Testing
  • API Generation
  • Deploying
Plugins
  • Introduction
  • Using a Plugin
  • Creating a Plugin
  • Current & Default Plugins
  • Dev Environment
  • Dev Considerations
  • Paths & Origen.root
  • Config & Origen.app
Miscellaneous
  • Revision Control
  • Origen Remotes
  • Lint Testing
  • Session Store
  • LSF API
  • Users, Emails & Maillists
  • Utilities & Helpers
  • Ruby Extensions
  • Logger
  • Adding Commands
  • Overriding Commands
  • Callbacks
  • Application Callbacks
  • Miscellaneous Topics
Advanced Topics
  • Introduction
  • Invocation Customization
  • Custom App Generators

Plugins

Dev Considerations


Here are some basic development considerations that all plugin developers should follow:

Use Semantic Versioning

Use semantic versioning (e.g. v1.2.3) for the plugin application and respect the conventions. See semver.org for details on what is expected.

The main takeaway is that breaking API changes are only allowed when changing the major version counter. In other words an application that depends on version 1.1.0 of your plugin, should be able to run fine under version 1.99.0.

Add Tests

Consumers of the plugin should not have to keep their fingers crossed or extensively test at their end when pulling a new version of the plugin. The plugin itself needs to take responsibility for ensuring that things don’t break between releases.

Tests are most easily written using diffs - create some dummy patterns within the plugin application to fully exercise all methods, then make sure that the output remains consistent when making changes or adding new features.

Additionally unit tests can be created using the Ruby Test::Unit or RSpec libraries (new Origen apps come pre-configured for the latter out the box).

Origen core already does a good job of testing using both methods described above and can be consulted for examples.

Use Namespaces

The possibilities for naming clashes will increase as more Origen code is imported from shared plugins, therefore all plugins should be good citizens and ensure that they don’t pollute the global namespace.

All classes defined within a plugin should be contained within a module named after the plugin.

See the section on namespacing here for more details - Naming Models

Document as You Go

Users of your plugin will appreciate good documentation, the easiest way to do this is to document your methods via useful descriptions as you write them. These descriptions can then be automatically extracted into API documentation later.


Comments

Generated with the Origen Semiconductor Developer's Kit

Origen is released under the terms of the MIT license