如何在VHDL中使用带相邻下划线标识符的verilog模块

如何在VHDL中使用带相邻下划线标识符的verilog模块,vhdl,verilog,Vhdl,Verilog,我有一个来自外部供应商的verilog模块。我想用VHDL来包装它 问题是verilog模块包含的标识符名称中有相邻的下划线。VHDL似乎不允许这样做。当然,我可以将verilog模块包装到另一个verilog模块中,然后将其包装到VHDL模块中,但是没有办法避免它吗 我写了一个小例子来说明: Verilog: module underscore ( test__in, test__out ); input test__in; output test__out; assign t

我有一个来自外部供应商的verilog模块。我想用VHDL来包装它

问题是verilog模块包含的标识符名称中有相邻的下划线。VHDL似乎不允许这样做。当然,我可以将verilog模块包装到另一个verilog模块中,然后将其包装到VHDL模块中,但是没有办法避免它吗

我写了一个小例子来说明:

Verilog:

module underscore (

  test__in,
  test__out

);

input test__in;
output test__out;

assign test__out = test__in;

endmodule
VHDL:


由于相邻的下划线,VHDL代码无法编译。

这不是模拟器工具的错误,VHDL是由LRM这样定义的。Verilog和VHDL之间还有其他类别的名称不兼容。VHDL对基本标识符不区分大小写,基本标识符也必须以字母开头,以字母或数字结尾。请注意,扩展标识符可以在两个转义反斜杠之间包含任何图形字符,这与SystemVerilog的转义标识符不同,后者在到达空白处时结束。您可能需要创建一个verilog包装文件来处理转换。VHDL和Verilog(或任何两种语言)之间的迭代必须使用两种语言之间共享的约定。如果遇到更混乱的规则,如扩展标识符,您可能需要在两侧创建一个包装以获得通用性。这不是模拟器工具的缺陷,VHDL是由LRM这样定义的。Verilog和VHDL之间还有其他类别的名称不兼容。VHDL对基本标识符不区分大小写,基本标识符也必须以字母开头,以字母或数字结尾。请注意,扩展标识符可以在两个转义反斜杠之间包含任何图形字符,这与SystemVerilog的转义标识符不同,后者在到达空白处时结束。您可能需要创建一个verilog包装文件来处理转换。VHDL和Verilog(或任何两种语言)之间的迭代必须使用两种语言之间共享的约定。如果遇到更混乱的规则,比如扩展标识符,您可能需要在两侧创建一个包装器以获得通用性。
library IEEE;
use IEEE.std_logic_1164.all;

entity tb_underscore is
end entity;

architecture rtl of tb_underscore is

 signal test_in: std_logic;
 signal test_out: std_logic;

begin

  i_underscore: entity work.underscore port map (

      test__in => test_in,
      test__out => test_out

    );


end architecture;