验证约束题目

验证约束

题目

"在验证一个数据传输协议时,我们有一个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 中处理。
相关推荐
GJGCY6 小时前
财务智能体落地实践:RPA、大模型与规则引擎如何构建业财自动化闭环?
经验分享·ai·自动化·财务·智能体
汇策研习社9 小时前
改良版ADX指标实战指南:告别传统ADX滞后、震荡误判难题
大数据·经验分享·金融·区块链·fastbull
tcpinchezhuwu9 小时前
教育行业AI落地实践:夜灯公考AI选岗与智能答疑系统架构解析
经验分享
cszn202610 小时前
AI如何自动识别PDF转换废标风险?智能评审项目实践
经验分享
卡梅德生物科技小能手11 小时前
卡美德生物科普MMP9(基质金属蛋白酶9):细胞外基质重塑的关键调节因子
经验分享·深度学习·生活
yyt36304584111 小时前
KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘
前端·经验分享·性能优化·typescript·vue·交互·chrome devtools
LuminousCPP12 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
浩瀚地学17 小时前
【面试算法笔记】0202-链表-基本功能实现
java·经验分享·笔记·算法·面试
cszn202618 小时前
AI如何自动识别投标报价废标风险?智能评审项目实践
经验分享
神明不懂浪漫1 天前
【第四章】CSS(二)——文本外观属性与复合选择器
前端·css·经验分享·笔记