当前位置: 首页 > news >正文

边界扫描测试原理 14 -- BSDL 8 用户提供的 VHDL 包

边界扫描测试原理 14 – BSDL 8 用户提供的 VHDL 包


文章目录

  • 边界扫描测试原理 14 -- BSDL 8 用户提供的 VHDL 包
      • 用户提供的 VHDL 包
        • 用户提供的 VHDL 包结构
        • 单元描述常量
          • 单元上下文值
          • 数据源值
          • 语义检查
        • 用户提供的 VHDL 包示例


用户提供的 VHDL 包

  • 用户提供的 VHDL 包结构
  • 单元描述常量
  • 用户提供的 VHDL 包示例
用户提供的 VHDL 包结构

用户提供的 VHDL 包用于表示用户设计的边界寄存器单元的行为。它包括 VHDL 包部分和 VHDL 包体部分。与标准 VHDL 包相比,VHDL 包部分较简略,因为 BSDL 的定义在<标准使用声明>指定的标准包中提供。在 VHDL 包体中定义的单元名称(称为延迟常量)会被列出。

编写用户提供的 VHDL 包时,如果引用了在<标准使用声明>中指定的先前定义的标准包中未定义的结构(如 BSDL_EXTENSION),可能会导致错误。为避免此类错误,2001 年用户提供的包应该引用 STD_1149_1_2001。

示例 2-44

用户提供的 VHDL 包结构

<用户包> ::= package <用户包名称> is <标准使用声明>{ <扩展声明> }{ <延迟常量> }end <用户包名称> ;<用户包名称> ::= <VHDL 标识符><延迟常量> ::= constant <单元名称> : CELL_INFO;<单元名称> ::= <VHDL 标识符><用户包体> ::= package body <用户包名称> is<标准使用声明>{ <单元描述常量> }end <用户包名称> ;

请注意以下几点:

  • <用户包名称>的值必须是唯一的。

  • 所有<单元名称>的值必须是唯一的。

  • <用户包>中的<用户包名称>的值必须与<用户包体>中的<用户包名称>的值相匹配。

单元描述常量

单元描述常量使用以下格式:

示例 2-45

单元描述语法

<单元描述常量> ::=constant <单元名称> : CELL_INFO := ( <捕获描述符列表> ) ;<单元名称> ::= <VHDL 标识符><捕获描述符列表> ::= <捕获描述符> { , <捕获描述符> }<捕获描述符> ::= ( <单元上下文>, <捕获指令>, <数据源> )<单元上下文> ::= INPUT | OUTPUT2 | OUTPUT3 | INTERNAL | CONTROL |CONTROLR | CLOCK | BIDIR_IN | BIDIR_OUT | OBSERVE_ONLY<捕获指令> ::= EXTEST | SAMPLE | INTEST<数据源> ::= PI | PO | CAP | UPD | ZERO | ONE | X

单元描述常量是由包含VHDL枚举类型的数据三元组组成的指定VHDL常量记录。例如,一个捕获描述符如下所示:

示例 2-46

单元描述示例 #1

(INPUT, EXTEST, PI)

可以理解为“对于用作输入单元(INPUT)的此单元,当EXTEST生效时,捕获触发器在CAPTURE-DR状态下加载并行输入(PI)数据。”

示例 2-47

单元描述示例 #2

(BIDIR_IN, INTEST, UPD)

可以理解为“对于用作双向单元且作为输入(BIDIR_IN)的此单元,当INTEST生效时,捕获触发器在CAPTURE-DR状态下加载更新触发器(或锁存器)数据(UPD)的值。”

示例 2-48

单元描述示例 #3

(OUTPUT2, SAMPLE, PI)

可以理解为“对于用作(两态)输出单元的此单元,当SAMPLE生效时,捕获触发器在CAPTURE-DR状态下加载并行输入(PI)数据。”

示例 2-49

单元描述示例 #4

(OUTPUT3, EXTEST, ZERO)

可以理解为“对于用作(3态)输出单元的此单元,当EXTEST生效时,捕获触发器在CAPTURE-DR状态下加载0(ZERO)数据。”

单元上下文值

表 2-4 列出了<单元上下文>值。

表 2-4

单元上下文元素值及其含义

