适用于所有数字芯片工程师的SystemVerilog增强功能


SystemVerilog不是一种新的硬件描述语言。SystemVerilog是现有Verilog HDL的一组丰富的扩展。

诚然,SystemVerilog的主要目标是实现大型复杂设计的建模和验证。然而,SystemVerilog为Verilog提供了每个工程师都可以也应该利用的增强功能。

SystemVerilog使Verilog建模变得更加容易,并有助于确保模型能够正确仿真和综合。

本文简要介绍了SystemVerilog的14项增强功能,这些增强功能将引起所有Verilog用户的兴趣,无论他们正在建模哪种类型的设计。

1.时间单位和精度

在Verilog中,时间被指定为一个数字,没有任何时间单位。例如:

forever #5 clock = ~clock;

Verilog标准没有指定默认单位或时间精度。时间单位和精度是软件工具的属性,由编译器指令'timescale设置然而,编译器指令存在固有的危险,因为它们依赖于代码顺序。这可能会导致不同的仿真产生不同的结果。

SystemVerilog增加了两个增强功能来控制时间的时间单位。首先,时间可以指定一个显式单位。该单位是s、ms、ns、psfs之一代表秒到飞秒。例如:

forever #5ns clock = ~clock;

其次,SystemVerilog允许使用新的关键字、timeunittimeprecision来指定时间单位和时间精度这些声明可以在module中指定,从而使时间单位和精度成为模型的一部分,而不是对软件工具的命令。

timeunits 1ns;
timeprecision 10ps;

2.填充矢量

使用Verilog,很容易用所有零、所有Z或所有X填充任何宽度的矢量。然而,Verilog没有一个简单的方法来用所有矢量填充任何宽度的矢量。

SystemVerilog添加了一个方便的快捷方式,用相同值填充向量的所有位。简单的语法是'0, '1, 'z'x。这允许填充任何大小的矢量,而无需明确指定矢量大小。

bit [63:0] data;
data = '1; //set all bits of data to 1

3.抽象数据类型

Verilog提供以硬件为中心的net和变量数据类型。这些类型代表4状态逻辑值,用于建模和验证硬件行为。Verilog的net数据类型还具有多个强度级别适用于net的多个驱动。

SystemVerilog为Verilog添加了几种新的数据类型,允许在更抽象的层次上建模设计。

  • byte是一个2状态有符号的变量,被定义为8位。
  • shortint 是一个2状态有符号变量,定义为16位。
  • int 是一个2状态有符号变量,类似于C int数据类型,但被定义为32位。
  • longint 一个2状态有符号变量,被定义为恰好64位,类似于C long类型。
  • bit 任何向量宽度的2状态无符号数据类型,可用于代替Verilog reg数据类型。
  • logic是任何向量宽度的4状态无符号数据类型,可以代替reg数据类型。
  • shortreal 是 一个与 C 浮点数类型相同的 2 态单精度浮点变量。
  • void 表示没有值,可以指定为函数的返回值,与C中相同。

SystemVerilog 2状态数据类型允许在更自然的层面上进行建模设计。大多数数字逻辑只适用于0和1。Z的特殊值只需要表示三态逻辑,这在大多数设计中是罕见的。X表示未知条件的仿真值。

SystemVerilog logic数据类型是Verilog reg数据类型的同义词。它解决了自RTL 综合开始以来困扰新Verilog用户的术语问题。reg关键字似乎意味着“寄存器”,这似乎意味着每个地方都使用reg数据类型,需要硬件寄存器。

凭借经验,Verilog用户了解到这种暗示是错误的。reg数据类型只是一个编程变量。使用变量的上下文决定了是否需要硬件寄存器。logic数据类型与reg类型相同,但没有误导性名称。

4.放宽变量规则

使用Verilog,变量只能在过程赋值的左侧使用。在连续赋值的左侧使用变量是非法的。这些上下文需要net数据类型,例如wire

这种对变量的限制往往是编译错误的来源。在创建module时,设计者必须首先确定信号将如何接收其值,以便知道要使用什么数据类型。如果设计功能的建模方式发生变化,通常需要更改数据类型声明。

SystemVerilog放宽了变量使用规则。变量可以是:

  • 通过过程赋值语句赋值。
  • 通过连续赋值语句赋值。
  • 连接到单个原语的输出。
  • 连接到单个模块端口的接收端。

