前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Verilog中的wire和reg有什么区别

Verilog中的wire和reg有什么区别

作者头像
AsicWonder
发布2024-07-02 17:09:32
680
发布2024-07-02 17:09:32
举报

大多数初学者还没有真正很难掌握Verilog/SystemVerilog硬件描述语言(HDL)中wire(网络)和reg(变量)的区别。这个概念是每个经验丰富的RTL设计都应该熟悉的。但是现在有许多没有Verilog开发经验的验证工程师都在为他们的验证平台选择SystemVerilog。

验证方法往往专注于验证平台设计的面向对象的编程方面,但很少涉及这个wire和reg的区别,认为它适用于设计。这是不正确的。

如果你需要与DUT通信,那么你就需要了解wire和reg(网络和变量)之间的区别。

任何设计或验证芯片的人都应该具备一些基本的verilog开发技能,并了解wire和reg的概念。你需要获取的关键概念是,你将一个值写入一个变量,该值被保存到该变量的下一次赋值。这个概念被称为过程赋值,是执行代码语句的一部分。HDL可能会在赋值和其他语句之间添加一些时间的概念。

组合逻辑

时序逻辑

reg a,b,c; always @(b or c) begin a = b | c; end

reg a,b,c; always @(posedge c) begin a = a + b; end

最初,Verilog使用关键字reg来声明表示时序逻辑硬件寄存器。后来,综合工具开始使用reg来表示时序逻辑以及组合逻辑,如上实例所示。所以,最终Verilog文档被更改为说reg只是用于声明变量的,而不仅仅是时序逻辑。

SystemVerilog重命名了reg 为logic,以避免与寄存器混淆——它只是一个数据类型(具体来说是1位,4状态数据类型)。从现在开始,忘掉它,仅使用logic。

HDL的另一个显著特点是,它对大量并行过程进行建模。在数字设计的最低水平上,每个逻辑(AND,OR,DFF)都是一个独立的并发过程。module是代表在不同抽象级别建模的进程的容器,并且通过wire相互传递值。在Verilog中,wire声明表示连接的网络。每个并发进程的输出都驱动一个网络,这被称为连续赋值,因为该进程不断更新它想要在网络上驱动的值。声明连续赋值的方法多种多样,所有这些方法都代表连续赋值行为:

代码语言:javascript
复制
wire A, B, C; 
代码语言:javascript
复制
assign A = B| C; // continuous assignment construct. 
代码语言:javascript
复制
or(A,B,C); // gate-level instance terminal connection 
代码语言:javascript
复制
mymodule m1(A,B,C); // module instance port connection 

虽然这些都是不同形式的连续赋值结构,但它们都没有像过程赋值那样直接向网络赋值。所有同时驱动到网络上的值会根据驱动强度抉择出最终结果。例如,中断请求信号可能会使用线或(wor)类型的网络来指示至少有一个设备正在驱动为“1”,否则它将解析为“0”。一些信号将具有较弱的上拉/下拉电阻,这些电阻将被更强驱动器的值覆盖。大多数技术不允许在同一网络上驱动不同的值,当这种情况发生时,网络将解析为未知的“x”态。在这种情况下,只有一个驱动程序主动赋值“0”或“1”,而其他驱动程序则通过驱动高阻抗或“z”状态关闭。其结果是,双向端口必须使用wite进行建模,才能在端口两侧有多个驱动器。

事实证明,设计中的绝大多数网络都只有一个驱动器,因此不需要强度信息。SystemVerilog添加了一项logic类型,仅允许单个连续赋值来驱动变量。每当表达式更改其值时,驱动连续赋值的表达式都会分配给变量。一旦有多个驱动或需要强度信息,必须重新使用wire

不能将过程和连续赋值混合到同一变量。这种限制的原因是,无法确定最后一次变量更新什么时候完成,过程赋值还是连续赋值。

总之,现在应该使用4个状态变量logic(或2个状态变量的bit)的逻辑来表示所有单个驱动器的信号。任何具有多个或可能存在多个驱动的信号都应声明为wire。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档