当前位置: 首页 > news >正文

数字模拟混合建模相关知识总结

数字模拟混合信号建模相关总结

在过往项目中,团队中的数模混合仿真的模拟模型通常由数字设计人员使用 Verilog/SystemVerilog 编写。由于这些模型涉及验证工作中较少接触的特殊语法,其不完善之处往往成为问题的根源。为了提升 Debug 效率并优化未来的建模思路,本文对相关知识进行了系统总结。

无论是纯数字仿真还是混合仿真,其本质可归纳为三个核心要素:值传递时序信息驱动强度。虽然在前仿阶段通常忽略时序和强度,但在数模混合建模中,SystemVerilog 提供了丰富的语法来描述这些特性。本文参考 IEEE 1800 Standard (SystemVerilog LRM) 相关章节进行整理。

1. 驱动强度 (Drive Strength)

在 Verilog/SystemVerilog 中,驱动强度是解决多驱动网络(Multiple Driver Nets)信号决断的关键机制。当多个驱动源同时驱动同一个 Net 时,仿真器不仅比较逻辑值(0, 1, X),还会比较强度,遵循 “强胜弱(Strongest wins)” 的原则。

1.1 强度等级表 (IEEE 1800 Sec 28.11)

强度等级 (Level) 关键字 (Keywords) 典型数值 (Internal Value) 典型应用场景
7 (Highest) supply1, supply0 Supply (7) 电源 VDD, 接地 GND
6 strong1, strong0 Strong (6) 默认驱动强度 (门电路输出, assign 语句)
5 pull1, pull0 Pull (5) 上/下拉电阻 (Pull-up/Pull-down)
4 large (capacitive) Large (4) 大电容 (仅用于 trireg)
3 weak1, weak0 Weak (3) 弱驱动逻辑
2 medium (capacitive) Medium (2) 中电容 (仅用于 trireg)
1 small (capacitive) Small (1) 小电容 (仅用于 trireg)
0 (Lowest) highz1, highz0 HighZ (0) 高阻态 (无驱动)

1.2 核心原则与决断逻辑

  1. 强压倒弱 (Strong Overrides Weak)

    • 原则: 高强度驱动源覆盖低强度驱动源。
    • 应用: 模拟 GPIO 的开漏模式。强 0 覆盖弱上拉 pull1;高阻 Z 释放总线,让 pull1 生效。
  2. 同强度冲突 (Same Strength Conflict)

    • 原则: 强度相同但逻辑值不同,结果为 不定态 X。例外:wand/wor 线网会进行逻辑与/或决断。
  3. 模糊强度 (Ambiguous Strengths)

    • 在开关级建模或多驱动冲突场景中,信号可能处于模糊强度状态(IEEE 1800 Sec 8.12.2),即强度是一个范围而非单点。
    • StX (Strong X): 强 1 与强 0 冲突,强度范围覆盖从 Strong 到 Weakest 的所有可能性。
    • L / H (Weak 0 / Weak 1): 信号可能在 "High-Z" 和某个弱强度之间。
    • 混合规则: 当明确强度信号与模糊强度信号混合时,明确信号会“切除”模糊信号中比它弱的部分,保留比它强的部分。
  4. 驱动强度衰减 (Strength Reduction)

    • 非电阻性器件 (nmos, tran): 通常不改变强度,除了将 supply 降级为 strong(模拟导通电阻)。
    • 电阻性器件 (rnmos, rtran): 信号通过后强度显著降低,模拟电阻分压/限流。

1.3 建模建议

  • 数字模块输出: 默认使用 strong
  • 模拟模型输出:
    • 驱动: OpAmp/Buffer 输出用 strong
    • 高阻: 关断状态赋值 1'bz
    • 软偏置: 内部弱拉用 pullweak

2. 线网类型 (Net Types)

SystemVerilog (IEEE 1800 Sec 6.6) 定义了多种线网类型,用于模拟不同的硬件连接行为。

  1. 通用互连 (wire, tri):
    • 基础类型,多驱动冲突产生 X。
  2. 线与/线或 (wand/triand, wor/trior):
    • 模拟开漏/集电极开路电路 (I2C)。
  3. 带电阻线网 (tri0, tri1):
    • 模拟下拉/上拉电阻节点,高阻 Z 时自动根据类型拉到 0 或 1。
  4. 电荷保持线网 (trireg):
    • 模拟电容电荷存储。Z 态时保持前一状态,并可定义电荷衰减时间 (Decay Time),超时变 X。
  5. 电源线 (supply0, supply1):
    • 强制最强驱动 (Supply Strength)。
  6. 单驱动检查 (uwire):
    • 强制单驱动,多驱动直接报错,防止意外短路。

3. 门级与开关级建模 (Gate & Switch Level Modeling)

IEEE 1800 Sec 28 提供了底层原语,用于精细模拟电路行为。

  1. 基本门电路 (and, or, buf, not 等):
    • 标准单向逻辑门,默认 Strong 驱动。
  2. 三态门 (bufif1, notif0 等):
    • 带使能端的缓冲器,使能无效输出 Z。常用于双向总线/GPIO。
  3. 双向传输门 (tran, tranif1 等):
    • 真实的双向短路开关,连通后两端信号(值与强度)完全同步。
  4. 上下拉电阻 (pullup, pulldown):
    • 作为器件实例化的永久弱驱动源,解决浮空节点电平问题。
  5. MOS 管级原语 (nmos, pmos, cmos):
    • 模拟晶体管导通特性。验证中主要用于模拟简单的数模接口电路(如开漏输出级)。