这些宽松的规则简化了Verilog模型的创建。几乎所有信号都可以声明为变量,而不考虑变量将如何接收其值。唯一需要net数据类型的时候是当信号将有多个驱动时,例如在双向端口上。

变量的SystemVerilog规则要求变量只能有一个单一来源。例如,如果在连续赋值的左侧使用变量,并且同一变量无意中连接到模块的输入端口,则会报告错误。Verilog在这种情况下需要net类型,这将允许多驱动逻辑。

5.用户定义的类型

Verilog不允许用户定义新的数据类型。SystemVerilog提供了一种使用typedef定义新数据类型的方法类似于C。然后,用户定义的类型可以像任何数据类型一样用于声明。

typedef int unsigned uint;
uint a,b;

6.枚举类型

在Verilog中,所有信号必须是net、变量或参数数据类型。这些数据类型的信号可以在其合法范围内具有任何价值。Verilog语言没有提供限制变量合法值的方法。

SystemVerilog允许用户使用类似C的语法定义枚举类型。枚举类型具有一组命名值。这些命名值是该枚举变量的合法值。

enum {WAIT, LOAD, DONE} states;

枚举类型可以用作用户定义的数据类型,允许该类型在许多地方使用。

typedef enum {FALSE, TRUE} boolean;

boolean ready;

boolean test_complete;

7.Structures和unions

SystemVerilog为Verilog语言添加了结构体。结构体允许将多个变量以一个通用名称分组在一起。然后,这些变量可以像任何变量一样独立分配,或者整个组可以在单个语句中分配。声明语法类似于C。

结构体定义可以使用typedef命名结构体的单个成员使用变量名和字段名之间的句点来引用。

IR.opcode = 1; 

结构的所有成员也可以作为一个整体分配,使用值列表,如C。

stack = {5, 200};

结构体可以分配给结构体,简化将一组变量转移到另一组变量。

IR = stack;

结构也可以传递给函数或任务,也可以传递给module端口。

8.数组

Verilog数据类型可以声明为数组。regnet类型也可以声明一个向量宽度。数组可以有任意数量的维度。Verilog将对数组元素的访问限制为一次只有一个元素。

SystemVerilog将Verilog数组称为unpacked array可以同时引用unpacked array的任何数量的维度。这允许将数组的全部或部分复制到另一个数组。

r2 = r1; // 复制整个数组

SystemVerilog还允许通过一次分配unpacked array的所有元素初始化为默认值。

