Commit Graph

804 Commits

Author SHA1 Message Date
Zachary Snow ed09fe88cf support assignments within expressions 2022-03-12 23:57:17 +01:00
Zachary Snow 4ced649a87 convert do while loops 2022-03-11 11:32:54 +01:00
Zachary Snow 1315bed81c support cycle delay range in sequence expressions 2022-03-09 18:38:30 +01:00
Zachary Snow e6e96b622b support for edge event 2022-02-16 12:01:58 +01:00
Zachary Snow 3db72c4c2d logic conversion ignores LHSs in procedural assignment senses 2022-02-15 17:49:50 +01:00
Zachary Snow bcc404b8ae bump license year 2022-02-12 14:23:42 +01:00
Zachary Snow 96cfe18ca7 pass through support for functions with output ports 2022-02-07 23:38:11 +01:00
Zachary Snow eb42042c1c pass through support for DPI imports and exports 2022-01-25 20:52:14 -07:00
Zachary Snow 2e43dfeeaa fix failed indirection of unassigned function results 2022-01-23 22:40:43 -07:00
Zachary Snow 4c3dcf5219 support for enumerated type ranges 2021-12-10 13:16:34 -07:00
Zachary Snow 03a913ad65 fix illegal removal of width-extending `+ 0` and `* 1` 2021-11-15 21:26:08 +01:00
Zachary Snow 5105ccbb39 use scoped errors in struct conversion 2021-10-17 21:40:12 -06:00
Zachary Snow c843efd504 add UnbasedUnsized to --exclude help message 2021-10-13 20:18:15 -06:00
Zachary Snow 150b7f2af1 enum item conflict raises scoped error 2021-10-10 22:04:51 -06:00
Zachary Snow fd64d4e3f2 remove two unreachable LHS conversion errors 2021-10-09 21:18:44 -06:00
Zachary Snow d1d81eb8d6 use scoped errors in interface conversion 2021-10-07 21:06:45 -06:00
Zachary Snow 84edbae503 preliminary scoped errors with approximate source location
- scoped traversals can now raise errors which contain the path of the
  current scope and an approximate source location based on preceding
  trace comments, if available
- initially, this new error messaging has only been added for the
  illegal size cast checks in the TypeOf and Cast conversions
