Layering Sequence介绍

如果在构建更加复杂的协议总线传输,例如PCie、USB3.0等,那么通过一个单一的传输层次会对以后的激励复用、上层控制不那么友好。对于这钟更深层次化的数据传输,在实际中无论是VIP还是自开发的环境,都倾向于通过若干抽象层次的sequence群落来模拟协议层次。通过层次化的sequence可以分别构建transaction layer、transport layer和physical layer等从高抽象级到低抽象级的transaction转化。这种层次化的sequence构建方式,称之为layering sequence。例如在进行寄存器级别的访问操作,其需要通过transport layer转化,最终映射为具体的总线传输。
在这里插入图片描述

typedef enum {
   
   CLKON, CLKOFF, RESET, WRREG, RDREG} phy_cmd_t; // 定义物理层命令枚举类型
typedef enum {
   
   FREQ_LOW_TRANS, FREQ_MED_TRANS, FREQ_HIGH_TRANS} layer_cmd_t; // 定义数据层命令枚举类型

class bus_trans extends uvm_sequence_item; // 定义物理层事务类
    rand phy_cmd_t cmd; // 随机物理层命令
    rand int addr; // 随机地址
    rand int data; // 随机数据
    constraint cstr {
   
    // 定义约束
        soft addr == 'h0; // 限制地址为 0
        soft data == 'h0; // 限制数据为 0
    }
    ...
    
endclass

class packet_seq extends uvm_sequence; // 定义数据层序列类
    rand int len; // 随机包长度
    rand int addr; // 随机地址
    rand int data[]; // 随机数据数组
    rand phy_cmd_t cmd; // 随机物理层命令
    constraint cstr {
   
    // 定义约束
        soft len inside {
   
   [30:50]}; // 包长度范围为 30 到 50
        soft addr[31:16] == 'hFF00; // 地址的高 16 位固定为 'hFF00
        data.size() == len; // 数据数组大小等于包长度
    }
    ...
    task body(); // 序列执行逻辑
        bus_trans req
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值