r1 = {default: 8'hFF}; // 初始化数组

9.模块端口连接

Verilog限制了可以连接到模块端口的数据类型。只有net类型和变量reg、int或time才能通过模块端口。

SystemVerilog删除了对模块端口连接的所有限制。任何数据类型都可以通过端口传递,包括reals, arrays和structures。

10。操作符

Verilog没有C语言++和--赋值运算符。

SystemVerilog增加了几个新操作符,包括:

++和—递增和递减运算符+=, -=, *=, /=, %=, &=, ^=, |=等赋值运算符

这些运算符简化了许多类型操作的编码。例如,

11.unique和priority决策声明

Verilog定义了if...elsecase语句按源代码顺序进行评估。在硬件实现中,这需要额外的优先级编码逻辑。如果可以确定决策的所有分支都是相互排斥的(唯一的),那么综合将优化这个额外的逻辑。

Verilog语言不要求决策语句总是执行代码分支。如果发生这种情况,综合将为实现添加latch。

SystemVerilog增加了使用关键字unique和priority来指定决策语句的每个分支何时唯一或需要优先级评估的能力

unique和priority的修饰符指导仿真器、综合工具和其他工具确定要确定的硬件类型。工具可以使用这些信息来检查代码是否正确建模了所需的逻辑。

当指定priority决策修饰符时,所有工具都必须保持源代码的决策顺序。

当指定unique决策修饰符时,工具可以优化决策顺序。然而,如果工具确定两个代码分支可能同时为真,则所有工具都需要报告错误。

12.新的程序块

Verilog使用always过程块来表示时序逻辑、组合逻辑和latch逻辑的RTL模型。综合和其他软件工具必须从过程语句的上下文中推断出always过程块的意图。这种推断可能导致仿真和综合结果的不匹配。

SystemVerilog添加了三个新程序来明确指示逻辑的意图:always_ff、always_combalways_latch。

明确说明意图后,软件工具可以检查过程块功能是否与过程类型相匹配。如果代码与意图不匹配,则可以生成错误或警告。

13.task和function增强

SystemVerilog为Verilog任务和函数结构增加了一些增强功能。本文只提到了其中两个增强功能。

Void functionsVerilog语言要求函数具有返回值,并且函数调用接收返回值。

SystemVerilog添加了一个void数据类型,可以指定为函数的返回类型。空函数和任务的区别在于,函数有几个限制,例如不允许时间控制。这些限制有助于确保函数中的逻辑将正确综合。通过使用空函数而不是任务进行建模,工程师可以更有信心他们的模型将正确综合。

函数输入和输出:Verilog标准要求函数至少有一个输入,并且函数只能有输入。
SystemVerilog删除了这些限制。函数可以有任意数量的输入、输出和输入输出。

14.断言

SystemVerilog将断言添加到Verilog标准中。这些断言结构与PSL断言标准一致,但适应了Verilog语言的语法。

有两种类型的断言,即时和连续。即时断言作为编程语句执行,类似于if...else。这些断言使用简单,甚至可以简化简单模型的验证和调试。

顺序断言与Verilog代码并行执行,并在时钟周期上进行评估。顺序断言被描述为property一个property可以跨越多个时钟周期,这被称为sequenceSystemVerilog类似PSL的断言可以用简短、简洁的序列表达式来描述简单的序列和非常复杂的序列。

结论

SystemVerilog适合每个Verilog工程师!

SystemVerilog为Verilog-2001标准提供了一组主要扩展。Verilog的一些扩展对于建模和验证非常大的设计非常有用,并且编码更少。这些扩展使Verilog更易于使用,并且对每个与Verilog合作的工程师都真正有益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/601274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink 部署模式

目录 概述 部署模式 会话模式(Session Mode) 单作业模式(Per-Job Mode) 应用模式(Application Mode) 运行模式(资源管理模式) Standalone运行模式 会话模式部署 应用模式部署 Yarn运行模式 会话模式部署 单作业模式部…

pdf转word,结果为什么是图片?怎么才能转成可编辑的文字?

PDF转Word为何会变成图片?这是许多人在使用文件格式转换工具时经常遇到的问题。为了解答这个疑问,我们需要从多个方面来探讨这个问题。 首先,PDF文件本身的特点是一个重要的因素。PDF,即Portable Document Format,是一…

云计算技术发展趋势详解

云计算最全详解(图文全面总结) 云计算是技术趋势的未来,掌握它至关重要。从基础到高级,本文深入探讨云计算的方方面面,为您提供全面的理解。 云计算 云计算将计算转移到远程数据中心,让用户灵活、经济地访问资源。就像水电一样&…

激光雕刻优化:利用RLE压缩技术提高雕刻效率与节省能源成本

什么是 RLE ?RLE 在激光雕刻应用实现代码:总结 什么是 RLE ? RLE 是 Run-Length Encoding(游程长度编码)的缩写。这是一种数据压缩技术,它通过减少连续重复的数据来减小文件的大小。RLE 在图像处理、无损…

VS调试技巧

1. 什么是bug bug本意是“昆⾍”或“⾍⼦”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或 问题,简称程序漏洞。 “Bug” 的创始⼈格蕾丝赫柏(Grace Murray Hopper),她是⼀位为美国海军⼯…

C 语言文件输入/输出(I/O)函数大全

C 语言文件输入/输出(I/O)函数大全 1. fopen() 函数2. fclose() 函数3. fread() 函数4. fwrite() 函数5. fseek() 函数6. ftell() 函数7. rewind() 函数8. feof() 函数9. ferror() 函数10. clearerr() 函数 😊 C 语言文件输入/输出&#xf…

gradio图像复原界面改进

图像复原界面展示需要输入图像和复原图像在界面的清晰对比,修改两张图像为同样大小。 默认情况: intreface代码如下: interface gr.Interface(fnrestore, # 要调用的函数inputs[gr.Image(label"输入图像")], # 第一个输入&am…

AI大模型探索之路-训练篇16:大语言模型预训练-微调技术之LoRA

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

测试平台开发:Django开发实战之注册界面实现(上)

实现注册功能,大概包括以下几个步骤 1、设计ui ##字段 通过看数据库里面的user表里面的字段,可以大概知道需要几个字段: emailusernamepasswordpassword_confirm 生成简单的ui界面,复制这个html代码 然后在项目路径下面创建一…

22_Scala集合Seq

文章目录 Seq序列1.构建集合2.List集合元素拼接&&集合拼接3.可变Seq&&List3.1 ListBuffer创建3.2 增删改查3.3 相互转化 Appendix1.Scala起别名2.Seq底层3.关于运算符操作: :4.空集合的表示 Seq序列 –Seq表示有序,数据可重复的集合 1.构建集合 …

整体安全保障服务方案包括哪些方面?

整体安全保障服务方案是一套综合性的措施,旨在保护企业的网络、数据和资源免受各种威胁。主要包含检测、加固、应急保障、安全运营、攻防演练等多项核心能力与服务。 ​安全狗通过专业团队、工具以及专业运营流程,提出了新一代整体安全保障思路&#xff…

开源代码分享(28)-含分布式光伏的配电网集群划分和集群电压协调控制

参考文献: [1] Chai Y , Guo L , Wang C ,et al.Network Partition and Voltage Coordination Control for Distribution Networks With High Penetration of Distributed PV Units[J].IEEE Transactions on Power Systems, 2018:3396-3407.DOI:10.1109/TPWRS.2018…

【深度学习】实验1 波士顿房价预测

波士顿房价预测 代码 import numpy as np import matplotlib.pyplot as pltdef load_data():# 1.从文件导入数据datafile D:\Python\PythonProject\sklearn\housing.datadata np.fromfile(datafile, sep )# 每条数据包括14项,其中前面13项是影响因素&#xff0c…

长方形盒子能容纳定宽的长方形物体最大长度

问题 已知长方形盒子长度a和宽度b,放入一宽度w的长方形物体,求长方形物体最大长度L。 答案 MS Excel公式如下(其中B1a,B2b,B3w): L SQRT(B1^2B2^2)-B1*B2*B3*2/(B1^2B2^2)注意 当求得 L ≤…

时间复杂度与空间复杂度(上篇)

目录 前言时间复杂度 前言 算法在运行的过程中要消耗时间资源和空间资源 所以衡量一个算法的好坏要看空间复杂度和时间复杂度, 时间复杂度衡量一个算法的运行快慢 空间复杂度是一个算法运行所需要的额外的空间 一个算法中我们更关心的是时间复杂度 时间复杂度 时…

使用idea管理docker

写在前面 其实idea也提供了docker的管理功能,比如查看容器列表,启动容器,停止容器等,本文来看下如何管理本地的docker daemon和远程的dockers daemon。 1:管理本地 双击shift,录入service: …

24年审计师报名时间汇总所需材料提前准备

2024审计师报名本周开始(5月10日起),各地报名时间不一,报名指南整理好了! ✅全国报名时间汇总报名费用资格审核:P1~P2。 ✅2024年审计师考试科目: 《审计相关基础知识》和《审计理论与实务》 ✅…

如何创建微信小程序?只需3步完成小程序制作

微信,中国最大的社交媒体应用程序,几个月前推出了微信小程序,这一神奇的功能立即大受欢迎。这些小程序让在中国注册的商业实体所有者创建一个小程序来与微信用户互动。这些小程序不需要在用户手机上进行任何安装,只需通过微信应用…

HP Z620 服务器打开VTx虚拟技术

在使用Virtual Box的时候,虚拟主机启动报错:提示需要VTx。于是到bios里面去设置VTx。 这里有个小坑,就是HP 的bios配置里面,VTx不在常规的“System Configuration”、“Advanced”等地方,而是在“Security”菜单里&…

关于2024年上半年软考考试批次安排的通告

按照《2024年计算机技术与软件专业技术资格(水平)考试工作安排及有关事项的通知》(计考办〔2024〕1号)文件精神,结合各地机位实际,现将2024年上半年计算机软件资格考试有关安排通告如下: 一、考…
最新文章