单元上下文值含义
INPUT控制与观察输入单元
CLOCK时钟引脚的仅观察单元(支持 INTEST 指令)
OUTPUT2两态输出单元
OUTPUT3三态输出单元
CONTROL输出使能或方向控制单元
CONTROLR在 TEST-LOGIC-RESET 预设/清除的 CONTROL
BIDIR_IN作为输入的单元双向引脚
BIDIR_OUT作为输出的单元双向引脚
INTERNAL控制与观察内部单元,不与 I/O 引脚关联
OBSERVE_ONLY仅观察单元,无控制能力,与 I/O 引脚关联

除了 BIDIR_IN 和 BIDIR_OUT 的<单元上下文>值之外,表 2-4 中的所有<单元上下文>值都映射到表 2-3 和支持文本中的同名<功能>值。BIDIR_IN 和 BIDIR_OUT 的<单元上下文>值都映射到<功能>值 BIDIR。BIDIR 单元的行为取决于它当前是设置为驱动数据输出(BIDIR_OUT)还是接收数据输入(BIDIR_IN),这由<控制单元>值识别的控制单元中包含的数据值决定。

数据源值

表 2-5 给出了<数据源>的值。图 2-5 提供了数据源可能性的通用模型。

表 2-5

数据源元素值及其含义

数据源值含义
PI并行输入
PO并行输出(如果有驱动器,则为输出垫)
CAP捕获触发器数据
UPD更新触发器(或锁存器)数据
ZERO常数 ‘0’
ONE常数 ‘1’
X未知数据
KEEPER在禁用时弱驱动最近驱动的数据状态的输出

了解单元的上下文以解释数据源是很重要的。这种上下文决定了软件如何解释 PI 和 PO。

  • 如果单元用作输入(或作为输入的双向作用),则必须将 PI 解释为其数据被捕获的系统引脚。

  • 如果单元用作输出(或作为输出的双向作用),PI必须解释为来自系统逻辑的输出;在EXTEST期间,除非使用完整的系统逻辑仿真来预测系统逻辑输出,否则单元将捕获X。

  • 如果单元用作输出,PO必须是系统引脚;在EXTEST期间,单元将捕获组件外的板级信号;当单元用作输入时,PO将捕获X。

在这里插入图片描述

显示 CAP 输入的边界寄存器单元的通用模型

语义检查

在以下表格中,L 表示合法。M 表示仅在合并单元的情况下合法。A 表示当单元是IEEE未强制规定的附加单元时合法。<捕获描述符>是一个(<单元上下文> <捕获指令> <数据源>)元素。一个非法的<捕获描述符>的示例是 (Input, Extest, UPD)。

表 2-6

语义检查

<捕获指令>PIPOUPDCAPXZEROONE
<单元上下文> 为 INPUT、CLOCK 和 BIDIR_IN
EXTESTL
SAMPLEL
INTESTLLLLLLL
<单元上下文> 为 OUTPUT2、OUTPUT3 和 BIDIR_OUT
EXTESTLLLLLLL
SAMPLEL
INTESTL
<单元上下文> 为 CONTROL 和 CONTROLR
EXTESTLLLLLLL
SAMPLEL
INTESTLM
<单元上下文> 为 INTERNAL(见下文注释)
EXTESTLLLLLLL
SAMPLELLLLLLL
INTESTLLLLLLL
<单元上下文> 为 OBSERVE_ONLY
EXTESTL
SAMPLEL
INTESTA

对于INTERNAL的<单元上下文>,<捕获描述符>值PI本质上与X相同,因为内部单元不捕获除常数0(ZERO)、1(ONE)或先前移入的值(CAP、UPD或PO)以外的任何内容。

在单个<捕获描述符列表>中,没有<单元上下文>值和<捕获指令>值的组合出现超过一次。

<用户包体>中的<单元描述常量>的<单元名称>值必须与<用户包>中的<延迟常量>的<单元名称>值匹配,其中<用户包体>和<用户包>指定相同的<用户包名称>。

在BSDL的1990版本中,RUNBIST指令作为<捕获指令>元素之一被包括在内,但在1994版本中未出现。这反映了RUNBIST可能会或可能不会引用边界寄存器的事实,并且RUNBIST_EXECUTION属性已被添加到1994版本中以描述RUNBIST的捕获行为。

