如何在VHDL中使用带相邻下划线标识符的verilog模块
我有一个来自外部供应商的verilog模块。我想用VHDL来包装它 问题是verilog模块包含的标识符名称中有相邻的下划线。VHDL似乎不允许这样做。当然,我可以将verilog模块包装到另一个verilog模块中,然后将其包装到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
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;