Repository navigation
chore(develop): sync master - #1121
Merged
Merged
Conversation
Before analysis, every interface is expanded into the modules that use it, as syntax-guided source edits like the package inlining. An interface instance becomes renamed signals, localparams and copies of its logic (run once per element for an instance array); an interface port becomes one port per member in the modport direction, plus parameters, localparams/typedefs in the module header and the imported functions. Ports without a modport take the direction their module or a child writes, and modules with generic interface ports are copied per bound interface. The SystemVerilog arm of 30 Veryl interface cases now passes, including the ones where the Veryl analyzer drops interface logic. A new SystemVerilog suite group covers constructs Veryl does not emit; Verilator agrees on all of them, and Icarus 13.0, which cannot compile interface ports, gets a reviewed exclusion.
- Make a body `parameter` of an interface without a parameter port list overridable, in declaration order. - Expose members that imported functions assign as outputs. - Reject identifiers containing `$` in designs with interfaces. - Reject declarations that shadow an interface instance or port. - Allow interface ports that carry only parameters or functions. - Inherit the interface header across grouped ANSI ports. - Reject writes through a port without a modport inside a generate construct. - Reject bare handles in ordinary connections of a child instantiation.
- Rewrite interface references inside element selects, connection selects and instance array dimensions. - Declare the functions that interface declarations call with every expansion, and keep functions without member accesses for instance and port arrays; reject array logic calling one that accesses members. - Infer writes through output, inout and ref subroutine arguments, and reject writes inside module subroutines through a port without a modport. - Name instance array loop helpers so they cannot collide with items. - Reject escaped identifiers that are not simple identifiers.
- Count actuals of ordinary child output, inout and ref ports as writes, and reject members passed to modules whose port directions are unknown. - Resolve subroutine argument directions in the declaring scope. - Reject duplicate interface declarations and interfaces sharing a module name. - Copy only the items of an interface generate region.
- Track members that interface functions write through subroutine arguments. - Count subroutine names in the shadowing checks. - Reject duplicate modport declarations. - Reject package items of one name that reach a module from two packages through interface imports, or that a module declaration hides.
- Resolve interface handles by their declaring generate block, so sibling blocks may declare instances of one name. - Resolve the qualifier of a qualified subroutine call to its interface. - Let a module call only the functions its modport imports. - Carry compilation-unit imports that an interface relies on into modules of other files. - Insert generic module copies beside the original module.
…ate items - Wrap the items replacing a bare generate item in a block. - Copy a compilation-unit import that follows the consuming module. - Resolve unqualified package calls only through visible imports. - Drive members through a modport port only for imported functions that the module or a child calls. - Reject enum types anywhere in an interface.
…dports - Resolve a port name shadowed by a nested interface instance lexically when inferring port directions. - Validate modport members and imported functions. - Keep implicit named connections to ordinary ports of interface-bearing children. - Check package-import collisions only against declarations outside subroutines and procedural blocks. - Reject member references in declarations that a port carries, keep members passed for imported functions inaccessible, and emit header imports before an added parameter port list.
…ations - Treat the destination of $readmemh and $readmemb as a write. - Record every member of a writable concatenation actual, outside selects. - Resolve unqualified package calls with the imports of the call's lexical scope.
… items - Reject an implicit net that a continuous assignment declares in an interface. - Treat memory loads in interface functions as member writes. - Reject a member or function listed twice in one modport.
…larations - Resolve the interface of a call qualifier at the call's scope. - Reject duplicate interface-scope declarations and unknown parameter overrides of interface instances. - Separate the expansions of instances declared together. - Check package-import collisions against module-scope imports only.
…-file macros - Resolve compilation-unit subroutines only in the caller's source file. - Ignore module type names of instantiations when scanning for handles. - Reject copying an interface that uses macros into another source file.
…eferences - Resolve every generic port of a clone from its bindings when inferring directions, and key expansions by them. - Exclude struct and union members from handle and declaration scans. - Reject macros copied before their definition, references to implicit generate block names, hierarchical references to instances through generate blocks, and extra empty interface connections.
- Pass a child's generic-port bindings to every expansion of the child. - Reject macros and compiler directives in expanded interfaces, and compilation-unit items an interface uses from another file or an earlier module. - Reject repeated parameter overrides of interface instances and omitted named interface-port connections. - Limit the generate-qualified instance check to generate block qualifiers.
- Ignore qualified names when detecting compilation-unit references. - Detect directives outside comments and string literals only. - Require the whole qualifier chain of a generate-qualified use to name generate blocks. - Always copy compilation-unit imports an interface uses into the module.
Celox-Sync-Automation: true
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bring stable-trunk changes into the Veryl HEAD compatibility lane.
This PR is managed automatically through a dedicated synchronization branch so the develop merge queue never holds
masteritself as a pull request head. A conflict is actionable and must be resolved without replacing the Veryl HEAD dependency ondevelop.