bugfix for sub block override feature which was hiding nested constant name errors
Catch flush issues when a logger is closed
disable problematic lint rule
ability to for a custom rubocop config and support force autocorrect
corrected scope access for config variables during remote job count - Cody Horton
allow siteconfig to control max remote job count - Cody Horton
Released by Cody Horton
bugfix for sub_block override feature: skip require on files that dont instantiate a namespace.
Added support for sub-block override and remote block file inheritance
fix Windows drive mismatch bug
Add absolute value checks to as_units for negative inputs - James Creamer
Added API to sync up concurrent pattern threads
coverage fix for new application directory structure
Update how sub_block_group(s) works to fix an issue where a new instance of a sub block group was created each time it was referenced.
Added site config variable for lsf command prefix
Bug fixes to archive command and sub-block loading
Fixed bug where rake tasks would not load under the new application directory structure.
Fix Issue #352 for Ruby >= 2.6.0
Added deprecate warning to clean_path_to_sub_program in file_handler as upcoming release of origen_testers will handle without this method.
Bug fix to last update
Fixed usage of sourceless patterns in Sequences
Added multiple inheritance to parameter sets
Merge PR #356
define_params
method to returning the instantiated parameter setPatch to web templates to support HTTPS protocol for origen-sdk.org links..
Bug fix: extract_csv_data to handle files in app or plugin using file_handler.
Included new app generator 2.1.1 in the gem package
Added more company internal gem server options to the site config
Included pin type in exported models
bug fix: windows file path string is now reconstructed after split on ‘:’ bug fix: work around for ruby Pathname GC bug
Fixed issue with app generator dot files not being included in the gem package
Supports origen_app_generators v2 (new Origen apps come with an app/ dir)
Initial release of app/ dir and code generators (origen new command)
Added internal hooks to improve OrigenSim integration
Various bug fixes (Brian Caquelin and Stephen McGinty)
sub_block_group
API (Daniel Hadad)robustness improvements for git and model export
fixes for model export meta data
msb0 register description bug fixes
Removed some leftover debug code
Patch to new boot system
Added site_config broadcast system, new boot system which support application archive and extraction, and application sandbox gem configuration.
Added meta data to support better register access code importing (Chris Hume)
use_bootsnap
if requiredFixes bug introduced in 0.34.3 whereby jobs would not submit to the LSF when a value of ‘1’ was assigned to the lsf_cores site config parameter.
10.ms!
Origen will now use site config variables for a LSF configuration setup. The application can always override the default values by specifiying them within the app config.
Minor bug fixes to support org_file usage in OrigenSim and to enable Origen guides that are supplied from plugins to be compiled/viewed within a plugin workspace
Really fix compatibility with Ruby 2.2
read
and write
methods for pins as aliases for drive
and expect
(Paul Derouen)feature
,
reset
, access
(Ronnie Lajaunie)origen web compile
on Windows (Corey Engelken)Added API to allow plugins to add pages to the Origen guides (and moved pattern and program generator guides to OrigenTesters):
# In the plugin's config/application.rb
config.shared = {
# Specify the local directory where the guides live, should be the same in most cases
origen_guides: "templates/origen_guides",
origen_guides_index: -> (index) do
# Example of adding a section
index.section :pattern, heading: "Pattern Generator", after: :controllers do |section|
section.page :introduction, heading: "Introduction"
section.page :creating, heading: "Creating Patterns"
end
# Example of adding a page to an existing section
index.section :program do |section|
section.page :smt8, heading: "V93K SMT8", after: :v93k
end
end
}
Spec-ed and documented Origen’s Collector
utility. Docs are available on the
utilities page.
Fixes for issue #261 and issue #259
Added basic password method (McGinty).
Here is an example of how it works:
stephen@ywing:~/Code/github/origen$ origen i
origen(main):001:0> User.current.id
=> "stephen"
origen(main):002:0> User.current.password
Please enter your password:
=> "blah"
origen(main):003:0> User.current.password
=> "blah"
origen(main):004:0> exit
# It survives across threads and will also be shared amongst all of a user's apps, since
the
# global Origen session store is used
stephen@ywing:~/Code/github/origen$ origen i
origen(main):001:0> User.current.password
=> "blah"
origen(main):002:0> exit
# The password is stored in the user's home dir, only readable by them:
stephen@ywing:~/Code/github/origen$ ls -al ~/.origen/.session/
total 20
drwxrwxr-x 2 stephen stephen 4096 Mar 19 14:50 .
drwxrwxr-x 5 stephen stephen 4096 Mar 19 10:27 ..
-rw-rw-r-- 1 stephen stephen 163 Mar 19 10:27 app_generators
-rw-rw-r-- 1 stephen stephen 67 Mar 19 14:50 _system
-rw------- 1 stephen stephen 57 Mar 19 14:57 user
Moved Perforce driver to a plugin to remove dependency on p4ruby gem
add_clock :socclk do |c|
c.description = 'SoC clock'
c.nominal_frequency = 1.2.Ghz
c.frequency_range = :fixed
c.users = [:data_mesh]
c.instantiate_users = false
end
dut.param?('tprog').should == 20
dut.param?(:tprog).should == 20
dut.param?('tprog_does_not_exist').should == nil
dut.param?(:tprog_does_not_exist).should == nil
def initialize
@my_version = version
add_mode :mode1
@mode_changed_count = 0
end
def on_mode_changed(options)
@mode_changed_count += 1
end
it 'on_mode_changed callback works' do
m = MyModel.new
m.modes.should == [:mode1]
m.mode.should == nil
m.mode_changed_count.should == 0
m.mode = :mode1
m.mode_changed_count.should == 1
end
Origen.config.remotes do
[
{
dir: "mydir",
vault: "p4://myserver:myport//path/to/my/remote/file/myfile.xlsx",
tag: '0.1.0'
}
]
end
Sub-blocks return to being immediately instantiated by default, but with the option
of making them lazy by supplying lazy: true
to the sub_block definition
Note that this means that any large amount of imported/exported data will go back to taking 10 seconds or whatever to load the target again. That can be fixed by doing one of the following:
Origen::SubBlocks.lazy = true
in your target before instantiating the DUT and
it will go back to the previous behavior of lazy-loading by default.Model data can now be exported/imported to a custom directory and not just vendor the API is as follows:
my_model.export 'some_id', dir: "/any/dir/of/my/choosing"
Then to import that data:
my_model.import 'some_id', dir: "/any/dir/of/my/choosing"
As before, the exported code is wrapped in the current application’s namespace and if you are exporting and importing back and forth within the same app you don’t need to worry about it. However, if you are exporting from one app and importing into another, then the importing app needs to know about the namespace that was used to do the exporting. The namespace can now be selected (or even set to nil if you want) via the following API:
my_model.import 'some_id', namespace: 'NameOfExportingApp'
You can also specify the namespace at the point of export if you want to use something other than the app’s name:
my_model.export 'some_id', namespace: "design_data"
Then to import that data:
my_model.import 'some_id', namespace: "design_data"
The :dir
and :namespace
options are independent of each other and can be used together if desired.
Fix for bug #218 (erroneous OrgFile::Interceptable integration error)
Restored site config’s user_gem_dir to previous behavior (enabled backwards compatability if a user_gem_dir already exist and points to /.origen/gems). Bug fix to site config wherein it wasn’t finding a user’s site config.
on_create will now be called immediately when a sub-block (or any other model) is instantiated after the target has been loaded.
Reinstated Origen.site_config.gem_install_dir ($ORIGEN_GEM_INSTALL_DIR) as a means of changing the location of where a user’s gems are installed.
add_reg :blregtest, 0x00, 4, :y => { :pos => 0},
:x => { :pos => 1, :bits => 2 },
:w => { :pos => 3 }
reg(:blregtest).write! do |r|
r.bits(:y).write(1)
r.bits(:x).write(0x2)
r.bits(:w).write(1)
end
reg(:blregtest).write(0)
reg(:blregtest).x.write! do |b|
b[1].write(1)
end
reg(:blregtest).read! do |r|
r.bits(:y).read
end
add_power_domain :vdd do |domain|
domain.description = 'CPU'
domain.nominal_voltage = 1.0.V
domain.unit_voltage_range = 0.7.V..1.1.V
domain.maximum_voltage_rating = 1.50.V
domain.min = 0.9.V
domain.max = 1.1.V
domain.display_names(Nokogiri::XML::DocumentFragment.parse 'OV<sub>DD</sub>')
end
add_clock :cclk do |c|
c.description = 'Core complex clock'
c.nominal_frequency = 2.5.Ghz
c.frequency_range = 0.8.Ghz..3.2.Ghz
c.users = [:core_complex] # The names here refer to the sub-blocks that use it
end
spec :fmin, :ac do |s|
s.symbol "Fmin"
s.description = "Frequency Min"
s.min = ":core_clk * 0.9"
end
spec :memio_voh, :dc do |s|
s.symbol "Voh"
s.description = "Output high voltage"
s.max = ":vmemio * 0.8"
end
Origen::PowerDomains::PowerDomain#voltage_range
to unit_voltage_range
to better
reflect its usage (Brian Caquelin)String#symbolize
method from injecting multiple underscores when faced with multiple
spaces in a sting, these are now condensed to a single underscore (Brian Caquelin)current_mode
attribute from their parent if not otherwise set
on the sub-block specifically (Brian Caquelin)Removed some pre-release work that was included in the 0.25.0 release by accident
12_000_000.as_Ohm # => '12.0MOhm'
123_000_000_000.as_Hz # => '123.0GHz'
123_456_000_000_000.as_hz # => '123.456Thz'
# Ex 1: Only ADC cfg registers (:adc0_cfg, :adc1_cfg)
dut.regs('/acd\d_cfg/') # => [reg_obj, reg_obj]
# Ex 2: Any cfg registers (:adc0_cfg, :adc1_cfg, :dac_cfg)
dut.regs('/cfg/') # => [reg_obj, reg_obj, reg_obj]
Initialized @max_address_reg_size to prevent nil case for single-register sub-block. Pull Request #92 - Chris Hume.
Changed to MIT license
regex = /abc/i
regex.to_txt # => "\/abc\/i"
regex.to_txt(no_mods: true) # => "\/abc\/"
Bug fix caused by recent bit_order feature addition when registers have a non-std parent object.
Bumped Nokogiri version to the latest, and new integration with the origen_updater plugin
Removed some debug helpers that were left in the last release
Added hooks to allow the integration of an origen updater plugin to help manage the process of updating an application’s gems.
Temporarily rolled back the Nokogiri version increase after initial problems in some environments, will update to the latest version soon one the updater plugin is available.
Patch to the new use system gems process
Added before_release_gem and after_release_gem callbacks
Fixed an issue with add_pin_group when pins is an empty array.
Added indication sync is being run to allow register action logging.
Added color attr_accessor to pin_collection.rb Will allow for graphic generation to use color to coordinate pins.
Instantiating a persistent callback handler no longer has a dependency on the app being loaded. This fixes some app boot issues when origen_testers is required.
>> dut.myreg
=>
0x24 - :myreg
================================================================================================================
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| bitsx[1:0] | bitsy[1:0] | bitsz[3:0] |
| 0x0 | 0x0 | 0x0 |
----------------------------------------------------------------------------------------------------------------
>> dut.myreg.bits(:bitsx, :bitsz).write(0x2C)
>> dut.myreg
=>
0x24 - :myreg
================================================================================================================
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| bitsx[1:0] | bitsy[1:0] | bitsz[3:0] |
| 0x2 | 0x0 | 0xC |
----------------------------------------------------------------------------------------------------------------
Patch to the Origen::Utility.read_hex method to handle registers whose size is not nibble-aligned
Added utility method to format a register to be read into a data string, indicating which bits will be read, stored, overlaid or don’t cared.
Origen::Utility.read_hex(0x55) # => "0x55"
Origen::Utility.read_hex(nil) # => "0xX"
myreg.size # => 32
Origen::Utility.read_hex(myreg) # => "0xXXXXXXXX"
myreg[7..4].store
Origen::Utility.read_hex(myreg) # => "0xXXXXXXSX"
myreg[23..16].read
Origen::Utility.read_hex(myreg) # => "0xXX00XXSX"
myreg[23..16].read(0x12)
Origen::Utility.read_hex(myreg) # => "0xXX12XXSX"
reg[31..28].overlay("sub")
reg[31..28].read
Origen::Utility.read_hex(myreg) # => "0xVX12XXSX"
reg[5].clear_flags
Origen::Utility.read_hex(myreg) # => "0xVX12XX_ssxs_X"
reg[21].overlay("sub")
reg[18].store
Origen::Utility.read_hex(myreg) # => "0xVX_00v1_0s10_XX_ssxs_X"
Added on_resource_start and end callbacks during program generation. These are equivalent to on_flow_start/end, but the resource version will be called when the top-level flow is a Resource.create block instead of a Flow.create block.
Adding last two lines to allow rosetta_stone to be more robust.
Patch to the release process for compatibility with apps that are embedded in a parent repository.
Updated Git driver to allow a plugin to be embedded within a parent repo, see the tester_std_lib repo for an example
Another (hopefully final!) patch to the plugin load sequence
Patch to add the top-level app’s lib dir to the load path early in the application load sequence. It seems that some plugins relied on this behavior from when the app was loaded first before the plugins.
Origen.log.success 'Good A'
Origen.log.success 'Good B'
Origen.log.error 'Bad A'
Origen.log.messages # => { :info=>{},
# :warn=>{},
# :error=>{nil=>[ "[ERROR] 10.050[7.424] || Bad A" ]},
# :deprecate=>{},
# :debug=>{},
# :success=>{nil=>[ "[SUCCESS] 0.008[0.008] || Good A",
# "[SUCCESS] 2.626[2.618] || Good B"
# ]}
# }
Origen.log.messages[:success][nil].size # => 2
# Note that as above, by default the messages will be stored within a
# sub-category of 'nil'.
# This category can be set when writing the message:
Origen.log.success 'Good A', :cat1
Origen.log.success 'Good B', :cat1
Origen.log.success 'Good C', :cat2
Origen.log.messages[:success][:cat1].size # => 2
Origen.log.messages[:success][:cat2].size # => 1
# This code may be hit before the app is fully loaded which can lead to runtime errors. This can
# now be resolved by wrapping with this method to defer execution until the app instance is fully
# available.
# It will execute immediately if the app is already loaded.
Origen.after_app_loaded do |app|
app.do_something
end
# lib/my_plugin.rb
require 'origen'
require_relative '../config/application.rb'
# Plugin specific requires go here
Fixed any issues with calling current? within config/application.rb (probably the main reason for a plugin to implement a non-standard load before now)
Added an API for plugins to add additional application configuration attributes to their host app:
# config/application.rb (of the plugin)
require 'origen'
class MyPluginApplication < Origen::Application
# Adds a new attribute with a default of nil
add_config_attribute(:my_attribute)
# Adds a new attribute with a default of an empty hash
add_config_attribute(:my_attribute, default: {})
# By default any attributes added in this way will raise an error if they are accessed before the
# target is loaded (this is the case for the majority of standard config attributes).
# If you need the attribute to be accessible before target load then do this:
add_config_attribute(:my_attribute, depend_on_target: false)
# Such attributes can then be set by the top-level application in exactly the same way as the
# standard attributes:
config.my_attribute = { some_val: true }
# They will also accept a block:
config.my_attribute do
if some_condition
{ some_val: true }
end
end
Internal updates to some hooks that support OrigenTesters
my_reg.write(0x00FF_AA55)
my_reg.data # => 0x00FF_AA55
my_reg.data_b # => 0xFF00_55AA
my_reg.data_reverse # => 0xAA55_FF00
Updates to regression manager with respect to running regressions with a service account. This is still a work in progress and will be updated often.
Added the ability to lookup a parameter value via an explicitly supplied context:
dut.params.tprog # => 20
dut.params(:ft).tprog # => 15
Added ‘bundle exec’ back to regression manager. Without it problems occur when regressions are run with a service account.
Bug fix to allow parameters to be called ‘min’ and ‘max’
Bug fixes to bin script
Minor updates to the regression manager. Added options to pass version and reference workspace path to the regression manager
Added Model and Register to_json methods
Various minor improvements:
Fixes issue #52 and #53
Fixed ‘origen rc init’ when using Git
Improved error reporting when a sub block or controller model fails to instantiate
merged PR #50
retagging (merged PR #49)
Merged Pull Request #48. Making a release so David/Rebecca can use the gem release.
Fixed issue with search boxes hanging the browser
template =<<-END
X is: <%= options[:x] %>
END
Origen.compile(template, string: true, x: 10)
myreg.named_bits do |name, bits|
# ...
end
myreg.named_bits.each do |name, bits|
# ...
end
---
search_id: my_subsection
---
dut.has_spec?(:gvdd, symbol: true)
Added a shorthand for syncing a register in an Origen Link debug session:
dut.my_reg # Display register with current local content
dut.my_reg.sync # Sync register and display with updated content
dut.my_reg! # Sync register and display with updated content
Added a memory API to all DUTs and sub-blocks which enables read/write of any memory location using the conventional register API and without having to pre-define the register.
Note that at present the register object generated via the memory API will be different to that returned by a defined register with the same address.
dut.mem(0x2000_0000).write!(0x1111_2222)
dut.mem(0x2000_0000).data # => 0x1111_2222
dut.mem(0x2000_0000).read!(0x1111_2222)
dut.mem(0x2000_0000)[15..0].read!(0x2222)
dut.mem(0x2000_0000)[31..16].store!
dut.mem(0x2000_0000).sync
Memory can be accessed via a sub-block with a local address, however there is only one memory and this will return the same register object as for the corresponding global address. Say here the NVM has a base_address of 0x4000_0000:
dut.nvm.mem(0x10).write!(0x5555_5555)
dut.mem(0x4000_0010).data # => 0x5555_5555
By default this returns 32-bit register objects and the address must be aligned. The width can be changed on a per-DUT basis:
dut.memory_width = 16
dut.mem(0x2000_0000).size # => 16
Finally, updated the sync method to take a size argument which corresponds to the number of memory locations to read out:
(byebug) dut.mem(0x40020000).sync(10)
40020000: FFFE0080
40020004: 00005555
40020008: 00000000
4002000C: 00000000
40020010: FFFFFFFF
40020014: 00000000
40020018: FFFFFFFF
4002001C: FFFFFFFF
40020020: FFFFFFFF
40020024: FFFFFFFF
Update to the BitCollection#sync method to fix the data ordering. Also now preserves any flags that are set on the bitcollection prior to syncing.
(byebug) dut.atd.result
0x4000_4502 - :atd_result
---------------------------------------------------------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| r[7:0] |
| 0x0 |
---------------------------------------------------------------------------------
(byebug) dut.atd.result.sync
0x4000_4502 - :atd_result
---------------------------------------------------------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| r[7:0] |
| 0xE2 |
---------------------------------------------------------------------------------
Reinstated use of geminabox to push internal gems, turned out to be required for some users
Updated hard dependency on nokogiri to the latest version, this is to support latest Ruby on Windows, but also the latest nokogiri seems easier to build.
Patch to the regression command to enable regressions vs. NXP RGen v2
No changes vs. 0.6.9, but releasing a new version of the gem to fix a Rubygems build error
Patches to regression command
Updates to Virtual pin model - Aaron Burgmeier
$dut.add_pin :pinx
$dut.add_pin :piny
$dut.add_virtual_pin(:virtual1, type: :virtual_bit)
$dut.add_virtual_pin(:virtual2, type: :virtual_bit)
$dut.add_virtual_pin(:virtual3, type: :ate_ch)
$dut.pins.size # => 2
$dut.virtual_pins.size # => 3
$dut.virtual_pins(:virtual1).type # => :virtual_bit
$dut.add_virtual_pin_group :virtual, :virtual1, :virtual2, package: :p1
$dut.add_virtual_pin_group :virtual, :virtual1, :virtual2, :virtual3, package: :p2
$dut.virtual_pin_groups.size # => 0
$dut.virtual_pin_groups(package: :p1).size # => 1
$dut.package = :p1
$dut.virtual_pins(:virtual).size # => 2
$dut.package = :p2
$dut.virtual_pins(:virtual).size # => 3
Minor update to make the program generator instantiate an empty interface, rather than raise an error, in the case where no interface is defined by the application. This allows an application to be able to generate a test flow only (i.e. no instances, etc.) without having to create an interface.
Introduce maillists for release notifications.
Origen uses maillists to send notifications of development and production releases. The
maillist files
should be located at config/maillist_dev.txt
and
config/maillist_prod.txt
Sample lists:
# config/maillist_dev.txt
#
# Product team X (handles commenting like this)
first.last@company.com
john.smith@company.com
# config/maillist_prod.txt
#
# Some other product team
memory.expert@company.com # Memory Test Lead (commenting like this is ok too)
# Example of an ID only
last.first
x49509
To get a list of your application’s mailists:
Origen.app.maillist_dev # => [<first.last@company.com>, <john.smith@company.com>]
Origen.app.maillist_prod # => [<memory.expert@company.com>, <last.first@MYcompany.com>,
<x49509@MYcompany.com>]
You can pass the returned array directly to the send_email method:
Origen.mailer.send_email(subject: "Hello", to: Origen.app.maillist_dev, body: "Hello to
all developers!")
There is a bug with Hash.filter where if the Hash is NilClass, then the filter will fail. Changing to filter_hash allows for this corner case to be corrected. (David Welguisz)
Update front-page sponsors to NXP.
Patch to preserve internal file handler state when an Origen job is launched programmatically e.g. Origen.app.runner.launch action: :program, files: “program/production.list”
This fixes bugs with some file references not working when the program generator is launched like this.
Bug fix to remote manager that was mismatching version strings of requested and existing remote when version: “vX.X.X” was used instead of “X.X.X”.
Origen.app.revision_control_root now returns Origen.root instead of crashing in the case where the app has not been committed to revision control yet
Re-enabled support for a legacy register definition API to make existing application upgrade to Origen easier.
Updated the DesignSync API to expose an import method, this allows files to be fetched from a vault to the local workspace without setting up a formal association between the local folder and the remote vault.
Fixed bug with Origen.app.rc (app revision controller) which did not work if the workspace was based on a fork of the main app repo.
Added a new API to get a path to an application’s imports directory. This is a directory that should be used to import 3rd party dependency data which is revision controlled outside of the current application.
Origen will ensure that this directory is outside of the scope of the current application’s revision control system to prevent any conflicts that could arise from having nested revision controlled workspaces.
Origen.root # => "/home/thao/my_app"
Origen.app.imports_dir # => "/home/thao/.my_app_imports_DO_NOT_HAND_MODIFY"
Disabled ‘origen fetch’ command, this will be re-introduced in future once an Origen server is available
Tweaked console inspect output of models/controllers
Added concise inspect method to all controllers and models, this makes for much better browsing of a model’s hierarchy in the console
Removed branch restrictions from ‘origen rc tag’ when using Git by default. Restrictions will only be in place if app.config.rc_workflow == :gitflow.
Targets/environments can now just instantiate top-level models and testers and they will be automatically assigned to $dut and $tester respectively.
# target/eagle.rb
Eagle.new
OrigenTesters::J750.new
# Somewhere else
$dut # => <eagle instance>
$tester # => <j750 instance>
Update to Origen::Model to proxy unrecognized methods to the model’s controller.
Made bits.assert an alias of bits.read.
Made ‘dut’ and ‘tester’ global methods e.g. allows tester.j750? from anywhere in addition to $tester.j750?
Origen.add.rc will now return nil instead of a non-functional revision controller instance in the case where config.rc_url is undefined
Added the ability for a given user environment to set their name and email details via environment variables, though via Git is still the preferred method to do this.
Minor update to the Git driver for initializing new applications.
Removed the following legacy code/features:
Added new ‘origen mode’ command, this allows the operating more to be setup at a workspace level, similar to how the target and environment can be set:
origen mode # => production, this is the default
origen m # => production, m is an short cut alias
origen m debug # Set the workspace mode to debug
origen m simulation # Set the workspace mode to simulation
origen m production # Set the workspace mode back to production
A target or environment file can override the workspace default as before:
Origen.mode = :simulation
Added a guard to prevent Origen from loading whenever Freescale RGen is present. This is temporary to help Freescale transition to Origen and will have no effect on everyone else.
Removed the following legacy code/features:
# Returns an array containing the application instance for all used plugins
Origen.app.plugins # [<app>, <app>, <app>]
# Set the current plugin, this will persist across Origen threads
Origen.app.plugins.current = :origen_testers
Origen.app.plugins.current # <origen_testers app instance>
Origen.app.plugins.current.name # :origen_testers
Origen.app.plugins.current.root # /path/to/origen_testers/root
# Temporarily set a different plugin, this will not persist to the next thread
Origen.app.plugins.temporary = :origen_debuggers
Origen.app.plugins.current # <origen_debuggers app instance>
Origen.app.plugins.temporary = nil
Origen.app.plugins.current # <origen_testers app instance>
Origen.app.plugins.current = nil
Origen.app.plugins.current # => nil
Fixed style issues in logo web page helper
Fixed bug with the exit status of commands (e.g. origen lint) not being set correctly when failed
Origen.target.temporary = -> { $dut = SomeLocalClass.new }
# Any calls to load or reload the target will now execute the above function
class Top
include Origen::TopLevel
def initialize
sub_block :vreg, class_name: "VReg", base_address: 0x1000_0000
sub_blocks :atd, instances: 2, class_name: "ATD", base_address: 0x2000_0000
sub_blocks :osc, instances: 2, class_name: "Oscillator", base_address: 0x3000_0000, base_address_step: 0x1000
sub_blocks :pmc, instances: 2, class_name: "PMC", base_address: [0x4000_0000, 0x4001_0000]
end
end
dut = Top.new
# The given instance is accessible by appending the index number to the sub_block name
dut.atd0 # => <ATD instance>
dut.atd1 # => <ATD instance>
# Append an 's' to the name to get an array of all instances
dut.atds # => [<ATD instance>, <ATD instance>]
dut.vreg.base_address # => 0x1000_0000
dut.atd0.base_address # => 0x2000_0000
dut.atd1.base_address # => 0x2000_0000
dut.osc0.base_address # => 0x3000_0000
dut.osc1.base_address # => 0x3000_1000
dut.pmc0.base_address # => 0x4000_0000
dut.pmc1.base_address # => 0x4001_0000
Added support for applications to implement a command called ‘test’ which will accept a -c option to enable coverage.
Added config.disqus_shortname attribute to link an application to a disqus forum, see the origen_doc_helpers plugin for more details.
Various enhancements:
---
title: My Page
analytics: UA-12345678-1
---
### My Page
---
layout: None
---
<!DOCTYPE html>
<html>
...
left_file = "#{Origen.root}/left.txt"
right_file = "#{Origen.root}/right.txt"
processor = Origen::Utility::FileDiff::Processor.new(left_file, right_file)
# To Generate a HTML file (diff.html) showing the differences
Origen::Utility::FileDiff::Formatter::Html.new(processor.process!, "#{Origen.root}/diff.html").format
# To Generate a TXT file (diff.txt) showing the differences
Origen::Utility::FileDiff::Formatter::Text.new(processor.process!, "#{Origen.root}/diff.txt").format
3rd time lucky…
Another release bug fix attempt
Bug fix to app release process introduced in last update
Improved the Origen boot process, there is now no need for the user to modify their PATH to run Origen.
Further improvements to boot process, the user now no longer needs to add anything to their PATH.
Fixed rake (broken by last release).
Made Origen boot up more robust and with better site control of what gems to use from the system Ruby.
All tests now passing
‘origen web compile’ can now deploy to a Git repository as well as to a Linux web server directory.
To deploy to Git, setup your application config to point to the required Git repo like this:
config.web_directory = "git@github.com:Origen-SDK/Origen-SDK.github.io.git"
config.web_domain = "http://origen-sdk.org"
A single Git repo can host many sites by deploying to a sub-directory like this:
config.web_directory = "git@github.com:Origen-SDK/Origen-SDK.github.io.git/doc_helpers"
config.web_domain = "http://origen-sdk.org/doc_helpers"
Version archiving is currently not supported with Git deploy, an alternative way of archiving old documentation snapshots may emerge in future.
Fixed bug in ‘origen new’ command
‘origen new’ command now works with origen_app_generators hosted on rubygems.org
Periodic tag/gem release during initial development, many features not working yet