如何使用Modelsim在编译时定义通用值?

时间:2015-04-15 18:52:11

标签: generics compilation vhdl modelsim

是否可以使用Modelsim在COMPILE时定义generic值?

我需要编译一个包含generate语句的文件,这些语句已关闭& on on my generic boolean。

的值

我没有成功尝试以下编译语句,其中is_primary是布尔变量名:

vcom -work work -is_primary=true file_name.vhd

我找到了类似的模拟语法(vsim),但我没有找到为generic定义vcom的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

IEEE Std 1076-2008,6.5.6.2通用条款

  

泛型提供了一个信息通道,用于将信息传递给其环境中的块,包或子程序。

14.3.2通用条款

  

通用条款的详细说明包括按照给定的顺序详细说明该条款中包含的每个等效单一通用声明。通用声明的详细说明确定随后可以引用泛型。

这里的要点是,仿制药是精心制作而非分析的结果。

ModelSim SE命令参考手册软件版本10.2c:

  

vcom

     

vcom命令将VHDL源代码编译到指定的工作库(或默认情况下为Commands工作库)。

这是VHDL的分析,同样来自IEEE Std 1076-2008:

<强> 13。设计单位及其分析
13.1设计单位

  

独立分析某些构造并将其插入设计库中;这些结构称为设计单元。一个或多个设计单元依次包含设计文件。

因此,Modelsim的vcom命令执行VHDL分析阶段,有点类似于创建目标文件并将其归档到库中。

返回到Modelsim命令参考:

  

VSIM
  ...
  您可以模拟VHDL配置或实体/体系结构对,Verilog模块或配置,SystemC模块或优化设计。如果指定VHDL配置,则指定体系结构无效。在详细说明期间,vsim确定自上次编译以来源是否已被修改。

modelsim vsim命令执行详细说明并提供传递通用值的方法:

  

•-g = ...

     
    

(可选)为所有指定的VHDL泛型和Verilog参数赋值,这些参数在通用映射,实例化或通过defparams(例如顶级泛型/参数和泛型/参数)中未接收到显式值默认值)。

  

因此,Modelsim的vsim命令提供了多种功能,链接和加载(一起进行VHDL精化)和运行(模拟)。

所以问题是,在模拟时间(vsim)使用时,Modelsim将在分析时(vcom)提供的信息存储在哪里?

根据定义,您可以将其手动存储在脚本中,但VHDL还具有在分析时提供通用值的机制。

VHDL语言解决方案

这些是泛型的默认值 的 6.5.6.2

  

通用常量的值可以由通用关联列表中的对应实际值指定。如果没有为给定的正式泛型常量指定这样的实际值(因为正式泛型不相关或因为实际是打开的),并且如果为该泛型指定了默认表达式,则此表达式的值是泛型的值。

或者
3.4配置声明:

  

组件实例与设计实体的绑定由配置规范执行(见7.3);此类规范出现在创建相应组件实例的块的声明部分中。但是,在某些情况下,将未指定组件实例的绑定保留在给定块中并将此类规范推迟到以后可能是适当的。配置声明提供了指定此类延迟绑定的机制。

7.3.2绑定指示
7.3.2.1一般

  

绑定指示将组件的实例与特定设计实体相关联。它还可以将实际与实体声明中声明的形式相关联。   binding_indication :: =

     
    

[使用entity_aspect]
    [generic_map_aspect]
    [port_map_aspect]

  

但配置是否必要?

您还可以注意到,您没有合成测试平台,而是在测试平台中测试的设计单元的顶层,它告诉我们您可以使用泛型的默认值来提供用于合成的值和在测试平台中为特定组件实例化或直接实体实例化中的泛型提供任何必要的覆盖值,而不更改任何设计文件:

11.7组件实例化声明
11.7.1一般

  

...通用映射方面(如果存在)可选地将单个实际与相应组件声明或实体声明中的每个本地通用(或其成员)相关联。每个本地通用(或其成员)最多应关联一次。类似地,端口映射方面(如果存在)可选地将单个实际与相应组件声明或实体声明中的每个本地端口(或其成员)相关联。每个本地端口(或其成员)最多应关联一次。通用映射和端口映射方面在6.5.7.2和6.5.7.3中描述。

归结为什么是你在VHDL语言详细时间问题的工具分析时间解决方案之后,并且有VHDL语言处理它的方式在所有计数中都不会影响你的设计规范你综合顶层或设备设计规范而不是你的测试平台。

因为您没有实例化您的测试平台,所以它不需要通用子句 - 没有通用的地图方面。用于将泛型传递给特定实例化组件或实体的任何常量都可以在测试平台的体系结构声明部分的实体声明部分中声明。

这样做也可以确保便携性。

14.2详细设计层次结构

  

实现可以允许(但不是必须)允许设计层次结构的根设计实体具有泛型和端口。如果实现允许这些顶级接口对象,它可能会限制其允许的表单(即,是否允许它们是接口类型,子程序,包或对象),并且在接口对象的情况下,它们允许的类型和模式以实现定义的方式。

     

类似地,顶级接口对象与层次结构的外部环境相关联的方式也由支持顶级接口对象的实现定义。

设计层次结构包含您的测试平台,并且最后一段允许Modelsim的vsim具有将值传递给泛型的机制。

答案 1 :(得分:0)

泛型只是通过通用列表传递给实体的常量。 你不编译一个toplevel然后编译另一个toplevel,你编译一个顶层,然后编译两个实例化的测试平台。你将一个连接到true,另一个连接到false。完成。

U0:实体顶层       通用地图(is_primary =&gt; true)       端口映射(在此处插入端口);

U1:实体顶层       通用地图(is_primary =&gt; false)       端口映射(在此处插入端口);

在您的层次结构中向下,但在详细说明之前,您无法检查您的泛型。运行你的sim 1 ps然后去检查它们。