Cadence中denalirc的用法总结

本文档详述了VIP模型运行控制文件的使用和增强功能,包括使用模型和实例限定符、检查参数名称、使用保留字、包含文件、行连续、取消定义参数以及新模式参数的使用。新特性提供了更精确的参数设置和错误处理,允许更灵活的文件组织,并提高了仿真效率。此外,还介绍了如何处理错误消息和实例匹配优先级,以及如何通过示例组织和使用运行控制文件。
摘要由CSDN通过智能技术生成

VIP Run-Time Control (.denalirc) Features
Product Version 11.3
August 2016
Contents目录

1 Using Run-Time Control Files

1.1 Introduction

1.1.1 Existing Run-Time Control Operation

1.2 Enhancements

1.2.1 Using Model and Instance Qualifiers

1.2.2 Checking Parameter Name

1.2.3 Using Reserved Words

1.2.4 Including Files

1.2.5 Using Line Continuation

1.2.6 Undefining a Parameter

1.2.7 Using New Pattern Parameters

2 Run-Time Control Error Messages

2.1 Error Message Table

2.2 Multiple Pattern Match Warning

2.3 Messages to Help Locate Error Lines

3 Run-Time Control File Examples

3.1 Settings for Specific Instances and Models

3.1.1 Turning on History for Specific Instances

3.1.2 Priority of matching

3.1.3 Organizing Initialization Files by Model

3.1.4 Run-Time Control File Organization

1 运行控制文件的使用

1.1 引言

VIP模型运行控制是通过使用包含在运行控制文件中的参数设置进行管理的。这些文件提供了灵活的方式组织参数设置。运行时控制操作的几个新可用更新允许你更精确的运用这些设置。本文档提供了增强功能和现有操作的概述,因为大多数现有操作仍然可以向后兼容。

1.1.1 现有的运行控制操作

目前,运行时控制文件被称为.denalirc文件,这是一个特定的文件名,而不是一种文件类型。它可以简单地称为运行时控制文件。
.denalirc文件是一个文本文件,包含对VIP存储运行时选项的关键字-值对。安装中默认的$DENALI/.denalirc文件包含描述所有参数的注释。以#开头的行是注释,工具会忽略它。参数关键字不区分大小写,但它们的值可以区分大小写。
VIP使用.denalirc文件进行初始配置,如果没有找到同名文件,则使用默认设置。
VIP需要.denalirc配置文件来控制仿真过程中的模型行为。这些工具按顺序在以下位置查找.denalirc文件:

LocationDescription
$DENALI/.denalirc系统默认
~/.denalirc用户默认
./.denalirc指定仿真默认
$DENALIRC环境变量

如果设置了$DENALIRC环境变量,并且在指定路径中存在一个文件,则使用该文件。如果没有设置$DENALIRC(或者如果在指定位置没有找到该文件),那么仿真器将在当前目录中查找.denalirc,以此类推。
例如,如果您只想为特定的仿真更改一个设置,那么在工作目录中创建一个.denalirc文件来存储特定的仿真设置。
参数的格式如下:
parameter-name parameter-value
实例:
InitialMemoryValue RandomWithUpdate # update model with the random data so we get the same result for multiple reads使用随机数据更新模型,因此我们多次读取得到相同的结果'
在上面的例子中,一行中的空格会被忽略。

1.2 增强功能

运行控制文件操作有几个简单直观的新特性。升级后的运行控制操作的一些优点是:

  • 增强的运行控制文件语法
  • 由于文件处理对仿真性能的影响可以忽略不计
  • 未识别变量的错误信息,并且帮助定位错误行
  • 在运行时控制文件中有效的行在用户界面调用(例如TCL命令)中也有效
    本文档对以下特性进行了解释,并在需要的地方举例说明:
  • 使用模型和实例限定符
  • 检查参数名称
  • 使用保留字
  • 使用行连续
  • 包含文件
  • 取消定义一个参数
  • 使用新的模式参数

1.2.1 使用模型和实例限定符

