You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SV LRM的wire/reg连续赋值次数合规性及仿真疑问

SystemVerilog与Verilog连续赋值规则解析

一、SystemVerilog规则细节

首先纠正你对SV LRM的解读偏差:

  • SV LRM 10.3明确连续赋值可驱动nets(如wire)和变量(如reg),这部分你的理解是正确的。
  • SV LRM 10.3.2的约束仅针对变量(reg这类):一个变量只能被最多一个连续赋值驱动,因为变量的连续赋值本质是将其绑定为连续驱动对象,多个连续赋值会造成驱动冲突,所以Modelsim对reg多次连续赋值报错是符合LRM的。
  • 对于nets(wire),SV LRM没有限制连续赋值的次数。wire作为线网类型,本身设计就是支持多驱动源的,多个连续赋值属于合法的多驱动场景,最终值由线网的强度分辨率函数决定(比如同强度多驱动会产生X值,但语法上完全合法),因此Modelsim编译通过wire的多次连续赋值是符合规范的,并非仿真器不遵循LRM。

二、Verilog规则验证

你对Verilog LRM 6.1的解读存在部分错误:

  • 正确规则1:Verilog中连续赋值仅允许驱动nets(如wire),确实不能驱动reg(reg属于变量,只能通过过程赋值修改),这部分你的理解是对的。
  • 正确规则2:Verilog中wire允许多个连续赋值,线网类型天生支持多驱动,不存在“仅允许一次”的限制,你之前的这个结论是错误的。

总结

  1. 你的SV LRM解读错误在于混淆了nets和变量的连续赋值规则:reg(变量)仅允许一次连续赋值,wire(net)允许多次连续赋值。
  2. Modelsim的行为完全符合SV LRM规范,不存在未严格遵循的情况。
  3. Verilog中,连续赋值不能驱动reg是正确的,但wire允许多次连续赋值,你之前的“仅允许一次”结论错误。

内容的提问来源于stack exchange,提问作者gubang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:46:15