Skip to content

[ExportVerilog] Add Emission Option for Unique Case-insensitive Names in Module Scope #4561

Open
@seldridge

Description

@seldridge

Some lint tools are unhappy if there are any names which conflict ignoring case. See STARC-1.1.1.5 (page 14 of https://picture.iczhiku.com/resource/eetop/WHKEgQWrYgOkYcnv.pdf). While this rule is clearly, clearly intended for human-written Verilog and not compiler-generated Verilog, it is on by default in some lint tools.

Add an emission option for ExportVerilog/PrepareForEmission that will unique names within a module ignoring case. This should include the module name in the check.

E.g., in the following, everything conflicts when ignoring case:

module {
  hw.module @Foo(%Foo: i1) -> (foo: i1) {
    %FOO = sv.wire  : !hw.inout<i1>
    %0 = sv.read_inout %FOO : !hw.inout<i1>
    sv.assign %FOO, %Foo : i1
    hw.output %0 : i1
  }
}

Currently this produces:

module Foo(
  input  Foo,
  output foo);

  wire FOO = Foo;
  assign foo = FOO;
endmodule

Instead, this should produce something like:

module Foo(
  input  Foo_0,
  output foo_1);

  wire FOO_2 = Foo_0;
  assign foo_1 = FOO_2;
endmodule

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions