Verilog reg, Verilog wire, SystemVerilog logic. What’s the difference?

Verilog reg 和 Verilog wire 之间的区别经常让许多刚开始学习这种语言的程序员感到困惑(我也曾困惑过!)。作为初学者,我被告知要遵循以下准则,这些准则似乎普遍有效:

  • 在始终块内部分配的信号左侧 (LHS) 使用 Verilog 规范
  • 使用 Verilog wire 处理分配在 always 块外的信号左端 (LHS)

后来,当我采用 SystemVerilog 编写 RTL 设计时,我被告知现在一切都可以是 “类型逻辑”。这在一般情况下也行得通,但时不时会遇到关于变量、网和赋值的令人费解的错误信息。

于是,我决定找出这些数据类型的确切工作原理,来撰写这篇文章。我翻阅了语言参考手册,搜索了现已失效的 Verilog-2005 标准文件,并上了一堂历史课。请继续阅读我发现的 Verilog reg、Verilog wire 和 SystemVerilog 逻辑之间的区别。

Verilog data types, Verilog reg, Verilog wire

Verilog 数据类型分为两大类:网和变量。它们的区别在于它们如何表示不同的硬件结构。

网数据类型表示结构实体之间的物理连接(想象一根普通的导线),如门之间或模块之间。它不存储任何值。它的值来自其驱动程序的驱动内容。Verilog 线可能是最常见的网络数据类型,尽管还有许多其他网络数据类型,如 tri、wand、supply0。

变量数据类型通常代表一块存储空间。在下一次赋值之前,它可以保持一个赋给它的值。Verilog reg 可能是最常见的变量数据类型。Verilog reg 通常用于模拟硬件寄存器(尽管它也可以表示组合逻辑,如 always@(*) 块内部)。其他变量数据类型包括整数、时间、real、realtime。

几乎所有 Verilog 数据类型都是 4 态的,这意味着它们可以取 4 个值:

  • 0 表示逻辑零,或假条件
  • 1 代表逻辑 1,或真条件
  • X 代表未知逻辑值
  • Z 代表高阻抗状态

Verilog 经验法则 1:要表示存储空间时使用 Verilog reg,要表示物理连接时使用 Verilog wire。

Assigning values to Verilog reg, Verilog wire

Verilog 网络数据类型只能通过连续赋值来赋值。这意味着要使用连续赋值语句(赋值语句)等结构,或从输出端口驱动。连续赋值驱动网络的方式与门驱动网络的方式类似。右侧的表达式可以看作是连续驱动网络的组合电路。

Verilog 变量数据类型只能通过过程赋值来赋值。这意味着要在始终块、初始块、任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的码泰君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值