验证约束题目

验证约束

题目

"在验证一个数据传输协议时,我们有一个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 中处理。
相关推荐
数据库小学妹14 小时前
向量数据库选型:独立vs融合对比与场景推荐(附SQL实战)
经验分享·数据库架构·向量数据库·rag·数据库选型·ai数据库
2501_9269783315 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
卡梅德生物科技小能手18 小时前
卡梅德生物科普|TSLP(胸腺基质淋巴细胞生成素)靶点研究概述
经验分享·深度学习·生活
LaughingZhu19 小时前
Product Hunt 每日热榜 | 2026-08-03
人工智能·经验分享·深度学习·神经网络·产品运营
IT小白杨20 小时前
2026亚马逊多店铺运营的环境隔离架构与合规实践
经验分享·架构·业界资讯·指纹浏览器
前端之虎陈随易1 天前
moon,apt和yum之外linux系统命令安装新选择
经验分享
卡梅德生物科技小能手2 天前
卡梅德生物科普 TPBG(5T4)
经验分享·深度学习·生活
上海广测检测科技有限公司2 天前
智能手表手环新加坡IMDA认证详解:无线电设备注册制度与技术标准解读
经验分享·智能手表
卡梅德生物科技小能手2 天前
卡梅德生物科普 TSLP
经验分享·深度学习·生活
ychqsq2 天前
103.样书
经验分享·职场和发展