Changelog for sv2v-0.0.11
v0.0.11
New Features
- Added
-y
/--libdir
for specifying library directories from which to automatically load modules and interfaces used in the design that are not found in the provided input files - Added
--top
for pruning unneeded modules during conversion - Added
--write path/to/dir/
for creating an output.v
in the specified preexisting directory for each module in the converted result - The
string
data type is now dropped from parameters and localparams - Added support for passing through
sequence
andproperty
declarations
Bug Fixes
- Fixed crash when converting multi-dimensional arrays or arrays of structs or unions used in certain expressions involving unbased unsized literals
- Fixed module-level localparams being needlessly inlined when forming longest static prefixes, which could cause deep recursion and run out of memory on some designs
- Fixed overzealous removal of explicitly unconnected ports (e.g.,
.a()
) - Fixed an issue that left
always_comb
,always_latch
, andalways_ff
unconverted when tagged with an attribute - Fixed unneeded scoping of constant function calls used in type lookups
/*/
is no longer interpreted as a self-closing block comment, e.g.,$display("a"/*/,"b"/* */);
previously printed "ab", but now prints "a"- Fixed missing
begin
/end
when disambiguating procedural branches tagged with an attribute - Fixed keywords included in the "1364-2001" and "1364-2001-noconfig"
begin_keywords
version specifiers
Other Enhancements
- Added elaboration for accesses to fields of struct constants, which can substantially improve conversion speed on some designs
- Added constant folding for comparisons involving string literals
- Port connection attributes (e.g., pulp_soc.sv) are now ignored with a warning rather than failing to parse
- Improved error message when specifying an extraneous named port connection
- Improved error message for an unfinished conditional directive, e.g., an
ifdef
with noendif
- Added checks for accidental usage of interface or module names as type names
v0.0.10
Breaking Changes
--write adjacent
no longer forbids overwriting existing generated files
New Features
- Added support for assignments within expressions (e.g.,
x = ++y;
) - Added support for excluding the conversion of unbased unsized literals (e.g.,
'1
,'x
) via--exclude UnbasedUniszed
- Added support for enumerated type ranges (e.g.,
enum { X[3:5] }
) - Added support for complex event expressions (e.g.,
@(x ^ y)
) - Added support for the SystemVerilog
edge
event - Added support for cycle delay ranges in assertion sequence expressions
- Added support for procedural continuous assignments (
assign
/deassign
andforce
/release
) - Added conversion for
do
while
loops - Added support for hierarchical calls to functions with no inputs
- Added support for passing through DPI imports and exports
- Added support for passing through functions with output ports
- Extended applicability of simplified Yosys-compatible
for
loop elaboration
Other Enhancements
- Certain errors raised during conversion now also provide hierarchical and approximate source location information to help locate the error
Bug Fixes
- Fixed inadvertent design behavior changes caused by constant folding removing
intentional width-extending operations such as
+ 0
and* 1
- Fixed forced conversion to
reg
of data sensed in an edge-controlled procedural assignment always_comb
andalways_latch
now generate explicit sensitivity lists where necessary because of calls to functions which reference non-local data- Fixed signed
struct
fields being converted to unsigned expressions when accessed directly - Fixed conversion of casts using structs containing multi-dimensional fields
- Fixed incorrect name resolution conflicts raised during interface inlining
- Fixed handling of interface instances which shadow other declarations
- Fixed names like
<pkg>_<name>
being shadowed by elaborated packages
v0.0.9
Breaking Changes
- Unsized number literals exceeding the maximum width of 32 bits (e.g.,
'h1_ffff_ffff
,4294967296
) are now truncated and produce a warning, rather than being silently extended- Support for unsized number literals exceeding the standard-imposed 32-bit
limit can be re-enabled with
--oversized-numbers
- Support for unsized number literals exceeding the standard-imposed 32-bit
limit can be re-enabled with
- Input source files are now decoded as UTF-8 on all platforms, with transcoding failures tolerated, enabling reading files encoded using other ASCII supersets (e.g., Latin-1)
New Features
- Added support for non-ANSI style port declarations where the port declaration is separate from the corresponding net or variable declaration
- Added support for typed value parameters declared in parameter port lists
without explicitly providing a leading
parameter
orlocalparam
marker - Added support for tasks and functions with implicit port directions
- Added support for parameters which use a type-of as the data type
- Added support for bare delay controls with real number delays
- Added support for deferred immediate assertions
Other Enhancements
- Explicitly-sized number literals with non-zero bits exceeding the given width
(e.g.,
1'b11
,3'sd8
,2'o7
) are now truncated and produce a warning, rather than yielding a cryptic error - Number literals with leading zeroes which extend beyond the width of the
literal (e.g.,
1'b01
,'h0_FFFF_FFFF
) now produce a warning - Non-positive integer size casts are now detected and forbidden
- Negative indices in struct pattern literals are now detected and forbidden
- Escaped vendor block comments in macro bodies are now tolerated
- Illegal bit-selects and part-selects of scalar struct fields are now detected and forbidden, rather than yielding an internal assertion failure
Bug Fixes
- Fixed parsing of sized ports with implicit directions
- Fixed flattening of arrays used in nested ternary expressions
- Fixed preprocessing of line comments which are neither preceded nor followed by whitespace except for the newline which terminates the comment
- Fixed parsing of alternate spacings of
@(*)
- Fixed conversion of interface-based typedefs when used with explicit modports, unpacked arrays, or in designs with multi-dimensional instances
- Fixed conversion of module-scoped references to modports
- Fixed conversion of references to modports nested within types in expressions
- Fixed assertion removal in verbose mode causing orphaned statements
v0.0.8
Future releases will have complete change logs.