SystemVerilog logic、wire、reg数据类型详解

news/2025/1/12 13:14:34/

        在Verilog中,wirereg是最常见的两种数据类型,也是初学者非常容易混淆的概念。           SystemVerilog的一大改进是支持logic数据类型,它在多数时候可以不加区分地替代wirereg。但如果不熟悉logic的限制随意使用,也容易遇到意想不到的错误。本文主要对比三种数据类型的区别,并总结它们的使用方法。

Verilog的wire和reg类型

在Verilog中,由于需要描述不同的硬件结构,数据类型总体分为netvariable两大类。

net类型设计用于表示导线结构,它不存储状态,只能负责传递驱动级的输出。net类型数据需要使用assign关键字连续赋值(continuous assignment)。虽然assign语句一般被综合成组合逻辑,但net本质还是导线,真正被综合成组合逻辑的是assign右边的逻辑运算表达式。常见的net类型数据包括wiretriwandsupply0等。

variable类型设计用于表示存储结构,它内部存储状态,并在时钟沿到来或异步信号改变等条件触发时改变内部状态。variable类型数据需要使用过程赋值(procedural assignment),即赋值定义在alwaysinitialtaskfunction语法块中。reg是最典型的variable类型数据,但需要说明的是,综合工具可能将reg优化综合成组合逻辑,并不一定是寄存器。常见的variable类型数据包括regintegertimerealrealtime等。

所以总结Verilog wire和reg的区别:

  • wire表示导线结构,reg表示存储结构。
  • wire使用assign赋值,reg赋值定义在alwaysinitialtaskfunction代码块中。
  • wire赋值综合成组合逻辑,reg可能综合成时序逻辑,也可能综合成组合逻辑。

SystemVerilog的logic类型

SystemVerilog在Verilog基础上新增支持logic数据类型,logicreg类型的改进,它既可被过程赋值也能被连续赋值,编译器可自动推断logicreg还是wire。唯一的限制是logic只允许一个输入,不能被多重驱动,所以inout类型端口不能定义为logic。不过这个限制也带来了一个好处,由于大部分电路结构本就是单驱动,如果误接了多个驱动,使用logic在编译时会报错,帮助发现bug。所以单驱动时用logic,多驱动时用wire

        在Jason的博客评论中,Evan还提到一点logicwire的区别。wire定义时赋值是连续赋值,而logic定义时赋值只是赋初值,并且赋初值是不能被综合的。

wire mysignal0 = A & B;     // continuous assignment, AND gate
logic mysignal1 = A & B;    // not synthesizable, initializes mysignal1 to the value of A & B at time 0 and then makes no further changes to it.
logic mysignal2;
assign mysignal2 = A & B;   // Continuous assignment, AND gate

所以总结SystemVerilog logic的使用方法:

  • 单驱动时logic可完全替代regwire,除了Evan提到的赋初值问题。
  • 多驱动时,如inout类型端口,使用wire

参考资料

[1]https://www.verilogpro.com/verilog-reg-verilog-wire-systemverilog-logic

[2] Spear, Chris. SystemVerilog for Verification, Second Edition: A Guide to Learning the Testbench Language Features. Springer, 2008.


http://www.ppmy.cn/news/498172.html

相关文章

时隔两年,再战女性市场,但小米这次还能重回C位吗?

作为人们生活中早已离不开的电子产品,发展至今,国内各大手机品牌也从单一的销售模式走向多元化发展,手机行业集中度明显提高。 据前瞻经济研究院数据显示,从2015年到2020年我国智能手机市场前五大品牌市占率从59.7%升至96.5%。可…

在 JavaScript 中获取域名

本文将讨论如何使用 JavaScript 事件和函数在网页执行期间以编程方式获取域名。 域名 我们使用域名从客户端应用程序访问网站或网页。 它是映射到 IP 地址(数字)的文本格式字符串。 用户在 Web 浏览器搜索中键入以调用特定网站的字符串称为域名。 例如…

热门参考设计:基于STM32单片机的WiFi、蓝牙应用方案

 基于STM32的WiFi模块EMW3165/3162/3238EMW3238以STM32F4为主控MCU,内置512KB Flash128KB SRAM,高度集成WLAN MAC/BB/RF,蓝牙4.1,3.3V单电源供电,邮票孔SMT封装。 EMW3238运行于MiCO物联网操作…

求大佬改路由器LOGO(有偿)

路由器型号:斐讯K2 迅捷FAC1200R TP-LINK 886N

《安富莱嵌入式周报》第231期:2021.09.20--2021.09.26

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz!http://www.armbbs.cn/forum.php?modforumdisplay&fid12&filtertypeid&typeid104 目录 1、elements消…

《GK101任意波发生器》升级固件发布(版本:1.0.2build539)

一、固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build539 编译日期:2014-10-08 二、固件版本说明: 1、增加功能:支持英文、中文两种语言  开机选择语言 三、固件下载: 链接: …

如何安排 Mac 每晚重启时间?

在“系统偏好设置”中有一个标题为“节能器”的部分,通常用于处理显示器在不使用时关闭、将硬盘置于睡眠状态、Mac 是否唤醒以进行网络访问以及 Mac 是否会自动返回断电后开机。 还有一个名为 Schedule 的部分,用于管理与 Mac 是开启和可用还是关闭相关的…

tpl怎么口_MERCURY(水晶) MAC1200R TTL 刷机,串口发送tpl 没有反应,现金求助!...

我刚才又操作了一番, 一开机就来输入这个 tpl,但是也许是我又操作错误吧,现在还是有一些问题 我的路由器启动的信息如下: U-Boot 1.1.3 (Feb 28 2015 - 13:41:15) Board: Ralink APSoC DRAM: 64 MB relocate_code Pointer at: 83…