通过使用限定符-instance和-model来指示参数定义的限定符,可以将运行控制文件专门应用于某些模型或实例。使用限定符来指定应用参数定义的实例的特定子集。
在参数值之后包含限定符,并在它们之后以下列格式列出实例或模型名:
parameter-name parameter-value [-instance instance-list] [-model model-list]
实例列表是一个以空格分隔的实例路径名或类似glob的模式列表。模型列表是一个以空格分隔的模型名称列表。当没有列表时,参数定义作为所有实例和模型的默认值。
DifferentialClockChecks on -model lpddr4 flash
上面一行表明对于lpddr4或flash的所有实例,differalclockchecks是打开的。
如果参数定义包含一个实例,或者一个模型列表,那么该定义将覆盖实例的默认定义,这些实例的名称与指定的名称或模式相匹配,并且其模型与指定的模型相匹配。
在指定实例列表时,可以通过在引号的路径名称中添加空格或其他特殊字符来处理转义名称。如果路径名还包含引号字符,可以用两个连续的引号字符来指定。

1.2.2 检查参数名字

参数名称将根据有效名称列表进行检查,任何无法识别的名称都将导致错误。带有无法识别参数的行将被忽略。参数名不区分大小写。

  • 每个参数都有一个与之相关联的类型。有效的类型有布尔型、整数型、浮点型、字符串型和时间型。可以定义其他自定义类型。
  • 检查参数值以确保它们是正确的类型。不适当的值将导致错误。
  • 对于布尔类型变量,可以使用任何标准布尔表示,如1/0、on/off、true/false、t/f、yes/no、y/n。这些布尔值不区分大小写。
  • 引号可以用来指定参数值字符串,这在大多数情况下是可选的。带引号的字符串可以使用单引号或双引号。然而,使用引号有一些条件。
    – 如果您希望值包含一些可能被解释为注释或保留字的内容,请使用引号。
    – 如果实例或模型名称包含空格,则使用引号。
    – 开始和结束引号不是字符串值的一部分。如果字符串值包含一个引号字符,可以用两个连续的引号字符来表示。例如, HistoryFile "That’“s All folks!”. 这里, History file 的名字是That’s all Folks!。

1.2.3 使用保留字

There are four reserved words that may not be used as the name or unquoted value of a run-time
control parameter. They are:有四个保留字不能用作运行时控制参数的名称或未加引号的值。它们是:

  • Include
  • -instance
  • -model
  • Undefine
    但是,您可以使用上面的单词之一作为带引号的字符串的一部分。例如,HistoryFile “-modle”。在示例中,“-model”是一个带引号的字符串,而不是关键字。

1.2.4 包含文件

It is now possible to have one run-time control file include other run-time control files by using the
include keyword in the following format:
现在可以通过以以下格式使用include关键字让一个运行控制文件包含其他运行控制文件:
include glob-like-filespec
术语"glob-like"意味着给定的字符串将按照unix风格的路径名称模式扩展。因此,给定的字符串可以包括环境变量名、波浪线、嵌套的shell命令等。如果global-like-filespec参数展开为多个文件路径,它将生成一条错误消息,并且不包含任何文件。下面是包含行的示例:
include $MY_INCLUDE_AREA/$MODEL/RunTimeControl.txt

1.2.5 使用行连续

行延续特性使其易于读取和维护运行控制文件。行延续字符是一个反斜杠(),它用在一行中的最后一个字符。当在行尾使用时,下一行将被视为行的延续,忽略反斜杠后面跟着一个新行的两个字符序列。例如,

InitialMemoryValue X -instance testbench.io \
testbench.i1 \
testbench.i2 \

如果反斜杠后面没有紧跟新行,则保留为反斜杠。
注意,行延续检测和处理先于注释检测。如果在开始注释的行末尾有一个反斜杠,则注释会继续到下一行。反斜杠不会被忽略,就像它是注释的一部分一样。在下面的例子中,一些反斜杠没有出现在行尾,注释会继续到下一行:

HistoryFile \george\histories\test1.his # this line uses a file path containing \
Blacklashes to demonstrate some backslashes \
That are not at the end of the line.

1.2.6 取消定义参数

参数定义扩充了当前的任何定义,但并不一定取代它。例如,一个文件中的ErrorMessages定义可以在某些情况下定义为On,而在其他情况下定义为Off。要完全删除一个参数的所有定义,可以使用undefine命令。
例如,未定义ErrorMessages命令将删除之前的任何定义。
以前,定义参数将覆盖该参数以前的任何定义。

1.2.7 使用新模式参数

通过添加新的实例限定符增强,您可以为许多运行参数指定实例名称或模式。但是,一些现有的参数已经被设计为通过接受一个“实例名称模式”的参数来操作特定的实例,例如HistorPattern参数。此模式用于以类似glob的方式匹配实例名。
只有名称匹配模式的实例才会受到参数的影响。例如,HistorPattern只记录名称与参数指定的模式匹配实例的历史。
其他现有的模式参数包括EnableCoverage, DisableCoverage, EnableProtocolChecks, DisableProtocolChecks, SuppressPortContention,SuppressUnknownAddrReadError, SimulationDatabasePattern, ErrorOnWritethroughTracePattern.
按照当前的设计使用这些模式参数可能有些尴尬,因为您只能指定一个模式。很难找到指定所需实例的精确子集的单一模式。
Cadence VIPs正在用一组更直观命名的参数替换这些模式参数,然后可以将这些参数与新的实例限定符一起使用,从而更容易地设置模式。例如,为了取代现有的HistoryPattern参数,VIPs现在支持一个新的History参数。为了向后兼容,仍然支持现有的模式参数,但您将希望迁移到新的参数,特别是当它帮助您设置您想要的模式时。
下表比较了两个模式参数—HistoryPattern和TracePattern—与它们的新对应参数。Examples列展示了如何使用现有参数和新参数来实现等价的实例匹配。

在所有模式运行参数中,只有HistoryPattern和TracePattern参数此时实现了新的增强参数。
You may continue to use the existing pattern parameters, but if you use both old and new, be aware
that the new parameters take precedence. For example, if you use both HistoryPattern and
History, the settings for History take precedence.
您可以继续使用现有的模式参数,但是如果同时使用新旧模式参数,请注意新参数优先。例如,如果您同时使用HistoryPattern和
“History”,优先设置“History”。
作为新语法如何简化模式使用的另一个示例,假设您想要消除模式参数的影响。假设您想保存除匹配模式以外的所有实例的历史数据。使用现有的historpattern参数没有办法做到这一点,但是使用新的语法你可以很容易地说:

History on # history is on by default
History off -instance test* # but history is off for any instances matching this pattern

关于使用新的History参数而不是旧的HistoryPattern模式参数的另一个例子,请参阅Run-Time Control File Examples运行时控制文件示例。

2 运行控制错误信息

2.1 错误信息表

以下是在读取运行时控制文件时可能发生的错误消息列表:



2.2 多模式匹配警告

在运行过程中可能会出现以下警告消息:

RTC parameter name has multiple pattern matches for instance-name:
    details

当运行代码试图检索实例instance-name的参数名称的值,并且发现与实例名称匹配的多个模式时,会出现此消息。例如,假设您设置了以下行:

DifferentialClockSkew 100 ps -instance test* *1 *2 # suppose this is line 5 in ./.denalirc
DifferentialClockSkew 120 ps -instance t* # suppose this is line 20 in ./myParams

如果运行的代码试图获取一个名为testbench.i1实例的参数DifferalClockSkew的值。将检测到多个模式匹配。这是因为testbench.i1匹配test*,匹配1,也匹配t。因为对于使用哪个值是不明确的,所以会打印警告消息。在这种情况下,所使用的值将始终是最近的匹配,因为这种选择与允许后面的参数定义覆盖前面的参数定义的做法是一致的。所以在这个例子中,选择的值将是120ps。警告消息的详细信息部分指出找到了哪些匹配,以及这些模式出现在哪里。在本例中,警告如下:

RTC parameter DifferentialClockSkew has multiple pattern matches for testbench.i1:
*1 (from line 5 in ./.denalirc)
test* (from line 5 in ./.denalirc)
t* (from line 20 in ./myParams)
Using pattern t* with value 120 ps

##2.3 帮助定位错误行的消息
由于添加了include文件,现在重要的是要指出导致错误的文件。如果错误是由从运行控制文件中读取的行引起的,则错误消息将在前面加上:
At line line-number in Run-Time Control File file-name
此外,如果使用了嵌套的include文件,则对上面这一行进行扩充以显示嵌套路径。例如:

At line line-number in Run-Time Control File file-name
included at line line-number in Run-Time Control File file-name
included at line line-number in Run-Time Control File file-name
...

示例消息:

At line 5 in Run-Time Control File ./.denalirc:
Unrecognized parameter name: HistiryFile
At line 3 in Run-Time Control File ./myInclude
included at line 6 in Run-Time Control File ./.denalirc:
Illegal Integer value '2.5' for parameter 'ErrorCount'

