• 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

Runtime Environment

Production Targets


The following concerns may arise when releasing your application to 3rd parties who will then go on to use it to generate production grade IP:

  • Your application may support many different devices and targets, however only a subset of these may be considered production ready at a given release point.
  • When lots of targets are available how do we ensure that the user picks the correct one?

This is certainly an area where Origen has scope for further improvement, but for now the following system works adequately and is being used today in large-scale production applications…

Select the Target by Maskset Number

Establish the convention with your user base that when generating IP for production the target must always be selected by providing the maskset number (including the revision).

So for example someone using an application to generate production IP for a device with maskset 1M79X should select the target like this:

origen t 1m79x

This keeps things simple for the end user and removes the need for them to choose a target.

Mapping Masksets to Targets

To enable the above feature a map must be added to your config/application.rb file like this:

# config/application.rb
config.production_targets = {
  "0m79x" => "eagle_0",
  "0n30d" => "falcon_0",
  "1n92a" => "osprey_1",
}

Now whenever a maskset number is entered as a target the above table will be referred to automatically to select the actual target file.

If giving the user a choice over the actual target to use is unavoidable, the number of options can be reduced by mapping a given maskset to multiple targets:

# config/application.rb
config.production_targets = {
  "0m79x" => ["eagle_0_func", "eagle_0_bist"],
  "0n30d" => "falcon_0",
  "1n92a" => "osprey_1",
}

Now a user selecting 0M79X will be presented with a message showing the two options and will be asked to choose one of them.

Although not generally recommended, it is also possible to map multiple maskset numbers to the same target:

# config/application.rb
config.production_targets = {
  "0m79x" => ["eagle_0_func", "eagle_0_bist"],
  "0n30d" => "falcon_0",
  "1n30d" => "falcon_0",
  "1n92a" => "osprey_1",
}

Finally if a specific target(s) is not supported for a given release it can be easily disabled by commenting out the relevant line(s):

# config/application.rb
config.production_targets = {
  "0m79x" => ["eagle_0_func", "eagle_0_bist"],
#  "0n30d" => "falcon_0",
#  "1n30d" => "falcon_0",
  "1n92a" => "osprey_1",
}

Now any requests to select target 0N30D or 1N30D will give a not found error.


Comments

Generated with the Origen Semiconductor Developer's Kit

Origen is released under the terms of the MIT license