4. 延时模型 (Delay Modeling)

精确控制延时对于模拟充放电、传输延迟至关重要 (IEEE 1800 Sec 28.16)。

  1. Min:Typ:Max 延时: #(min:typ:max) 允许定义三种条件下的延时。
  2. 边沿独立延时: #(rise, fall, turn_off) 可分别为上升、下降和关断指定不同延时。
  3. 路径脉冲过滤 (Inertial Delay):
    • Verilog 门级延时默认具有惯性。输入脉冲宽度 < 传播延时会被过滤(吞掉),模拟滤毛刺效果。
    • 若需传输延时 (Transport Delay) (无损传输),需配合非阻塞赋值 (<=) 或 pathpulse

5. 用户自定义线网与实数建模 (User-Defined Nettypes & RNM)

传统的 wire 受限于 4 态逻辑,IEEE 1800 Sec 6.6.7 引入的 User-defined Nettypes 是实现实数建模 (RNM) 的核心。

5.1 实数传递 (Real Data Transport)

使用 nettype 定义携带 realstruct 的新线网,用于模拟电压/电流。

nettype real wreal;      // 定义带浮点数的线网
module ldo (output wreal vout);assign vout = 1.8;   // 直接驱动模拟值
endmodule

5.2 自定义信号决断 (Custom Resolution Functions)

解决多驱动冲突,模拟电流叠加等物理定律。

// 定义求和函数
function automatic real sum_resolver(input real drivers[]);real total = 0;foreach (drivers[i]) total += drivers[i];return total;
endfunction// 定义自动求和线网
nettype real current_net with sum_resolver;

5.3 通用互连 (Interconnect)

interconnect 提供类型中立的连接方式,用于在顶层无缝连接数字端口和模拟实数端口,便于 IP 集成。

5.4 数模边界转换 (Analog-Digital Conversion)

纯数字模块(logic/wire)无法直接识别 real 类型信号。在连接数字控制逻辑时,必须处理边界转换:

  • 模拟 -> 数字 (A2D): 通过比较器模型或赋值逻辑,将电压阈值转换为 0/1。
    • Ex: assign dig_out = (ana_in > 0.8) ? 1'b1 : 1'b0;
  • 数字 -> 模拟 (D2A): 将 0/1 映射为电压值。
    • Ex: assign ana_out = dig_in ? 1.8 : 0.0;
  • 工程实践: 通常在模拟模型的边界处(Wrapper/Interface)统一处理转换,保持模型内部计算的高精度,对外接口符合连接对象的类型要求。

6. 工具调试技巧

VCS + Verdi 强度显示设置

为了在波形中 debug 驱动冲突和强度问题:

  1. VCS 仿真: 添加参数 +fsdb+strength=on 开启强度数据 dump。
  2. Verdi 波形: Tools -> Preferences -> Waveform -> View Options -> View Pane,将 "Display Verilog Strength Info" 设置为 type2
http://www.jsqmd.com/news/418571/

相关文章:

  • 计算机毕业设计 | SpringBoot+vue高校专业实习管理系统 大学生实训管理(附源码+论文)
  • 掼蛋 游戏
  • 一篇Substack炸翻华尔街:《2028全球智能危机》全解读
  • TGDZcalc by Ada (43th)
  • 【Playwright】录制脚本与元素定位
  • 方法
  • 2026年济南抖音短视频代运营5强推荐榜单发布 - 精选优质企业推荐榜
  • 魅族
  • 提升学术工作效率的AI工具指南:六种自动化文献引用方法深度探讨
  • 别小看“移动零”:一道简单题背后的算法思维升级
  • 易灵思PLL几种反馈模式解释
  • python基于flask的企业员工人脸识别考勤系统-vue pycharm django
  • 2026年青海抖音代运营公司推荐榜单TOP5公布 - 精选优质企业推荐榜
  • 2026年徐州抖音短视频运营公司推荐榜单TOP5发布 - 精选优质企业推荐榜
  • cudnn批处理中取出训练成绩
  • python基于flask的企业员工薪酬绩效工资管理系统的设计与实现-vue pycharm django
  • 训练时,学习率下降调整
  • 2026年榆林抖音短视频运营公司推荐榜单公布 - 精选优质企业推荐榜
  • 2026年DeepSeek写论文AI率太高怎么办?3招把90%降到10%以下 - 我要发一区
  • python基于flask的同城医院陪诊服务预约系统设计与实现-vue pycharm django
  • 2026年唐山抖音短视频代运营公司推荐榜单公布 - 精选优质企业推荐榜
  • python基于flask的企业人事管理系统的设计与实现-vue pycharm django
  • 外包项目交付痛点,XinServer 的高效解决方案
  • 在仅有runtime的Docker镜像中使用dotnet global tool的方法
  • JavaScript详解:从入门到高级的全面学习指南
  • 3D模型转AI绘画:Blender+Stable Diffusion工作流
  • 2026年哈尔滨抖音短视频代运营公司5强推荐榜单发布 - 精选优质企业推荐榜
  • 比话降AI和嘎嘎降AI哪个好?花了200元实测对比告诉你 - 我要发一区
  • 辉夜姬续
  • 2026年深圳抖音短视频代运营机构5强推荐榜单发布 - 精选优质企业推荐榜