Synopsys JESD204B VIP(3)测试序列和SYSREF请求

测试序列

测试序列包含传输层的long_test_pattern_test、short_test_pattern_test和链路层序列。

long_test_pattern_test

长测试序列在传输层产生,需要的传输层参数包括M、S、CF。

首先需要在cfg类中配置模式,同时配置控制位全0或全1。长序列模式下trans中的sample\[\]和ctrl_bits\[\]是无意义的。

复制代码
tx_agent_cfg.command = svt_jesd204_types::LONG_TEST_PATTERN;
tx_agent_cfg.tail_bits_pattern = svt_jesd204_types::ALL_ONE/ALL_ZERO;

然后在trans中配置为长序列模式,test_duration指示序列重复次数,以LMFC周期为单位。

复制代码
xact.cmd_type = svt_jesd204_transaction::LONG_TEST_PATTERN_COMMAND;
xact.test_duration = 5;

从波形可以看到序列重复发送5次。

默认发送的是满足协议要求的零数据,以M=2、S=1、N=16、N'=20、F=5、K=4为示例。这几个数看着可能不太理解,可以参照后面的规则表。

复制代码
// FRAME 0  <00> <01> <80> <00> <20>
// FRAME 1  <00> <01> <00> <00> <18>
// FRAME 2  <80> <00> <08> <00> <00>
// FRAME 3  <80> <00> <08> <00> <7c> 

也可以调用agent中的方法,通过文件指定长测试序列,下面为文件格式示例。

复制代码
cvtr_agent.drive_user_defined_pattern_using_file("tl_long_test_pattern.txt"); 

/*tl_long_test_pattern.txt*/
/*converter0 */ 0001_8   
/*converter1 */ 0002_0   
/*converter0 */ 0001_0   
/*converter1 */ 0001_8   
/*converter0 */ 8000_0   
/*converter1 */ 8000_0   
/*converter0 */ 8000_0   
/*converter1 */ 800f_0   

最后附上协议中对长测试序列的要求,序列不能是完全自定义。

short_test_pattern_test

短测试序列也产生于传输层,按照帧(frame)循环发送。也需要配置M、S、N'、F,只不过不用配K了。

首先需要在cfg类中配置模式。可以此时配置序列内容short_test_sample,假如不配那数据就使用trans中的sample\[\]、ctrl_bits\[\]和tail_bits\[\]。short_test_sample的有效数据宽度为N',数组深度为M*S。

复制代码
tx_agent_cfg.command = svt_jesd204_types::SHORT_TEST_PATTERN;
tx_agent_cfg.short_test_sample = '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

然后在trans中指定包类型和重复次数。

复制代码
xact.cmd_type = svt_jesd204_transaction::SHORT_TEST_PATTERN_COMMAND;
xact.test_duration = 5;

以M=10,S=1为例,可以看到重复发送0~9。也可以用drive_user_defined_pattern_using_file方法发送指定文件中的数据,这个方法优先级高于short_test_sample和sample。发送指定文件中数据的方法也可以用于普通的数据传输。

链路层测试序列

链路层支持序列如下,可以通过后面会介绍的ll_testmode_type选择序列。

复制代码
typedef enum bit[2:0] {
    D21_5          = `SVT_JESD204_D21_5_TEST_SEQ ,   
    K28_5          = `SVT_JESD204_K28_5_TEST_SEQ ,   
    ILA_TEST_SEQ   = `SVT_JESD204_ILA_TEST_SEQ ,   
    USER_DEFINE    = `SVT_JESD204_USER_DEFINE_TEST_SEQ,    
    JSPAT          = `SVT_JESD204_JSPAT_TEST_SEQ,   
    JTSPAT         = `SVT_JESD204_JTSPAT_TEST_SEQ  
} link_layer_test_sequence_enum;

在cfg类中,配置为链路测试模式,同时配置序列重复次数。因为链路测试就是重复发字符序列,没有K28.5同步(CGS)和初始化(ILA)过程,所以配置skip为1。

复制代码
tx_agent_cfg.command=svt_jesd204_types::LINK_LAYER_TEST;
tx_agent_cfg.k_frame_in_testmode = 2;
tx_agent_cfg.skip_cgs_ila_in_jtspat=1;

在trans中,指定序列类型。

复制代码
xact.cmd_type         == svt_jesd204_transaction::LINK_LAYER_TEST_COMMAND;
xact.ll_testmode_type == svt_jesd204_types::JTSPAT;

JTSPAT序列长度118,重复2此,可以看到发送了236个采样周期的数据。

SYSREF相关

sysref生效

硬件环境方面,Subclass1首先需要额外连接sysref信号。

配置方面,需要配置svt_jesd204_configuration::device_enable_with_reset_sysref来决定第1次sysref的触发行为。

• 配置为0时,设备不会处理sysref信号。

• 配置为1时,收到sysref后TX RX同时生成时钟,以保证相位对齐,然后TX开始发送lane同步序列,RX开始回应SYNC...最后进行传输,过程如下图所示。

• 配置为2时,sysref不影响时钟,只会触发TX开始发送同步序列。

其实这个配置对Subclass0、Subclass2也有效,只不过Subclass0、2用reset信号代替sysref。

sysref请求

204B协议要求TX和RX可以发起重新初始化的请求,但没有说具体实现方式,VIP的处理是设备通过generate_sysref生成脉冲,然后外部受到触发后生成sysref信号(如果是Subclass0、2可以改成reset信号),然后TX RX重新同步再数据传输。

硬件环境方面,需要等待generate_sysref信号,然后手动拉低(VIP只负责拉高不负责拉低,很粗糙,但示例top.sv就是这么写的),再依据触发生成sysref信号。

配置方面,需要将svt_jesd204_configuration::reinitialize_with_sysref配为1。

请求传输,仅需要将成员变量req_sysref配为1即可,不需要配传输模式。

复制代码
`uvm_create_on(xact,p_sequencer.rx_seqr[0]);
xact.req_sysref = 1;
`uvm_send(xact);

传输示例为:发送数据传输,延时等待,再发送sysref请求传输,然后循环。下面为传输波形,可以看到:

• a处,发送sysref请求传输后,RX的generate_sysref拉高,指示sys_ref请求,这个过程也可以由TX发起。此外需要注意的是如果是RX发起,则会现将SYNC拉低,再发起sys_ref请求(SYNC为高时sysref有效会报错)。

• b处,经过一定延时,tb中生成sysreg时钟,RX会在采到的第1次LMFC周期将SYNC拉高,然后TX开始发送ILA序列,然后继续传输

相关推荐
啄缘之间15 天前
8.【学习】工业级详细接口约束&覆盖率
开发语言·笔记·学习·uvm·sv
Ether IC Verifier15 天前
SystemVerilog 数据类型详解
php·systemverilog·uvm·ic验证
liuluyang5301 个月前
UVM 工厂机制 完整可编译运行 Demo
uvm·uvm工厂机制
liuluyang5301 个月前
UVM工厂机制
uvm·工厂机制
liuluyang5301 个月前
UVM工厂机制(二)
uvm·工厂机制
liuluyang5301 个月前
SystemVerilog常用关键词与函数
uvm·systermverilog
liuluyang5301 个月前
SV主要关键词详解
fpga开发·uvm·sv
liuluyang5302 个月前
clk_mux_seq sv改进
fpga开发·uvm
谷公子的藏经阁2 个月前
DVCon 2025 论文精华导读及下载链接
ai·论文·systemverilog·uvm·dvcon
蓝天下的守望者5 个月前
SystemVerilog中 `timescale的使用问题
systemverilog·uvm·vcs