- error suite tests can provide a verbose mode expected source location
2021-10-06 22:17:41 -06:00
Zachary Snow 3abe12dfbd support exclusion of the unbased unsized conversion 2021-10-03 15:00:59 -06:00
Zachary Snow ff241115c4 forbid bit-selects and part-selects of scalar struct fields 2021-09-27 21:52:37 -06:00
Zachary Snow 814f96597e fix assertion removal in verbose mode causing orphaned statements 2021-09-24 12:36:49 -04:00
Zachary Snow 55afc58f73 simplify interface parameter override logic 2021-09-20 23:49:43 -04:00
Zachary Snow b1f1b822e9 fix conversion of interface-based typedefs 2021-09-18 21:46:32 -04:00
Zachary Snow 6788ecbf82 fix interface traversal of exprs in types, and support module-scoped modport refs 2021-09-18 21:01:28 -04:00
Zachary Snow e42fbfa23c restructure scoper run and eval interface 2021-09-16 23:35:16 -04:00
Zachary Snow e169c907f4 fix preprocessing of line comments not preceded by whitespace 2021-09-13 20:46:59 -04:00
Saw Xue Zheng 8ecd2c6e52
fix common_module_item to include deferred_assertion_item (#178) 2021-09-11 15:22:04 -04:00
Zachary Snow 88d632fb14 restrict implicit logic to output ports 2021-09-07 13:06:24 -04:00
Zachary Snow 598b4260b6 apply port standardization to tasks and functions 2021-09-06 21:48:08 -04:00
Zachary Snow 95c2bc996c support for common non-ANSI style port declarations
Specifically, support has been added for non-ANSI style port
declarations where the port declaration is separate from the
corresponding net or variable declaration.
2021-09-06 21:10:49 -04:00
Zachary Snow 407ba59042 add internal --dump-prefix utility 2021-09-05 19:54:36 -04:00
Zachary Snow d335d2ff25 use UTF-8 across all platforms
- all inputs are now decoded as UTF-8, regardless of the platform
- decoding failures are now tolerated via transliteration given errant
  characters are generally expected to appear in comments
2021-08-30 10:39:49 -06:00
Zachary Snow bceec39339 standardize input handle logic 2021-08-26 14:26:22 -06:00
Zachary Snow 40f66e0212 add type signatures for all parser rules
This works around a compilation performance regression in GHC 9.0.1:
https://gitlab.haskell.org/ghc/ghc/-/issues/20261. This also speeds up
compilation on other versions.
2021-08-24 09:20:55 -06:00
Zachary Snow da2d4117f2 specialized parsing for parameter port lists
This adds support for typed valued parameters declared in parameter port
lists without explicitly providing a leading `parameter` or `localparam`
marker.
2021-08-20 18:08:14 -06:00
Zachary Snow 77ee49a80e allow space between @ and * 2021-08-19 16:01:45 -06:00
Zachary Snow 47c05c04b8 support parameters which use a type-of as the data type 2021-08-18 13:33:40 -06:00
Zachary Snow bf029068af move exprToType utility outside to language module 2021-08-18 13:07:42 -06:00
Zachary Snow 9acdb848c9 ensure arrays used in nested ternary expressions are properly flattened 2021-08-18 10:25:14 -06:00
Zachary Snow 7ccab1c70a fix parsing of sized ports with implicit directions 2021-08-17 10:27:17 -06:00
Zachary Snow 7325bd7976 support bare delay controls with real number delays 2021-08-17 09:53:28 -06:00
Zachary Snow cd45696ace parse alternate spacings of sense star 2021-08-16 22:39:33 -06:00
Zachary Snow c17d859988 tolerate escaped vendor comments within macros 2021-08-16 18:22:04 -06:00
Zachary Snow 581a7911de support for deferred immediate assertion statements 2021-08-16 17:50:23 -06:00
Zachary Snow 4ded2a598d apply implicit port directions to tasks and functions 2021-08-15 12:25:32 -07:00
Zachary Snow 30acc3e3f9 fix spacing of as-patterns for future GHC upgrade 2021-08-12 16:13:12 -06:00
Zachary Snow 536eba46b9 use bimapM for mapBothM 2021-08-10 09:48:13 -06:00
Zachary Snow 306d71334b refactor sizing and truncation of integer literals
- use iverilog's -gstrict-expr-width throughout test suite
- add warnings for excess bits or padding zeroes in number literals
- add new --oversized-numbers parameter to retain support for unsized
  numbers wider than 32 bits
- localized use of oversized numbers to new truncate test suite which
  verifies the behavior of both modes, and compares against the known
  behavior of iverilog
2021-08-09 22:10:29 -06:00
Zachary Snow 5e5ddca444 fix broken two's complement logic 2021-08-08 21:36:36 -06:00
Zachary Snow 59d37468a4 fix internal interpretation of negative number literals
- detect and forbid non-positive size casts
- detect and forbid negative struct pattern literal indices
- avoid invalid constant folding of negative based literals
2021-08-07 21:11:35 -06:00
Zachary Snow 7e9fb3379c refactor internal frontend interface
- add unified frontend configuration record to make adding future
  options easier
- use ExceptT throughout, rather than using runExceptT at internal
  boundaries
2021-08-06 22:23:34 -06:00
Zachary Snow c5691d9500 move --pass-through to the conversion option group 2021-08-05 22:16:39 -06:00
Zachary Snow 2a551e1059 upgrade to GHC 8.10.4
- upgrade to happy 1.20
- placate GHC warning on version fallback
- fix stack sdist failure
2021-07-30 13:54:05 -04:00
Zachary Snow fd96b8a710 unbased unsized conversion inlines module stubs
- support ports with sizes which depend on constant functions
- restore package item injection utility to package conversion module
- additional unbased unsized conversion test coverage
2021-07-29 19:54:20 -04:00
Zachary Snow 37c8938eff attempt number cast simplification after substitution 2021-07-29 13:11:25 -04:00
Zachary Snow 1aa30ea813 allow genvars to be shadowed 2021-07-27 19:17:03 -04:00
Zachary Snow e0d425d976 default implicit output ports to logic 2021-07-27 17:20:09 -04:00
Zachary Snow 93ba497c12 allow simple unbased-unsized RHSs to sign extend 2021-07-26 22:00:00 -04:00
Zachary Snow 17b01b1683 simplify mod 1 to 0 2021-07-26 13:03:01 -04:00
Zachary Snow 5345a72c9e elaborate `wire integer` to `wire signed [31:0]` 2021-07-25 15:37:27 -04:00
Zachary Snow 121fea5aec avoid unnecessary casts on substituted hierarchical constants 2021-07-24 17:01:17 -04:00
Zachary Snow 46be0edbdf simplify cast scoper lookup and removal 2021-07-24 16:41:31 -04:00
Zachary Snow 1311e449fe fix errant expr resolution flagging
- references to other instances are no longer flagged
- special handling for genvars to avoid flagging and modport scoping
- interface inlining visits expressions in declarations
- Scoper has interface for removing entries
2021-07-23 19:59:26 -04:00
Zachary Snow 1e6fa7b858 fix looping simplification on unfolded based literals 2021-07-22 12:45:53 -04:00
Zachary Snow b2b6f8f8f2 fix two paramtype edge cases
- don't keep unused template modules even if they are fully-specified
- don't reduce modules with unbound type parameters
2021-07-22 00:58:19 -04:00
Zachary Snow ab867465da fix handling of explicitly typed struct patterns in other contexts 2021-07-21 14:31:43 -04:00
Zachary Snow dde734be26 handle params with unpacked typenames 2021-07-21 11:57:04 -04:00
Zachary Snow b2fe865e17 fix interface modport substitution strategy
The interface conversion no longer substitutes parameters immediately,
instead fully scoping modports and allowing hierarchical constants to be
resolved separately. This fixes an issue where struct parameters could
lose their type information during substitution. The conversion also now
handles renaming references to the module or interface top-level scope.
2021-07-20 22:36:59 -04:00
Zachary Snow 67c0d22a64 handle functions with unpacked return typenames 2021-07-20 17:38:04 -04:00
Zachary Snow 8a554113c8 don't process global items when looking up identifiers in packages 2021-07-19 12:33:11 -04:00
Zachary Snow 56c597e35e support explicitly typed struct patterns 2021-07-19 11:42:36 -04:00
Zachary Snow 836536c362 remove newly unneeded Ord instances 2021-07-18 20:19:39 -04:00
Zachary Snow 23d82c621f paramtype conversion no longer sorts by type 2021-07-18 20:12:06 -04:00
Zachary Snow 16a13ee915 fix cascaded generate block cast and scope resolution
- scoper item injection can no longer affect generate scoping
- cast conversion injects functions into the top level when possible
- cast conversion considers loop variables to be local
- `else if` generate blocks are still scopes at the current level
2021-07-17 22:56:14 -04:00
Zachary Snow eda9a34ad5 add simplification assumption for reversed sized ranges 2021-07-16 16:32:11 -04:00
Zachary Snow dd951740e7 remove some dead code 2021-07-16 12:30:35 -04:00
Zachary Snow d6d3938d20 fix codegen for assertion property and sequence expressions
- updated representation and added codegen for sequence match items
- fix incorrect codegen for `iff` property expression
2021-07-16 09:54:05 -04:00
Zachary Snow 54ea7d55d5 simplify automatic procedural block naming 2021-07-16 09:19:38 -04:00
Zachary Snow 57ef23ef73 fewer conversion phases in main loop
- moved 4 phases to initial set and 3 to final set
- fix synthetic unnamed genblocks preventing name resolution
- asgnop conversion folds in unisub when possible
2021-07-15 21:37:44 -04:00
Zachary Snow a2b99fa9dd module item statement traversals only visit the top level 2021-07-15 18:05:47 -04:00
Zachary Snow 2eee536f62 enum conversion to handles additional scope conflicts
- substitute enum item values directly into usage sites rather than
  creating synthetic localparams
- substitution handles shadowing of expressions in enum item values
- disconnected scopes can reference conflicting enum items
2021-07-15 11:50:01 -04:00
Zachary Snow bfd0cee0dc improved handling of procedural for loops
- convert loops with no or many incrementations
- restrict AST node to only contain traditional initializations
- parser elaborates for loop decls into a synthetic block
- decl list codegen is now specific to parameter decl lists
- update jump conversion special cases for new representation
- first experiments with bimapM
2021-07-14 15:50:12 -04:00
Zachary Snow 69e66a215e fix inefficiencies in logic conversion
- don't evaluate AST after procedural assignment collection
- don't use State monad during rewrite
- use Writer rather than State for procedural assignment collection
- use Scoper access generation shortcut utility
- cleanup as-patterns and legacy logic
2021-07-13 22:18:03 -04:00
Zachary Snow 5b2165d7a8 fix inefficiencies in unpacked array conversion
- don't evaluate AST after depth collection
- don't use State monad during rewrite
- add Scoper utility for generating accesses without inserting element
- cleanup as-patterns and unnecessary verbosity
2021-07-13 21:25:09 -04:00
Zachary Snow 9bc946ce7e support streaming concatenations in task and function arguments 2021-07-12 19:32:50 -04:00
Zachary Snow 2e06d45ca0 fix inadvertent duplicate declaration generation
Disabling the package item injection routine used in the enum conversion
when there were no items to inject exposed cases where conversions would
generate duplicate declarations. The hierarchical constant and param
type conversions were trivially affected. The package conversion could
inject class items within a generate region and then re-inject them
outside of that generate region. The package conversions now uses an
upgraded generate region flattening utility to ensure injected class
items are seen. This also includes coverage for a conflict which
occurred even without the enum conversion change.
2021-07-12 13:44:56 -04:00
Zachary Snow ac548cacfc improved source position trace comments
- remove needless comments generated during interface conversion
- filter null statements even in verbose mode
- hoist trace comment statements if doing so would prevent the need to
  wrap a task or function body in a block
- add traces for global declarations
- add traces for parameter declaration lists
- add traces for module items within generate blocks
- avoid generating duplicate traces before declarations
2021-07-11 20:43:30 -04:00
Zachary Snow 8f0f8b4afd explicit decl type and expr traversals
- fix int type conversion not visiting function return type expressions
- add node-based traversal for decls visiting top level types and exprs
- explicit expr and type recursion in package ident resolution
- expose mapBothM traversal helper
- avoid double-visiting of decl types in certain conversions
2021-07-11 16:57:33 -04:00
Zachary Snow 1de9b69efb handle size casts of string parameters 2021-07-10 21:39:22 -04:00
Zachary Snow 91a45ce234 constant folding evaluates localparam casts where possible 2021-07-10 19:58:19 -04:00
Zachary Snow a6b872bf57 don't pack arrays passed to system tasks
- avoid packing memories used with read mem tasks
- fix detection of $readmem[hb] in logic conversion
2021-07-10 19:42:06 -04:00
Zachary Snow 5b063ec968 pack task and function arguments 2021-07-10 17:54:26 -04:00
Zachary Snow 2f7128428e fix errant untyped localparam substitution 2021-07-10 14:38:06 -04:00
Zachary Snow 103db6741f constant folding for size casts of number literals
- standardize number casting
- fix extension of casts of unsized literals to 32 bits
2021-07-10 12:38:55 -04:00
Zachary Snow 3eefd03c8d additional declaration parsing errors
- general refactoring in decl parsing
- restrict charge strength to trireg
- require const vars to be initialized
- forbid const net declarations
- disallow run-on declarations in packages and classes
2021-07-09 15:41:17 -04:00
Zachary Snow 11dbf1a46a remove dead code in ubased unsized conversion 2021-07-09 12:45:20 -04:00
Zachary Snow 183580632c restrict unbased unsized bit representation 2021-07-09 12:21:46 -04:00
Zachary Snow 789afd1bb2 error on size cast with non-integer size 2021-07-09 10:25:18 -04:00
Zachary Snow 1f03c64e9f convert Token to use record syntax 2021-07-08 18:54:48 -04:00
Zachary Snow 91e3ac0fb1 normalize trailing whitespace in escaped identifiers 2021-07-08 17:17:45 -04:00
Zachary Snow 9aa8b7033e fix handling of comments, quotes, and trailing whitespace in macro arguments 2021-07-08 16:30:02 -04:00