日常记录(79)翻译4
其它属性
可能还有其他协议规则,这些规则在本质上不是严格的时序性的。对于APB3协议,以下属性为真:
•在任何时候,只有一条PSEL线在逻辑1上处于激活状态
有关实现,请参见示例页面的“其他属性”部分。
功能覆盖率
除了检查用于有效传输的协议断言所表示的功能覆盖率之外,我们还需要检查所有可能的传输类型是否已经发生。最好的方法是使用各种总线字段的数据覆盖率来检查每个有效值的传输是否完成。与总线协议功能覆盖相关的字段包括:
- PSEL - 总线上的所有PSEL线路都被视为处于活动状态——即传输发生在总线上的所有外围设备上
- PWRITE - 我们已经看到读写发生
- PSLVERR - 我们已经看到正常和错误响应发生
在这些字段之间创建cross将检查APB3总线上的主设备和每个从设备之间是否发生了所有类型的传输。有关实现,请参见示例页面上的功能覆盖部分。
可以收集的其他功能覆盖类型包括:
•外设延迟-检查是否观察到一系列外设延迟
•外设地址范围-检查特定地址范围是否已被访问
然而,这些可能是特定于设计的,应该使用单独的监视器进行收集。
实现协议监视器
一旦定义了这些关系和属性,就需要在SystemVerilog接口中混合使用SVA和covergroup语法来实现它们。这里描述了一个协议监视器示例。
协议监视器的源代码可在此处下载:
(在线下载源代码示例,网址为https://verificationacademy.com/cookbook/code-examples ).
APB3协议测试计划
在验证计划步骤中,应创建一个测试计划,其中列出了设计的特征、如何对其进行验证以及如何完成测试。APB3协议监视器是一个可重用的验证组件(VIP),在验证任何具有APB3总线接口的设计时都可以重用。下面列出的测试计划将作为此类设计的测试计划的一部分,有效地作为测试计划层次结构中的叶子导入。
APB3协议测试计划
|
部分 |
描述 |
覆盖率类型 |
属性 |
|
未知信号值检查 |
|
|
|
|
PRESETn |
PRESETn总是未知状态 |
Assertion |
1 |
|
PSEL |
PSEL 总是未知状态 |
Assertion |
1 |
|
PADDR |
当PSEL激活,PADDR合法 |
Assertion |
1 |
|
PWRITE |
当PSEL激活,PWRITE合法 |
Assertion |
1 |
|
PENABLE |
当PSEL激活,PENABLE合法 |
Assertion |
1 |
|
PWDATA |
当PWRITE激活,PWDATA合法 |
Assertion |
1 |
|
PREADY |
当PENABLE激活,PREADY合法 |
Assertion |
1 |
|
PSLVERR |
当PENABLE激活,PSLVERR合法 |
Assertion |
1 |
|
PRDATA |
当PREADY激活,PRDATA合法 |
Assertion |
1 |
|
时间相关性检查 |
|
|
|
|
PENABLE取消断言 |
一旦PREADY激活,PENABLE取消断言 |
Assertion, Cover directive |
1 |
|
PSEL到PENABLE |
PSEL和PENABLE之间只有一个时钟延迟 |
Assertion, Cover directive |
1 |
|
信号稳定性 |
当PSEL激活时,PWRITE、PADDR和PWDATA信号应该稳定到周期结束 |
Assertion, Cover directive |
1 |
|
其它检查 |
|
|
|
|
PSEL独立 |
同一时间只有一条PSEL线路是激活的 |
Assertion |
1 |
|
功能覆盖率 |
|
|
|
|
APB3 协议 |
随着所有激活PSEL线路都有所有类型的响应,所有类型的APB3协议传输都已发生 |
Covergroup |
2 |
APB3协议监视器
APB3协议监视器是被动的,旨在成为一个可重用的验证组件。因此,它被参数化,以允许与不同的总线宽度一起使用,端口接口上的所有信号都是输入。该监视器已被实现为一个接口,所有信号均被声明为输入引脚,这使得它可能与UVM测试台中的虚拟接口句柄一起使用,从而允许通过编程方式访问covergroup。将信号声明为输入允许它们显式连接到任何一组APB3总线信号,而无需在信号命名中进行精确匹配。
未知信号属性
监视器实现并断言上一页用英语定义的未知协议信号条件的属性。由于这些属性在一个时钟周期内有效,因此无需使用cover指令收集显式覆盖率;如果没有断言失败,则隐含这些属性的覆盖率。
在可能的情况下,使用的方法是定义一个通用属性,该属性可以针对不同的信号进行断言。
时间关系
监视器实现上一页用英语描述的定时关系。功能覆盖策略是假设如果这些断言没有失败,但被视为以覆盖指令完成,那么它们将添加有效的功能覆盖率:
其它属性
监视器检查在任何时间点逻辑1上只有一条PSEL线是活动的。由于这个属性在每个时钟周期中都被检查,如果没有故障,那么它隐含了功能覆盖率。
功能覆盖率
为了检查总线上每个外围设备的每个可能协议条件下的传输是否正确完成,我们实现了一系列covergroup,每个外围设备一个covergroup,它收集特定于该外围设备的协议覆盖率。当一个简单序列保持时,对covergroup进行采样。请注意,为提高性能,仅当相关PSEL线为真时,才对每个covergroup进行采样。
完整示例代码
监视器和测试评台的源代码可在此处下载:
(在线下载源代码示例,网址为https://verificationacademy.com/cookbook/code-examples ).
块级覆盖率
块级功能验证可以充分利用这样一个事实,即所有块接口都是公开的,并且可以完全自由地单独进行激励。验证过程的预期结果是,该块已经过彻底测试,因此可以在更高的集成级别上完全放心地重复使用。功能覆盖模型是设备的一部分,用于确定设计是否已验证到所需的质量水平。
块级设计示例是UART,它包含寄存器,允许DUT配置为不同的操作模式,还可用于获取状态信息。UART使用包含UVM寄存器模型的UVM块级测试平台进行验证。
UART总览
通用同步收发器(UART)的功能是通过一对异步串行线发送和接收不同格式的字符。对于异步串行链路,没有共享采样时钟,而是接收通道使用16倍数据速率的时钟对传入串行数据流进行采样。当没有数据传输时,数据线保持高位,数据字符的传输通过将数据线保持低位一个比特周期来传输起始位开始。接收端检测起始位,然后对串行数据流进行采样和解压,串行数据流可能包含5到8位的数据、奇偶校验,然后是一个始终为1的停止位。
寄存器映射
本例中的UART设计基于行业标准16550a UART。它有10个寄存器来控制它的操作,在一个系统中,软件使用这些寄存器来控制设备以及发送和接收字符。发送和接收路径由16字深的FIFO缓冲。
寄存器映射总结如下:
|
寄存器 |
地址偏移 |
宽度 |
接入 |
描述 |
|
Receive Buffer |
0x0 |
8 |
R |
接收FIFO输出数据 |
|
Transmit Buffer |
0x0 |
8 |
W |
传送FIFO输入数据 |
|
Interrupt Enable (IER) |
0x4 |
8 |
R/W |
使能UART中断 |
|
Interrupt Identification (IIR) |
0x8 |
8 |
R |
中断状态 |
|
FIFO Control (FCR) |
0x8 |
8 |
W |
设置FIFO接收数据阈值 |
|
Line Control (LCR) |
0xC |
8 |
R/W |
设置UART数据字的格式 |
|
Modem Control (MCR) |
0x10 |
8 |
R/W |
用于控制调制解调器接口输出 |
|
Line Status (LSR) |
0x14 |
8 |
R |
发送和接收通道状态 |
|
Modem Status (MSR) |
0x18 |
8 |
R |
用于监控调制解调器接口输入 |
|
Divisor 1 |
0x1C |
8 |
R/W |
16bit传送器的LSB |
|
Divisor 2 |
0x20 |
8 |
R/W |
16bit传送器的MSB |
对于UVM测试平台,UVM寄存器模型将被写入抽象激励,用于配置和控制UART的操作。使用这个寄存器模型的一个好处是,我们可以在功能覆盖率模型中引用它。有关UART功能和详细寄存器映射的更多详细信息,请参阅数据表。
额外的接口
UART块有许多需要驱动或监控的离散接口。UART示例测试平台使用UVM实现,因此这些接口的驱动和监控将由通用验证组件(UVC)或agent完成。如果测试平台是使用另一种方法学实现的,那么将使用BFM或类似BFM的模型。然而,建模和收集覆盖范围的原则基本相同。
UART具有以下外部接口,需要在测试平台上驱动和监控这些接口。
- APB 主机接口 – 需要一个 APB agent
- TX串行线 – 需要一个 passive UART agent
- RX 串行线 – 需要一个 active UART agent
- Modem 接口 – 需要一个简单的并行 I/O agent
- Interrupt 线 – 需要一个 monitor
测试平台结构
本例中使用的UVM测试平台架构如方框图所示。
UART的功能测试计划大纲已经创建,作为将其特性映射到测试用例和功能覆盖的过程的一部分。
设计功能覆盖率模型
功能覆盖率模型的目的是,确保使用测试平台仿真的所有功能测试用例,将设计置于所有被认为有趣的条件下进行测试。功能覆盖率模型基于设计的功能,并与测试平台的工作方式密切相关,因为它将依赖于来自测试平台组件的数据,并且将依赖于测试平台事件进行采样。
UART功能覆盖模型的设计将根据设备内的每个关注的区域进行讨论。在每种情况下,首先考虑必要的测试,然后考虑所需的功能覆盖模型,以确保所有条件都已被测试。
功能覆盖率模型每个部分的covergroups的示例实现将分别描述,并在示例UART测试平台中提供。
发送通道
测试发送通道
通过检查发送通道是否为每种可能的字格式传输正确的串行格式数据来验证发送通道,这需要激励来配置设计,然后通过填充传输缓冲区来发送数据。UART代理将根据设备的配置解释传输的串行流,并在接收到一个字符时发送分析事务。UART代理中的监视器将对串行数据执行低级格式和奇偶校验错误检查,如果检测到错误,则标记错误,因为它可以访问时钟和数据信号。如果UART工作正常,则传输数据路径应无错误,测试平台没有引入错误的范围。
为了检查发送通道是否正常工作,我们可以将接收到字符时被动UART监视器写入的分析事务内容与最初写入UART传输缓冲区的字符进行比较。这意味着记分板分析连接到UART代理和APB代理。UART传输缓冲区写入必须在记分板的FIFO结构中进行缓冲,以便与UART接收的字符进行比较。
发送通道有两个缓冲状态位(TX empty和TX FIFO empty),它们从线路状态寄存器读回,需要通过激励生成路径进行测试。还有一个TX FIFO空状态中断,将在中断部分讨论。
发送通道的功能覆盖率设计
当测试平台检查UART是否正确传输串行数据时,功能覆盖模型的作用是检查每种字格式是否已配置并正常工作。字格式由行控制寄存器(Line Control Register, LCR)的内容决定,因此功能覆盖模型需要在每次传输字符时对LCR值进行采样。LCR寄存器中有6个bit决定字格式,它们是:
|
LCR Bit Field |
Function |
|
[1:0] |
选择 5,6,7 or 8 bit 数据 |
|
2 |
选择1 or 2 停止位 |
|
[5:3] |
使能奇偶校验和奇偶校验类型 |
我们需要看到这些配置设置的所有可能排列,以便说我们已经实现了传输信道的功能覆盖率。用于收集此功能覆盖的SystemVerilog covergroup的示例实现在示例UART测试平台中实现。
发送通道覆盖率总结
|
覆盖率标准 |
发送通道覆盖率 |
|
哪些变量重要? |
LCR[5:0] – 定义了UART串行字格式的所有排列组合 |
|
这些值之间的依赖关系是什么? |
无依赖 |
|
它们是非法的条件吗? |
不,所有组合是合法的 |
|
什么时候采样合适? |
当一个字符已经被传输 |
|
什么时候数据非法? |
N/A(不可用) |
接收通道
测试接收通道
测试平台使用活动的UART代理将串行数据流驱动到UART中。活动代理是一个验证组件,它根据激励事务驱动接收串行数据线,并监控该线的状态,将pin级别的活动转换回事务。接收通道必须能够处理传入串行数据流格式中可能存在的错误,这需要对接收通道进行正检查和负检查,UART代理驱动能够插入位级错误,其监视器能够检测到这些错误。
接收记分板使用的检查机制是将UART代理发送的数据与从UART设备的接收缓冲区读取的数据进行比较。UART代理插入的任何错误都需要被设计视为线路状态寄存器(LSR)中设置的位或通过生成线路状态中断来检测。测试平台需要对接收通道进行的检查包括:
- 正确检测到起始位
- 已正确接收奇偶校验-如果没有,则生成奇偶校验错误
- 至少接收到一个停止位——如果没有,则生成帧错误
- 正确检测到数据溢出情况
- 数据接收标志正常工作
- 正确检测到断路情况
中断一节中考虑了许多接收通道中断条件。
接收通道的功能覆盖率设计
接收通道的功能覆盖率模型需要收集无错误条件下的功能覆盖率,然后收集每个可能的错误或特殊条件下的功能覆盖率。接收通道的字格式通过LCR进行配置,因此对于无错误字符格式,可以使用与传输通道相同的covergroup设计,除了当从UART的接收缓冲区读取数据字符时,会对其进行采样。
对于各种错误情况,使用单独的covergroup,这会将线路状态寄存器(LSR)中的奇偶校验错误、帧错误、溢出错误和中断条件位与LCR中的字格式位交叉。这可以确保所有字格式下都检测到所有可能的错误或特殊情况。
这些covergroup的示例实现在示例UART测试平台中提供。
接收通道覆盖率总结
|
覆盖率标准 |
接收通道覆盖率 |
|
哪些变量重要? |
LCR[5:0] – 定义了UART串行字格式的所有排列组合 LSR[4:0] – 状态位 Break Interrupt (BI), 帧错误 (FE), 奇偶校验错误 (PE), 超速错误 (OE) and 数据接收 (DR) |
|
这些值之间的依赖关系是什么? |
对于无错误RX条件DR和所有字格式(For error free RX conditions DR and all word formats) 对于注入错误RX,LCR和LSR位的叉积 |
|
它们是非法的条件吗? |
不能在没有DR合法时有OE |
|
什么时候采样合适? |
当RX字符已被传送且DR合法 |
|
什么时候数据非法? |
N/A |
模型接口
测试模型接口
调制解调器接口是一组4个输入和4个输出信号,用于在两个UART之间实现硬件握手。在一些UART设计中,这些线路与UART状态机具有硬件互锁,以启用/禁用数据的传输和接收,但这种UART设计并非如此。调制解调器的输出是通过写入调制解调器控制寄存器(MCR)来驱动的,对调制解调器输入的更改将从调制解调器状态寄存器(MSR)读取回来。
还有一个回环模式也需要检查。在这种模式下,对MCR的写入会被反射回MSR中,外部信号不会改变或导致任何改变。调制解调器记分板会将此功能与正常操作模式分开检查。
测试平台包含一个调制解调器代理,该代理有一个用于调制解调器输入的驱动程序和一个监视器,当任何调制解调器信号(输入或输出)发生变化时,该监视器将事务发送到调制解调器记分板。记分板还从APB代理的监视器接收事务,以便它可以跟踪UART寄存器访问,这使它能够知道调制解调器输出何时应因写入MCR而发生更改,以及调制解调器输入更改何时应反映在MSR的读取中。
调制解调器接口的功能覆盖率设计
调制解调器记分板检查调制解调器接口是否正常工作,总的来说,这包括调制解调器寄存器和调制解调器信号之间的路径。
对于调制解调器输出,所有可能的输出信号组合都需要在有回环或无回环的情况下进行观察,这意味着当MCR的内容被测试平台写入时可以对其进行采样。所需的功能覆盖包括信号条件的所有排列。
调制解调器输入从MSR读回,有四个信号采样值和四个信号变化值,需要看到它们已在所有可能的状态下读回。回环位影响MSR值是来自调制解调器接口信号还是来自MCR信号,因此这需要成为覆盖率模型的一部分。读取MSR时对调制解调器输入覆盖率模型进行采样,所需要的覆盖率是MSR的所有可能值加上MCR环回位的值的叉乘。
这些覆盖模型的示例实现在示例uart测试平台的uart_modem_coverage_monitor中。
调制解调器接口覆盖率汇总
|
覆盖率标准 |
调制解调器接口覆盖率 |
|
哪些变量重要? |
MCR[4:0] -控制输出和回环模式 MSR[7:0] -输入状态和改变到输入值 |
|
这些值之间的依赖关系是什么? |
每个调制解调器信号都是正交的,但是回环模式在MCR位和MSR位之间创建了依赖关系。 对于覆盖率,所有排列都是相关的。 |
|
它们是非法的条件吗? |
不 |
|
什么时候采样合适? |
当调制解调器接口上发生更改,或对MCR进行写操作时 由调制解调器记分板决定。 |
|
什么时候数据非法? |
在回环模式改变后,立即由记分板处理 |
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!

浙公网安备 33010602011771号