【IC验证】systemverilog的设计特性
systemverilog的设计特性
- 一.概述
- 二.面向硬件的过程语句块
- 1.说明
- 2.always_comb
- 2.always_latch
- 3.always_ff
- 三.关系运算符
- 1.说明
- 2.例子
- 四.inside判定符
- 1.说明
- 2.例子
- 五.条件分支语句
- (1)说明
- (2)例子(case和unique case的区别)
- 六.接口
一.概述
systemverilog为了便于设计,添加了一些可综合的设计特性。其中主要包含以下部分:
添加了always_comb、always_latch、always_ff等过程块;
添加了关系运算符==?和!=?,表示进行关系比对时不考虑带**?**的位;
添加了inside判定符,用于判定一个变量的值是否在一系列值中;
完善了case条件分支语句,添加了unique case和priority case;
添加了接口(interface),从而将通信和协议检查进一步封装;
添加了类似C语言的数据类型,例如int、byte;
添加了用户自定义类型、枚举类型、结构体类型;
添加了类型转换,常用的有$cast(T,S)方法或’();
添加了包(package)从而使得多个设计之间可以共享公共类型和方法;
添加了方便的赋值操作符,例如++,+=,===;
添加了priority和unique case语句;
二.面向硬件的过程语句块
1.说明
always语句块被细分为了:
always_comb:组合逻辑语句块;
always_latch:锁存器逻辑语句块;
always_ff:时序逻辑语句块;
作用:EDA软件可以更准确地检查设计的实现意图;
2.always_comb
always_comb可以自动嵌入敏感事件列表;
always_comb可以禁止共享变量,即赋值左侧的变量无法被另外一个过程块所赋值;
软件会检查该过程块,如果其所表示的不是组合逻辑,那么就会发出警告;
always_comb会在0时刻自动触发一次,无论在0时刻是否有敏感信号列表中的信号发生变化;
铭感事件列表的特点:
@*不要求可综合的建模要求,但always_comb则会限制其他过程块对同一变量进行赋值;
@*敏感列表可能不完全,例如如果一个过程块调用一个函数,那么@*则只会将该函数的形式参数自动声明到敏感事件列表,而不会将该函数展开;
always_comb则将被调用函数中可能参与运算的其他信号也声明到敏感事件列表中;
2.always_latch
always_latch表示锁存逻辑,会自动插入敏感事件列表;
EDA工具会自动检查always_latch是否被真正实现了锁存逻辑;
3.always_ff
敏感事件列表必须要指明posedge或者negedge,从而使得EDA工具实现同步或者异步对的复位逻辑;
EDA工具也会验明always_ff是否被实现了时序逻辑;
三.关系运算符
1.说明
添加了关系运算符==?和!=?,表示进行关系比对时不考虑带**?**的位;
2.例子
(1)代码:
module oper_char;reg [3:0] a = 4'b01zx;initial beginif(a ==? 4'b01??)$display(" yes ");else$display(" no");end
endmodule
(2)结果:
用verilog编译:报错

用systemverilog编译执行:

四.inside判定符
1.说明
添加了inside判定符,用于判定一个变量的值是否在一系列值中;
2.例子
module oper_char;reg [3:0] a = 4'd3;reg [3:0] b = 4'd5;initial beginif(a inside {4'd0,4'd1,4'd2,4'd3,4'd4})$display(" a:yes ");else$display(" a:no");if(b inside {4'd0,4'd1,4'd2,4'd3,4'd4})$display(" b:yes ");else$display(" b:no");end
endmodule
结果:

五.条件分支语句
(1)说明
完善了case条件分支语句,添加了unique case和priority case;
case条件分支:各条件分支可以重叠,在判定时从上至下进行匹配,匹配后跳出;
unique case:要求各条件分支必须互斥,且必须满足一个分支;
priority case:各条件分支可以重叠,在判定时从上至下进行匹配,匹配后跳出,强调优先级;
(个人看法:目前没有看出case和priority case的明显区别)
(2)例子(case和unique case的区别)
case的例子:
module oper_char;reg [3:0] a = 4'b0011;initial begincase(a)4'b0001: $display("case1 yes");4'b0011: $display("case2 yes");4'b0011: $display("case3 yes");default: $display("default yes");endcaseend
endmodule
结果:

分析:
条件分支2和条件分支3重叠,优先匹配前面的;
unique case的例子:
module oper_char;reg [3:0] a = 4'b0011;initial beginunique case(a)4'b0001: $display("case1 yes");4'b0011: $display("case2 yes");4'b0011: $display("case3 yes");default: $display("default yes");endcaseend
endmodule
结果:

