验证约束题目

验证约束

题目

"在验证一个数据传输协议时,我们有一个packet类,包含字段bit 7:0 length(表示payload字节数,范围1-255)、byte payload\[\](动态数组,存储数据)、bit 1:0 type(包类型:0=普通包,1=控制包,2=空包,3=保留)。请设计约束满足:

普通包(type=0):payload大小必须等于length,且length≥4;

控制包(type=1):payload大小固定为2(与length无关),且length=0;

空包(type=2):payload必须为空,length=0;

保留类型(type=3):禁止随机化(必须报错)。

代码

systemVerilog 复制代码
class packet;
  // 随机变量声明
  rand bit [7:0]   length;        // payload 字节数,范围 1-255
  rand byte        payload[];     // 动态数组存储数据
  rand bit [1:0]   pkt_type;      // 包类型:0=普通包,1=控制包,2=空包,3=保留

  // 约束:禁止 type == 3
  constraint type_c {
    pkt_type != 3;
  }

  // 主约束:根据包类型设置 length 和 payload 大小
  constraint packet_constraints {
    // 普通包 (type=0)
    if (pkt_type == 0) {
      length >= 4;
      payload.size() == length;
    }
    // 控制包 (type=1)
    else if (pkt_type == 1) {
      length == 0;
      payload.size() == 2;
    }
    // 空包 (type=2)
    else if (pkt_type == 2) {
      length == 0;
      payload.size() == 0;
    }
    // 保留类型 (type=3) - 通过 type_c 约束已禁止
     else begin
        `uvm_fatal(get_type_info(),"ERROR!!! type == 3");
     end
  }

  // 求解顺序:先确定 pkt_type,再求解其他约束
  solve pkt_type before length, payload.size();

  // 构造函数
  function new();
    // 初始化代码
  endfunction

  // 显示函数
  function void display();
    $display("Packet: type=%0d, length=%0d, payload size=%0d", 
             pkt_type, length, payload.size());
  endfunction
endclass

关键点说明:

  1. 使用 rand 声明随机变量。
  2. 约束中使用 == 进行相等比较(不是 =)。
  3. solve...before 可引导求解器优先确定某些变量。
  4. 动态数组大小通过 .size() 方法约束。
  5. 保留类型(type=3)已在 type_c 约束中排除,无需在 if-else 中处理。
相关推荐
总线通信小百科6 小时前
车载以太网模块、交换机与媒体转换器:三类设备怎么选?
经验分享·车载以太网
2601_9672127210 小时前
安全型轨道式插座合规资质核查与工程选型技术要点
大数据·经验分享·安全
一只代码猿12 小时前
Screen Studio 免费邪修用法:剪视频完全无痛(附提示词)
经验分享
蒋胜山13 小时前
VBScript007-Excel的99乘法表
经验分享·batch
德思特13 小时前
实操指南|从“能驻网“到“能上网“:手机入网与公网业务实验室测试分享
经验分享·无线通信
览讯冷却14 小时前
冷却塔噪声的健康危害与法规要求的技术梳理
经验分享·笔记·科技·其他·百度·制造·业界资讯
学页技术极客15 小时前
「Skill市场」会重演「App Store」的故事吗
经验分享
恒锐丰科技林技术员16 小时前
EG2304L 高压半桥驱动芯片:中小功率电力电子方案优选器件
经验分享·嵌入式硬件·硬件工程
哎写bug的程序员17 小时前
关于github
经验分享
lazy H18 小时前
【计算机网络】第 12 篇:IPv6 详解——地址格式、地址类型与双栈网络
网络·经验分享·后端·学习·计算机网络·408