3 运行控制文件实例

3.1 特定实例和模型的设置

下面的例子展示了特定实例和模型的参数定义。

  • 为特定实例打开历史记录
  • 匹配优先级
  • 根据模型组织初始化文件
  • 运行控制文件组织

3.1.1 为特定实例打开历史记录

下面的例子展示了History如何比historpattern更容易使用:

HistoryFile myTest.his
History off # turn off history by default
History on -instance testbench.ddr_II.inst04 testbench.ddr_II.inst82
History on -instance testbench.ddr_II.inst45

上面的示例仅为指定的三个实例打开历史记录。注意,没有一个历史行覆盖前面的行,因为它们引用不同的实例。
要通过使用HistorPattern实现相同的结果,需要一个只匹配三个所需实例的glob模式。这样的模式甚至是不可能的。尝试使用多个HistorPattern行将不起作用,因为后续的HistorPattern行将覆盖前面的行。

3.1.2 匹配的优先级

给定的实例名可以匹配特定参数的多个模式。在这种情况下,有一个优先顺序来进行匹配。

  1. 首先,检查实例名是否与实例限定符完全匹配。
  2. 如果没有完全匹配,接下来将检查该名称是否同时匹配实例模式和模型。
  3. 如果没有匹配,接下来将单独检查名称是否匹配模式。
  4. 如果没有匹配,则只检查模型匹配。
  5. 最后,如果仍然没有匹配,则使用默认值。
    考虑以下几行:
InitialMemoryValue 0
InitialMemoryValue 1 -instance testbench.i0
InitialMemoryvalue 2 -instance test* -model usb
InitialMemoryValue 4 -instance *.i0 *.i1
InitialMemoryValue 8 -model ddr_II
  • 如果我们有一个名为testbench.i0的usb实例,则使用值1,因为名称是testbench.i0的精确匹配。
  • 如果我们有一个名为testbench.i1的usb实例,使用值2,因为有名称test*的匹配和usb模型的匹配。
  • 如果我们有一个名为testbench.i1的ddr_II实例,使用值4,因为只有*.i1的名称匹配。
  • 如果我们有一个名为testbench.i2的ddr_II实例,使用值8,因为只有模型ddr_II的匹配。
  • 如果我们有一个名为top.i5的usb实例,则使用值0,因为名称和模型与任何其他行都不匹配。

3.1.3 根据模型组织初始化文件

包含文件的功能使您可以很容易地按模型对变量进行分组。例如,一组用于usb模型的变量可以全部放在一个文件中。然后,该文件将包含在一个标准运行控制文件中,例如./.denalirc。为了确保include文件中的参数只应用于usb,可以在每行的末尾加上“model usb”。
当重新组织现有的运行控制文件以利用新特性时,您可能需要考虑以下检查表:

  • 是否有一些参数,您希望站点上的每个人都使用默认值?考虑把这些放入 d e n a l i / . d e n a l i r c 中 。 您 也 可 以 将 它 们 放 入 一 个 文 件 中 , 例 如 ′ s i t e w i d e . R t c ′ , 然 后 在 denali/.denalirc中。您也可以将它们放入一个文件中,例如'sitewide.Rtc',然后在 denali/.denalircsitewide.Rtcdenali/.denalirc包含这个文件。
    记住,用户总是可以在他们自己的RTC文件中重写缺省值。
  • 是否有需要您自己的默认值的参数?把它们放到/.denalirc中,或者放到/.denalirc包含的文件中。
  • 将特定的test的参数添加到test目录中的.denalirc文件,以便将它们加载为./.denalirc。另外,您可以将环境变量DENALIRC设置为您想要的文件。
  • 如果您有特定于模型的参数,考虑将它们添加到一个特定于模型的运行控制文件中,然后您就可以包含该文件。
  • 如果您有以模型名称开始的参数,请检查是否可以用新的通用参数和模型限定符替换它们。例如,PcieHistoryPktSize 4096可以升级为HistoryPktSize 4096 model pcie。请参阅Using New Pattern Parameters一节。
  • 如果您有现有的“pattern”参数,请尝试按照UsingNew Pattern Parameters的描述替换它们。

3.1.3 运行控制文件组织