分析:
条件分支重叠,报出警告;
六.接口
相关文章:
【IC验证】systemverilog的设计特性
systemverilog的设计特性 一.概述二.面向硬件的过程语句块1.说明2.always_comb2.always_latch3.always_ff 三.关系运算符1.说明2.例子 四.inside判定符1.说明2.例子 五.条件分支语句(1)说明(2)例子(case和unique case的…...
【点击劫持漏洞(附测试代码)】
漏洞描述 点击劫持(Clickjacking)是一种网络攻击技术,攻击者通过将一个恶意的页面或按钮隐藏在合法网站的页面下,诱使用户在不知情的情况下点击隐藏的内容,从而触发攻击者设计的操作。这种攻击通常会导致用户无意中执…...
【AD】3-4 在原理图中放置元件
1.打开原理图库,选中元件点击放置 2.点击工程右键,选择,,进行编译,点击Components,选中鼠标点击拖动即可...
协程2 --- 相关概念
文章目录 协程切换方案协程库的完善程度协程栈方案协程调度实现有栈协程与无栈协程对称协程与非对称协程 协程切换方案 具体使用和解析看栈切换那个博客 使用setjump、longjump c语言提供的方案 可参考:libmill 使用操作系统提供的api:ucontext、fiber …...
Hadoop-005-HDFS分布式文件存储原理
一、HDFS数据如何存储 分布式存储:每个服务器(节点)存储文件的一部分, 本文提到的part只是为方便理解, 指的文件部分数据, 并不是真实存在的概念 #mermaid-svg-qjJMG6r2bzRNcWkF {font-family:"trebuchet ms",verdana,arial,sans-s…...
【多线程入门篇】 创建线程以及线程的属性
大家好呀 我是浪前 今天给大家讲解的是创建线程以及线程的属性 祝愿所有点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!! 点我领取迎娶白富美大礼包 🍓多线程编程: 前言: 我们为什么不用多进程?…...
三十四、Python基础语法(文件操作-上)
一、介绍 文件:可以储存在长期储存设备上的一段数据,在计算机储存的数据都是二进制的形式储存的,我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。 二、文件操作 1.打开文件 打开文件:文件是在硬盘中储…...
【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场
第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 官方信息 会议官网:www.icbar.net 2024 4th International Conference on Big Data, Art…...
03 Oracle进程秘籍:深度解析Oracle后台进程体系
文章目录 Oracle进程秘籍:深度解析Oracle后台进程体系一、Oracle后台进程概览1.1 DBWn(Database Writer Process)1.2 LGWR(Log Writer Process)1.3 SMON(System Monitor Process)1.4 PMON&#…...
AndroidStudio通过Bundle进行数据传递
作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:AndroidStudio 目录 1.新建活动 2.修改页面布局 代码: 效果: 3.新建类ResultActivity并继承AppCompatActivity 4.新建布局文件activity_result.xml 代…...
Linux篇(文件管理命令)
目录 一、Linux下文件命名规则 1. 可以使用哪些字符 2. 文件名的长度 3. 文件名的大小写 4. Linux文件扩展名 二、目录创建与删除 1. 目录创建 1.1. mkdir创建目录 1.2. mkdir -p 递归创建目录 1.3. 使用mkdir同时创建多个目录 2. 目录删除(必须是空目录&…...
大数据新视界 -- 大数据大厂之 Impala 性能优化:数据存储分区的艺术与实践(下)(2/30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
【数据结构】B树
B树(B-Tree)是一种自平衡的多叉搜索树,广泛应用于数据库系统和文件系统中,以便高效地进行数据存储和检索。它的设计目标是减少磁盘I/O操作,使得在大量数据的情况下依然能够进行快速的查找、插入和删除操作。 B树的特点…...
Docker 容器网络模式详解
Docker 容器网络模式详解 1.1 引言 1.1.1 Docker 网络简介 Docker 是一个开源的应用容器引擎,它允许开发者将应用和依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器采用沙箱机制,彼此…...
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.11
目录 第四门课 卷积神经网络(Convolutional Neural Networks)第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition &Neural style transfer)4.11 一维到三维推广(1D and 3…...
小游戏开发,出现了降本增效的技术?
中国经济下行大周期下,要说受影响程度较小的,非游戏行业莫属了。 小游戏的快速增长主要得益于其便捷的使用方式和轻量化的特点。小游戏通常无需下载,即点即玩,适合在碎片时间内进行娱乐,这种特性吸引了大量用户。此外…...
(4)Java 编程基础概览:Java中的输入输出操作与代码注释详解
目录 1. 控制台输出操作2. 控制台输入操作代码解释:3. 代码注释3.1 单行注释3.2 多行注释3.3 文档注释3.4 注释的重要性3.5 注意事项在Java编程语言中,输入与输出(I/O)操作扮演着举足轻重的角色。它们允许程序与外界环境进行数据的交互,无论是从用户处获取信息,还是向用户…...
Git使用指南
目录 工作机制基本框架:流程图 基本命令分支操作远程仓库本地仓库关联远程仓库 参考 工作机制 基本框架: Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。Index / Stage:暂存区,最早…...
【linux】再谈网络基础(一)
1. 再谈 "协议" 协议是一种 "约定",在读写数据时, 都是按 "字符串" 的方式来发送接收的. 但是这里我们会遇到一些问题: 如何确保从网上读取的数据是否是完整的,区分缓冲区中的由不同客户端发来的数据 2. 网…...
Unknown at rule @tailwindscss(unknownAtRules)
一、前言 整合 tailwindcss 后,发现指令提示警告 Unknown at rule tailwindscss(unknownAtRules),其实是 vscode 无法识别 tailwindscss 指令,不影响使用,但是对于我这种有编程洁癖的人来说,有点膈应。 二、解决方案…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...
