rohd 0.5.0
rohd: ^0.5.0 copied to clipboard
The Rapid Open Hardware Development (ROHD) framework, a framework for describing and verifying hardware
0.5.0 #
- Added
LogicArrayfor N-dimensional packed and unpacked (and mixed) arrays. AddedLogicStructurefor grouping sets of related signals together in a convenient way (https://github.com/intel/rohd/pull/375). - Added a
ConditionalGroupwhich can group a collection of otherConditionals into oneConditionalobject. - Breaking: some APIs which previously returned
ConditionalAssignnow return aConditional, such as the<operator forLogic. - Updated
LogicValue.ofwhich now accepts adynamicinput and tries its best to build what you're looking for. AddedLogicValue.ofIterableto replace the oldLogicValue.of. - Added
previousValuetoLogicto make testbench and modelling easier for things like clock edge sampling. - Breaking: Modified the way
Combinationalsensitivities are implemented to improve performance and prevent some types of simulation/synthesis mismatch bugs. AddedCombinational.ssaas a method to safely build procedural logic.Combinationalwill now throw fatal exceptions in cases of "write after read" violations. (https://github.com/intel/rohd/pull/344) - Deprecated
getReceivers,getDrivers, andgetConditionalsin always blocks likeCombinationalandSequentialin favor of simpler and more efficient APIsreceivers,drivers, andconditionals. - Breaking: shorthand notation APIs for
incr,decr,mulAssign, anddivAssignhave been modified. - Replaced
IfBlockwithIf.block(deprecatedIfBlock). - Replaced
StateMachinewithFiniteStateMachine(deprecatedStateMachine). - Added support for multi-trigger (e.g. async reset) to abstractions like
FiniteStateMachineandPipeline. DeprecatedclkonFiniteStateMachineandPipeline. - Added ability to generate an FSM diagram in mermaid from a
FiniteStateMachine. - Added
PairInterfaceto make it easier to build and use simpleInterfaces. - Breaking:
connectIOinInterfacenow acceptsIterables instead of onlySets. - Improved numerous
Exceptions throughout to provide more specific information about errors and make them easier to catch and handle. - Upgraded some operations to avoid generating unnecessary hardware and SystemVerilog when configured to leave a signal unchanged (e.g.
getRange,swizzle,slice, etc.). - Added extension to generate randomized
LogicValues from aRandom. - Added replication operations to
LogicValueandLogic. - Added
equalsWithDontCaretoLogicValuefor comparisons where invalid bits are "don't-care". - Improved timestamps in generated outputs to make timezones apparent.
- Added the
flopfunction to constructFlipFlops in an easier way. - Added the
casesfunction to construct simpleCasestatements in an easier way. - Added APIs for configuring reset and reset values in
Sequentialand flip flops. - Added APIs for adding an enable to flip flops.
- Implemented a variety of performance enhancements for both build and simulation.
- Added
tryInputandtryOutputtoModuleandtryPorttoInterfaceto more easily handle conditionally present ports by leveraging Dart'snullsafety by returningnullif the port does not exist (instead of an exception). - Added
gtandgtetoLogicto make APIs more consistent. - Added
clog2toLogicValue. - Added
neqandpowto bothLogicandLogicValue. - Made
LogicValueimplementComparable, enabling things like sorting. - Enabled
WaveDumperto recursively create necessary directories for specified output paths. - Fixed a bug where ports could be created with an empty string as the name (https://github.com/intel/rohd/issues/281).
- Fixed a bug where generated SystemVerilog for arithmetic shift-right operations would sometimes be incorrect (https://github.com/intel/rohd/issues/295).
- Fixed a bug where
SynthBuilderwould not flag an error when run on aModulethat hadn't yet been built (https://github.com/intel/rohd/issues/246). - Disallowed signals from being connected directly to themselves in a combinational loop.
- Fixed a bug where non-synthesizable deposits on undriven signals could affect the generated output SystemVerilog by inserting a non-floating constant (https://github.com/intel/rohd/issues/254).
- Reinstated an accidentally removed exception for when signal width mismatch occurs (https://github.com/intel/rohd/issues/311).
- Fixed a bug where indexing a constant value could generate invalid SystemVerilog.
- Fixed a bug where constants and values that could be interpreted as negative 64-bit values would sometimes generate a
-sign in output SystemVerilog. - Fixed bugs so
Ifs that are illegally constructed throw anException(https://github.com/intel/rohd/issues/382). - Fixed a bug where
FiniteStateMachinecould create an inferred latch (https://github.com/intel/rohd/pull/390). - Fixed an issue where
Casestatements with multiple matches would throw anExceptioninstead of drivingxon the output, which could cause spurious crashes during glitch simulation (https://github.com/intel/rohd/issues/107). - Fixed a number of bugs related to logical, shift, math, and comparison operations related to width and sign interpretation.
- Fixed a bug where
CaseandCaseZwould not use the properly edge-sampled value inSequentialblocks (https://github.com/intel/rohd/issues/348). - Fixed bugs where logic that is driven by floating signals would sometimes drive
zinstead ofxon outputs (https://github.com/intel/rohd/issues/235).
0.4.2 #
- Added a GitHub Codespace to the repository as a quick way to experiment with ROHD without any environment setup.
- Added
Conditionaloperations similar to++x(incr),--x(decr),x *=(mulAssign), andx /=(divAssign) toLogic(https://github.com/intel/rohd/issues/141). - Fixed a bug where generated SystemVerilog could perform index accesses on single-bit signals (https://github.com/intel/rohd/issues/204).
- Expanded capability to construct single-
Conditionalmore succinctly viaElse.s(https://github.com/intel/rohd/issues/225). - Fixed a bug where sensitivities for
Combinationals were excessively pessimistic (https://github.com/intel/rohd/issues/233). - Improved exceptions raised by
Logic.putto include context on which signal was affected to help with debug (https://github.com/intel/rohd/pull/243). - Optimized
WaveDumperto only periodically write data to the VCD file to improve performance (https://github.com/intel/rohd/pull/242). - Made
endIndexingetRangean optional positional argument with a default value ofwidth, enabling a more convenient method for collecting all bits from some index until the end (https://github.com/intel/rohd/issues/228). - Added an exception in cases where names of interface ports are invalid/unsanitary (https://github.com/intel/rohd/issues/234).
- Upgraded the
Simulatorso that it wouldawaitasynchronous registered actions (https://github.com/intel/rohd/pull/252). - Deprecated
Logic.hasValidValueandLogic.isFloatingin favor of similar operations onLogic.value(https://github.com/intel/rohd/issues/198). - Added
Logic.isIn, which generates logic computing whether the signal is equal to any values in a (optionally mixed) list of constants or other signals (https://github.com/intel/rohd/issues/7).
0.4.1 #
- Fixed a bug where
Modules could have invalid names in generated SystemVerilog (https://github.com/intel/rohd/issues/138). - Fixed a bug where
Logics could have invalid names in generated SystemVerilog. - Added a feature allowing access of an index of a
Logicvia anotherLogic(https://github.com/intel/rohd/issues/153). - Fixed a bug where multiple sequential driver issues might not be caught during ROHD simulation (https://github.com/intel/rohd/issues/114).
- Improved
Exceptions in ROHD with better error messages and more granular exception types to make handling easier. - Improved generated SystemVerilog for sign extension and added capability for replication (https://github.com/intel/rohd/issues/157).
- Fixed a bug where signal names and module instance names could collide in generated SystemVerilog (https://github.com/intel/rohd/issues/205).
- Fixed a bug where in some cases modules might not be properly detected as sub-modules, leading to erroneous omission in generated outputs.
- Added capability to perform modulo and shift operations on
Logicvia a constant values (https://github.com/intel/rohd/pull/208). - Completed a fix for a bug where shifting a
Logicby a constant would throw an exception (https://github.com/intel/rohd/issues/170). - Modified the mechanism by which signal propagation occurs between
Logics so that connectedLogics share an underlying value-holding entity (https://github.com/intel/rohd/pull/199). One significant implication is that modifying a value of aLogic(e.g. viaputorinject) will now affect the value of both downstream and upstream connectedLogics instead of only downstream. This change also can significantly improve simulation performance in connection-heavy designs. Additionally, this change helps mitigate an issue where very long combinational chains of logic can hit the stack size limit (https://github.com/intel/rohd/issues/194). - Fixed a bug where large unsigned values on
LogicValues would convert to incorrectintvalues (https://github.com/intel/rohd/issues/212). - Added an extension on
BigIntto perform unsigned conversion to anint. - Added a capability to construct some
Conditionaltypes (e.g.If) which have only a singleConditionalmore succinctly (https://github.com/intel/rohd/issues/12). - Optimized some operations in
LogicValuefor performance (https://github.com/intel/rohd/pull/215). - Added a shortcut to create a 0-width
LogicValuecalledLogicValue.empty(https://github.com/intel/rohd/issues/202). - Fixed a bug where equal
LogicValues could have unequal hash codes (https://github.com/intel/rohd/issues/206). The fix also improved internal representation consistency forLogicValues, which could provide a significant performance improvement when wide values are used often.
0.4.0 #
- Fixed a bug where generated SystemVerilog could apply bit slicing to an expression (https://github.com/intel/rohd/issues/163).
- Fixed a bug where constant collapsing in SystemVerilog could erroneously remove constant assignments (https://github.com/intel/rohd/issues/159).
- Fixed a bug where
Combinationalcould have an incomplete sensitivity list causing incorrect simulation behavior (https://github.com/intel/rohd/issues/158). - Significantly improved simulation performance of
Combinational(https://github.com/intel/rohd/issues/106). - Upgraded and made lints more strict within ROHD, leading to some quality and documentation improvements.
- Added a feature allowing negative indexing to access relative to the end of a
LogicorLogicValue(https://github.com/intel/rohd/issues/99). - Breaking: Increased minimum Dart SDK version to 2.18.0.
- Fixed a bug when parsing unsigned large binary integers (https://github.com/intel/rohd/issues/183).
- Exposed
SynthesisResults from theSynthBuilder, making it easier to generate SystemVerilog modules into independent files (https://github.com/intel/rohd/issues/172). - Breaking: Renamed
topModuleNametodefinitionNameinExternalSystemVerilogModule(https://github.com/intel/rohd/issues/169). - Added the
muxfunction as a shortcut for building aMuxand returning the output of it (https://github.com/intel/rohd/issues/13). - Deprecation: Improved naming of ports on basic gates, old port names remain accessible but deprecated for now (https://github.com/intel/rohd/issues/135).
- Fixed list of reserved SystemVerilog keywords for sanitization (https://github.com/intel/rohd/issues/168).
0.3.2 #
- Added the
StateMachineabstraction for finite state machines. - Added support for the modulo
%operator. - Added ability to register actions to be executed at the end of the simulation.
- Modified the
WaveDumperto write to the.vcdfile asynchronously to improve simulation performance while waveform dumping is enabled (https://github.com/intel/rohd/issues/3)
0.3.1 #
- Fixed a bug (introduced in v0.3.0) where
WaveDumperdoesn't properly dump multi-bit values to VCD (https://github.com/intel/rohd/issues/129).
0.3.0 #
- Breaking: Merged
LogicValueandLogicValuesinto one type calledLogicValue. - Deprecation: Aligned
LogicValuetoLogicby renaminglengthtowidth. - Breaking:
Logic.putno longer acceptsList<LogicValue>, swizzle it together instead. - Deprecated
Logic.valueIntandLogic.valueBigInt; instead use equivalent functions onLogic.value. - Deprecated
biton bothLogicValueandLogic; instead just checkwidth. - Added ability in
LogicValue.toStringto decide whether or not to include the width annotation throughincludeWidthargument. - Fixed a bug related to zero-width construction of
LogicValues (https://github.com/intel/rohd/issues/90). - Fixed a bug where generated constants in SystemVerilog had no width, which can cause issues in some cases (e.g. swizzles) (https://github.com/intel/rohd/issues/89)
- Added capability to convert binary strings to ints with underscore separators using
bin(https://github.com/intel/rohd/issues/56). - Added
getRangeandreversedonLogicandsliceonLogicValueto improve consistency. - Using
slicein reverse-index order now reverses the order. - Added the ability to extend signals (e.g.
zeroExtendandsignExtend) on bothLogicandLogicValue(https://github.com/intel/rohd/issues/101). - Improved flexibility of
IfBlock. - Added
withSetonLogicValueandLogicto make it easier to assign subsets of signals and values (https://github.com/intel/rohd/issues/101). - Fixed a bug where 0-bit signals would sometimes improperly generate 0-bit constants in generated SystemVerilog (https://github.com/intel/rohd/issues/122).
- Added capability to reserve instance names, as well as provide and reserve definition names, for
Modules and their corresponding generated outputs.
0.2.0 #
- Updated implementation to avoid
Iterable.forEachto make debug easier. - Added
ofBooltoLogicValueandLogicValues(https://github.com/intel/rohd/issues/34). - Breaking: updated
InterfaceAPI so thatgetPortsreturns aMapfrom port names toLogicsignals instead of just a list, which makes it easier to work with when names are uniquified. - Breaking: removed
setPortfromInterface. UsesetPortsinstead. - Deprecated
swizzleandrswizzleglobal functions and replaced them with extensions onLists of certain types includingLogic,LogicValue, andLogicValues(https://github.com/intel/rohd/issues/70). - Breaking: renamed
ExternalModuletoExternalSystemVerilogModulesince it is specifically for SystemVerilog. - Breaking: made
topModuleNamea required named parameter inExternalSystemVerilogModuleto reduce confusion. - Added
simulationHasEndedbool toSimulator. - Updated
Simulatorto allow for injected actions to returnFutures which will beawaited. - Fixed bug where
Simulatorwarns about maximum simulation time when not appropriate. - Fixed a bug where
ExternalSystemVerilogModulecould enter infinite recursion. - Some improvements to
SimCompareto properly check values at the end of a tick and support a wider variety of values inVectors. - Fixed a bug related to
Sequentialsignal sampling where under certain scenarios, signals would pass through instead of being flopped (https://github.com/intel/rohd/issues/79). - Deprecated a number of
fromfunctions and replaced them withofto more closely follow Dart conventions (https://github.com/intel/rohd/issues/72).
0.1.2 #
- Optimized construction of
LogicValuesto improve performance - Renamed
FFtoSequential(markedFFas deprecated) (breaking: removedclksignal) - Added
Sequential.multifor multi-edge-triggered blocks (https://github.com/intel/rohd/issues/42) - Improved exception and error messages (https://github.com/intel/rohd/issues/64)
0.1.1 #
- Fix
Interface.connectIObug when no tags specified (https://github.com/intel/rohd/issues/38) - Fix uniquified
Interface.getPortsbug (https://github.com/intel/rohd/issues/59)
0.1.0 #
- The first formally versioned release of ROHD.