用户提供的 VHDL 包示例

以下是一个描述两个新单元的用户提供的 VHDL 包示例。这些单元能够在某些情况下捕获常量(0 和 1)。例如,作为输出使用,在 EXTEST 期间,它们捕获常数数据而不是系统逻辑值(通常解释为 X)。通过在边界寄存器的输出单元位置使用这些单元,可以实现一个非正式的 ID 代码。它们将捕获一个由 1 和 0 位组成的模式。

示例 2-50

用户提供的 VHDL 包

-- 用户定义包,描述两个新单元package USER_PACKAGE is
use STD_1149_1_2001.all;           -- 获取 "Cell_info"" 的定义-- 边界单元延迟常量(在包体中定义)constant USER_0            :  CELL_INFO;
constant USER_1            :  CELL_INFO;
end USER_PACKAGE;                  -- 用户包结束package body USER_PACKAGE is       -- 用户边界单元use STD_1149_1_2001.all;constant USER_0 : CELL_INFO :=((OUTPUT2, EXTEST, ZERO),(OUTPUT2, SAMPLE, PI),(OUTPUT3, EXTEST, ZERO),  (INTERNAL, EXTEST, ZERO).(OUTPUT3, SAMPLE, PI),    (INTERNAL, SAMPLE, PI),(CONTROL, EXTEST, ZERO),  (CONTROLR, EXTEST, ONE),(CONTROL, SAMPLE, PI),    (CONTROLR, SAMPLE, PI),(CONTROL, INTEST, PI),    (CONTROLR, INTEST, PI) );constant USER_1 : CELL_INFO :=((OUTPUT2, EXTEST, ONE),(OUTPUT2, SAMPLE, PI),(OUTPUT3, EXTEST, ONE),   (INTERNAL, EXTEST, ONE),(OUTPUT3, SAMPLE, PI),    (INTERNAL, SAMPLE, PI),(OUTPUT3, INTEST, PI),    (INTERNAL, INTEST, PI),(CONTROL, EXTEST, ONE),   (CONTROLR, EXTEST, ONE),(CONTROL, SAMPLE, PI),    (CONTROLR, SAMPLE, PI),(CONTROL, INTEST, PI),    (CONTROLR, INTEST, PI) );end USER_PACKAGE;     -- 用户包体结束
http://www.dtcms.com/a/557764.html

相关文章:

  • Rust所有权(下):引用、借用与切片
  • 2025年江西省职业院校技能大赛高职组“区块链技术应用”任务书(6卷)
  • 编译tiff:arm64-linux-static报错 Could NOT find CMath (missing: CMath_pow)
  • SYN关键字辨析,各种锁优缺点分析和面试题讲解
  • 3.1.2.Python基础知识
  • Qt中使用图表库
  • LV.5 文件IO
  • 做目录网站注意沧县网络推广公司
  • 技术准备十五:Elasticsearch
  • 专门做面包和蛋糕的网站山东家居行业网站开发
  • linux挂载新硬盘并提供nfs服务
  • 用asp做宠物网站页面做地方行业门户网站需要什么资格
  • 交易网站建设需要学什么软件电商网站建设济南建网站
  • Python实现从数组B中快速找到数组A中的元素及其索引
  • 高效IT学习指南:用「智能复盘系统」突破学习瓶颈
  • 广东省白云区贵阳seo网站建设
  • 粉色大气妇科医院网站源码彭阳门户网站建设
  • 507-Spring AI Alibaba Graph Human Node 功能完整案例
  • 遥感生态指数(RSEI):理论发展、方法论争与实践进展
  • cjson 的资源释放函数
  • 第6讲:常用基础与布局Widget(一):Container, Row, Column
  • 什么是网站建设塑业东莞网站建设
  • 小企业网站建设哪里做得好深圳网站搭建
  • 婚恋网站策划页面设计好吗
  • 被禁止访问网站怎么办做招聘网站的怎么引流求职者
  • 【架构艺术】自动化测试平台架构设计的一些通用要点
  • 一个做网站的公司年收入宁波最好的推广平台
  • 建设网站0基础需要学什么海口网站建设维护
  • 农产品销售系统|农产品电商|基于SprinBoot+vue的农产品销售系统(源码+数据库+文档)
  • RAG的17种方式实现方式研究