news 2026/4/23 16:27:13

sv中的三种case

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sv中的三种case

在SystemVerilog中,casecasexcasez是三种不同的条件选择语句,它们在匹配规则上有重要区别:

1. 基本区别

语句

通配符

匹配规则

可综合程度

case

精确匹配

完全可综合

casez

?z

z?视为"不关心"

可综合,但需谨慎

casex

xz?

xz?都视为"不关心"

通常不建议综合

2. 详细说明

case - 精确匹配

logic [2:0] sel; logic [3:0] out; always_comb begin case(sel) 3'b001: out = 4'b0001; 3'b010: out = 4'b0010; 3'b100: out = 4'b0100; default: out = 4'b0000; endcase end
  • 完全匹配二进制值

  • 最安全,推荐用于可综合代码

casez - 忽略高阻和"?"

logic [2:0] sel; logic [3:0] out; // 匹配规则:忽略 z 和 ? always_comb begin casez(sel) 3'b001: out = 4'b0001; // 只匹配 001 3'b0?1: out = 4'b0010; // 匹配 0x1 (x=0/1) 3'bz10: out = 4'b0100; // 匹配 x10 (x=0/1/z) default: out = 4'b0000; endcase end
  • z?被视为"不关心"位

  • 常用于优先级编码器

casex - 忽略所有未知值

// 匹配规则:忽略 x、z 和 ? always_comb begin casex(sel) 3'b001: out = 4'b0001; // 只匹配 001 3'b0x1: out = 4'b0010; // 匹配 0x1 (x=0/1/x/z) 3'bxx0: out = 4'b0100; // 匹配 xx0 (x=0/1/x/z) default: out = 4'b0000; endcase end
  • xz?都被视为"不关心"位

  • 主要在testbench中使用

3. 实际应用示例

优先级编码器(推荐使用 casez)

// 4位优先级编码器 logic [3:0] request; logic [1:0] grant; always_comb begin casez(request) 4'b1???: grant = 2'b11; // 最高位优先 4'b01??: grant = 2'b10; 4'b001?: grant = 2'b01; 4'b0001: grant = 2'b00; default: grant = 2'b00; endcase end

避免使用 casex 的原因

// ❌ 潜在问题:仿真与综合不匹配 logic [1:0] state = 2'b0x; // 仿真时包含 x casex(state) 2'b0?: $display("Match"); // 会匹配,但综合后可能不会 // ... endcase

4. 现代SystemVerilog推荐做法

使用unique casepriority case

// 1. 唯一case - 确保无重叠 unique case(sel) 2'b00: out = a; 2'b01: out = b; 2'b10: out = c; // 缺省2'b11会触发警告 endcase // 2. 优先级case - 工具识别优先级 priority casez(request) 4'b1???: grant = 3; 4'b01??: grant = 2; 4'b001?: grant = 1; 4'b0001: grant = 0; default: grant = 0; endcase

5. 最佳实践指南

  1. 可综合代码中

    • 优先使用case+unique/priority

    • 必要时使用casez,但要明确注释

    • 避免使用casex

  2. Testbench中

    • 可使用casex进行灵活的匹配

    • 但要注意可能隐藏仿真问题

  3. 安全使用 casez 的模式

// 明确使用 ? 作为不关心位 always_comb begin casez({valid, opcode}) {1'b1, 5'b000?1}: // 明确标记 {1'b0, 5'b?????}: // 明确标记 // ... endcase end
  1. 常见陷阱

// ❌ 危险:可能意外匹配 casez(sel) 2'bz0: ... // 会匹配 00 和 10! // ✅ 安全:使用完整case case(sel) 2'b00, 2'b10: ... // 明确列出 endcase

总结

  • 精确匹配用case​ - 最安全,首选

  • 需要通配符用casez​ - 谨慎使用,用?明确标记

  • Testbench用casex​ - 避免在RTL中使用

  • 总是添加unique/priority​ - 提高代码可读性和安全性

  • 必须要有default​ - 除非使用unique case且已覆盖所有情况

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:33:22

数字政府建设的坚实支撑

在数字政府建设浪潮中,政务云凭借安全可控、高效协同的特性,成为提升治理能力的关键抓手。天翼云翼政通iStack一体机通过“一云多芯”架构,适配多种国产化芯片,实现了从IaaS到SaaS的全栈自研,成功入选信通院高质量数字…

作者头像 李华
网站建设 2026/4/23 12:54:42

【私域商城系统是企业构建自主可控电商生态的核心工具】

私域商城系统是企业构建自主可控电商生态的核心工具,旨在通过自有渠道深度运营用户资产,实现低成本获客、高复购转化及品牌价值沉淀。以下是其关键特性及实施要点: 一、核心功能模块 • 全渠道触达与整合 支持小程序、APP、H5、PC端等多终端入…

作者头像 李华
网站建设 2026/4/23 12:12:10

什么是流策略

文章目录为什么需要流策略如何实现流策略流策略的典型应用流策略是一种网络流量管理机制,能够将具有相同特征的报文划分为一类,并为这一类报文提供相同的服务。通过配置流策略,用户可以定义报文分类规则匹配需要单独处理的流量,然…

作者头像 李华
网站建设 2026/4/23 13:36:00

如何将Grok的能力用于MCP服务器

概述 基于我的需求,假设“Trae CN”指的是 Tria Technologies 的 Vision AI-KIT 6490(或类似使用 Qualcomm QCS6490 处理器的边缘 AI 开发套件),这是一个支持高性能 AI 计算的 IoT 硬件平台。MCP(Model Context Protocol)是一个开放协议,用于将 AI 模型连接到外部工具和…

作者头像 李华
网站建设 2026/4/23 16:03:12

数据价值可视化:让数据说话的艺术与科学

数据价值可视化:让数据说话的艺术与科学 引言:数据可视化的“痛点”与“价值缺口” 上周和一位电商运营朋友聊天,她倒了一肚子苦水: “我们每周都做数据可视化——折线图、柱状图、Dashboard 堆了一堆,但老板总说‘看不…

作者头像 李华
网站建设 2026/4/23 16:02:53

B站用户弹幕情感可视化分析的python实现(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

B站用户弹幕情感可视化分析的python实现 摘要 随着自媒体时代的兴起,弹幕语言在哔哩哔哩弹幕视频网站(简称 B 站)中的作用 不容小觑。弹幕作为一种实时评论,表达出了用户观看视频当下的情感与看法。本文对 B 站弹幕文本进行情感倾…

作者头像 李华