下面的示例演示了如何有效地使用新的运行控制增强功能。为此,将重写使用模型pcie、usb和ddr4sdram仿真的运行控制文件。

  1. 选择以下原始运行时控制文件进行重写。
    现有运行控制文件
AssertionCoverageFile assert.statsAssertionChecklistFile check.stats
PcieTransLogTypes tlp dllp os
PcieTLBypassInit 1
HistoryFile denali.history
HistoryDebug On
HistoryDebugLoad On
TraceFile denali.trc
LicenseQueueTimeout 120
LicenseQueueRetryDelay 60
PcieUnknownPLValue 2
PcieHistoryPktSize 4096
UsbBypassReset 0
UsbProcessPhyAfterDisconnect 1
UsbBypassTraining 0
UsbBypassInit 0
UsbBypassLmpInit 0
InitialMemoryValue RandomWithUpdate
UsbAutoDeviceEnumeration 1
UsbAcceptJKForChirp 1
UsbAcceptSe0ForHSIdle 1
UsbAcceptJForFSLSIdle 1
InitChecks 1
TimingChecks 1
RefreshChecks 1
ErrorMessages on
LicenseQueueOnlyWhenAllInUse 0
ReadDQSContentionCheck 1
InitMessages Off
ClockStableCycles 20
RandomOutputDelay 0
InitChecksPauseTime 0
noXsInReadData 1
tracepattern testbench.i0.micron_mt18
  1. 一些常用参数例如LicenseQueueTimeout, LicenseQueueRetryDelay,LicenseQueueOnlyWhenAllInUse, HistoryFile和TraceFile被放到一个单独文件以便如果需要站点默认值,所有测试可以很容易的加载。假设站点管理员将一些公共参数放入$SITE_RTC指向的文件中。一些参数可能具有典型的站点范围的值。每个测试仍然可以根据需要覆盖单个参数。
LicenseQueueTimeout 120 # wait 2 minutes before timing out
LicenseQueueRetryDelay 60 # retry every minute
LicenseQueueOnlyWhenAllInuse 1
HistoryFile denali.his # get history by default. user can turn off if they want
TraceFile denali.trc # same for trace
  1. 原始文件中的其他参数似乎是特定于模型的。假设一个项目经理已经指定了一组用于各种模型的默认参数。他可以将每个模型的单独文件存储在(例如)所指向的目录中$PROJ_MODEL_RTC_DEFAULTS,并告诉用户在他们使用的模型中包含这些。项目经理可能在$PROJ_MODEL_RTC_DEFAULTS中创建以下文件
    :
    ddr4sdram
InitChecks 1
TimingChecks 1
RefreshChecks 1
InitialMemoryValue X -model dd4sdram

pcie

PcieTLBypassInit 1
PcieUnknownPLValue 1

usb

UsbBypassReset 0UsbProcessPhyAfterDisconnect 1
UsbBypassTraining 0
UsbBypassInit 0
UsbBypassLmpInit 0
InitialMemoryValue RandomWithUpdate -model usb
UsbAutoDeviceEnumeration 1
UsbAcceptJKForChirp 1
UsbAcceptSe0ForHSIdle 1
UsbAcceptJForFSLSIdle 1
  1. 最后,可以重写运行时控制文件,如下所示:
    新的运行控制文件
# load our site-wide common defaults
include $SITE_RTC
# get standard pcie parameters
include $PROJ_MODEL_RTC_DEFAULTS/pcie.rtc
# but for this test, we need these pcie overrides:
PcieTransLogTypes tlp dllp os
PcieUnknownPLValue 2
PcieHistoryPktSize 4096
# get standard usb parameters
include $PROJ_MODEL_RTC_DEFAULTS/usb.rtc
# but use the following usb values for this test
UsbBypassReset 0
InitialMemoryValue 0 model usb
UsbAutoDeviceEnumeration 0
# include project defaults for dd4sdram
include $PROJ_MODEL_RTC_DEFAULTS/dd4sdram.rtc
# include my test-specific dd4sdram parameters
include ./dd4sdram.rtc
# trace only this one instance:
Trace off # turn off by default
Trace on -instance testbench.i0.micron_mt18 # this is the only one I am interested in
# a few other things I want specific for this run:
HistoryDebug On
HistoryDebugLoad On
AssertionCoverageFile assert.stats
AssertionChecklistFile check.stats
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值