验证约束题目

验证约束

题目

"在验证一个数据传输协议时,我们有一个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 中处理。
相关推荐
SM177152118385 天前
NSK紧凑型FA系列丝杠技术详解
经验分享·规格说明书
fofantasy5 天前
NSK SFT3210-2.5 滚珠丝杠技术详解
经验分享·规格说明书
BomanGe105 天前
NSK USS1205N1D0321 紧凑型精密滚珠丝杠技术详解
经验分享·规格说明书
阿米亚波5 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
AIHR数智引擎5 天前
KPI物理失效:AI原生组织的效能重构与技能度量
人工智能·经验分享·职场和发展·重构·ai-native·aihr
BomanLj5 天前
NSK DFT1604-2.5 滚珠丝杠技术详解
经验分享·规格说明书
中屹指纹浏览器5 天前
2026指纹浏览器字体指纹、字体渲染偏差检测与全维度虚拟字体池搭建方案
经验分享·笔记
黑科技iOS上架5 天前
iOS应用周末提交什么情况算卡审
经验分享·ios
永不言弃ives5 天前
【开局一把刀】一月控速计划
经验分享
fofantasy5 天前
NSK LH25FL 升级至 NH25EM 技术规格指南
服务器·网络·数据库·经验分享·规格说明书