混合语言支持
介绍
AMD Vivado™合成支持VHDL和Verilog混合语言项目,但另有说明。
VHDL和Verilog的混合
组成项目的VHDL和Verilog文件在唯一的HDL项目文件中指定。这个用于混合VHDL和Verilog的规则如下:
•VHDL和Verilog的混合仅限于设计单元(单元)实例化。
•Verilog模块可以从VHDL代码实例化,VHDL实体也可以实例化来自Verilog代码。不支持VHDL和Verilog之间的其他混合。例如,您无法将Verilog源代码直接嵌入VHDL源代码中。
•在VHDL设计中,允许在Verilog模块的边界。在Verilog设计中,允许在到VHDL实体或配置的边界上使用任何类型、参数和端口。看见VHDL和Verilog边界规则。
•Vivado合成在HDL精化过程中将VHDL设计单元绑定到Verilog模块。
实例化
对于实例化,适用以下规则:
•基于默认绑定的组件实例化用于将Verilog模块绑定到VHDL设计单元。
•对于VHDL中的Verilog模块实例化,Vivado synthesis不支持:
○ 配置规范
○ 直接实例化
○ 组件配置
Verilog中VHDL的实例化
要在Verilog设计中实例化VHDL设计单元,请执行以下操作:
1.使用与要声明的VHDL实体相同的名称声明模块名称实例化(可选地,后面跟一个体系结构名称)。
2.执行正常的Verilog实例化。
用VHDL实例化Verilog
要在VHDL设计中实例化Verilog模块,请执行以下操作:
1.声明与要实例化的Verilog模块具有相同名称的VHDL组件。
实例化Verilog模块时不支持VHDL直接实体实例化。
2.注意区分大小写。
3.实例化Verilog组件,就像实例化VHDL组件一样。
•使用VHDL将组件从特定库绑定到特定设计单元不支持配置声明。只有默认的Verilog模块绑定是支持。
•唯一可以在VHDL设计中实例化的Verilog结构是Verilog模块。
VHDL代码看不到其他Verilog构造。
•在阐述过程中,Vivado synthesis将所有受默认绑定的组件视为与相应组件名称具有相同名称的设计单元。
•在绑定过程中,Vivado synthesis将组件名称视为VHDL设计单元名称并在逻辑库工作中查找。
○ 如果Vivado synthesis找到VHDL设计单元,则Vivado synthesis将其绑定。
○ 如果Vivado synthesis没有找到VHDL设计单元,则将组件名称视为Verilog模块名称,并使用区分大小写的搜索进行搜索。
Vivado
synthesis选择并绑定与名称匹配的第一Verilog模块。
•因为库是统一的,所以与VHDL设计单元同名的Verilog单元不能存在于同一逻辑库中。
•新编译的单元格或单元会覆盖以前编译的单元格或者单元。
实例化限制
Verilog中的VHDL
在Verilog中实例化VHDL设计单元时,Vivado合成有以下限制单元
•Verilog设计中唯一可以实例化的VHDL结构是VHDL实体。不其他VHDL构造对于Verilog代码是可见的。Vivado综合使用实体架构对作为Verilog VHDL边界。
•使用明确的端口关联。在端口映射中指定正式和有效的端口名称。
•所有参数都在实例化时传递,即使它们没有变化。
•覆盖是命名的,而不是排序的。参数覆盖通过实例化发生,而不是通过defpas。
可接受的示例
VHDL中的Verilog
在VHDL中实例化Verilog模块时,Vivado合成有以下限制设计单位:
•使用明确的端口关联。在端口映射中指定正式和有效的端口名称。
•所有参数都在实例化时传递,即使它们没有变化。
•参数覆盖是命名的,而不是排序的。参数覆盖通过发生实例化,而不是通过defpas。
•在VHDL中实例化Verilog模块时,仅支持组件实例化。
不支持直接实体实例化。
VHDL和Verilog库
对于混合使用VHDL和Verilog的库,库的处理方式如下:
•VHDL和Verilog库在逻辑上是统一的。
•VHDL和Verilog都可以使用默认的编译工作目录。
•混合语言项目在设计中接受搜索统一逻辑库的搜索顺序单位(单元格)。Vivado合成在细化过程中遵循此搜索顺序来选择和绑定VHDL实体或Verilog模块到混合语言项目。
VHDL与Verilog边界规则
VHDL和Verilog的边界规则如下:
•VHDL和Verilog之间的边界在设计单元级别强制执行。
•VHDL实体或体系结构可以实例化Verilog模块。请参阅中的实例化VHDL请参阅以下部分中的Verilog。
•Verilog模块可以实例化VHDL实体。请参阅在VHDL中实例化Verilog。
结合
Vivado合成在制作过程中执行绑定。在绑定过程中,请执行以下操作发生
1.Vivado synthesis搜索与实例化的具有相同名称的Verilog模块具有用户指定的统一逻辑库列表和用户指定的顺序。
2.Vivado synthesis忽略模块实例化中指定的任何架构名称。
3.如果Vivado synthesis找到Verilog模块,synthesis会绑定名称。
4.如果Vivado synthesis没有找到Verilog模块,则将Verilog模块视为VHDL
实体,并使用区分大小写的方法搜索与该名称匹配的第一VHDL实体
在统一逻辑库的用户指定列表或用户指定顺序中搜索VHDL实体。这假设VHDL设计单元与扩展标识符一起存储。
Generics支持
Vivado synthesis支持以下VHDL通用类型及其Verilog等效类型混合语言设计:整数、实数、字符串、布尔值。
端口映射
Vivado synthesis支持Verilog中实例化的VHDL和Verilog实例化的端口映射
在VHDL中。
Verilog中VHDL的端口映射实例化
当VHDL实体在Verilog模块中实例化时,正式端口可以具有以下内容
特点:
•允许的方向:入、出、出
•不支持的指令:缓冲区、链接
•允许的数据类型:bit、bit_vector、std_logic、std_ulogic、std_logic_vector,
std_ulogic_vector
VHDL中Verilog的端口映射实例化
当Verilog模块在VHDL实体或体系结构中实例化时,正式端口可以具有
具有以下特征:
•允许的方向有:输入、输出和输出。
•允许的数据类型为:wire和reg
•Vivado合成不支持:
○ 连接到Verilog中的双向传递选项。
○ 用于混合语言边界的未命名Verilog端口。
使用等效的组件声明连接到Verilog模块中区分大小写的端口。Vivado synthesis假设Verilog端口都是小写的。