【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 指令,不影响使用,但是对于我这种有编程洁癖的人来说,有点膈应。 二、解决方案…...
超越跑分:深入CoreMark源码,看它如何“拷问”RISC-V CPU的三大核心能力
超越跑分:深入CoreMark源码,看它如何“拷问”RISC-V CPU的三大核心能力 在嵌入式处理器性能评估领域,CoreMark早已成为行业标准测试工具。但大多数开发者仅关注最终得分,却鲜少探究这个不足3000行代码的基准测试程序如何精准"…...
Cadence软件安装后找不到图标?别慌,手把手教你从开始菜单启动Capture和Allegro
Cadence软件安装后找不到图标?别慌,手把手教你从开始菜单启动Capture和Allegro 刚完成Cadence软件安装的兴奋感,往往会被桌面上空空如也的现状瞬间浇灭。这就像拿到一台新电脑却发现没有电源键——明明安装了专业EDA工具,却连入口…...
保姆级教程:红米K70澎湃OS解锁BL后,如何用Delta面具(德尔塔面具)一键Root
红米K70澎湃OS深度Root指南:Delta面具全流程实战解析 在安卓玩机圈里,Root始终是释放设备潜力的终极钥匙。对于手持红米K70并已解锁Bootloader的进阶用户而言,Delta面具(Magisk Delta)无疑是当前最安全、最稳定的Root解…...
Windows 11/10下VMware Workstation 17开机自启虚拟机完整配置流程(含权限修复与延迟启动设置)
Windows 11/10下VMware Workstation 17虚拟机开机自启全攻略 每次重启开发机都要手动启动一堆虚拟机?数据库服务、测试环境、持续集成节点需要724小时待命?VMware Workstation 17的自动启动功能能让你彻底告别重复劳动。作为在本地搭建服务环境的开发者&…...
Augmentoolkit事实数据生成管道:打造精准问答AI的终极方法
Augmentoolkit事实数据生成管道:打造精准问答AI的终极方法 【免费下载链接】augmentoolkit Create Custom LLMs 项目地址: https://gitcode.com/gh_mirrors/au/augmentoolkit 想要创建专属的领域专家AI吗?Augmentoolkit事实数据生成管道为您提供了…...
VSCode Mermaid Preview:面向技术团队的实时图表协作解决方案
VSCode Mermaid Preview:面向技术团队的实时图表协作解决方案 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 在技术文档编写、系统架构设计和项目规划过程中&…...
程序员的团队协作:如何与测试、产品团队高效协作
在软件研发的复杂链条中,程序员、测试人员与产品经理如同三个紧密咬合的齿轮,任何一环的卡顿都可能导致整个项目的停滞。对于程序员而言,跳出“专注代码实现”的单一视角,建立与测试、产品团队的高效协作模式,不仅能减…...
Seedance2.0内容创作干货!学会这四点教你用 Seedance 2.0 拍出电影感!
Seedance 2.0 之所以能把商业广告、影视制作的质感拉满,核心在于它对“全参调用”的支持。想彻底驯服它,建议你在输入 Prompt 和参数时注意以下四点:1. 结构化你的提示词不要把所有想法堆砌成一句话。Seedance 2.0 对结构化文本的理解极强&am…...
为什么你的无锁队列在压测中崩了——从 ABA 问题到 Hazard Pointer,追踪 lock-free 内存回收的生死时序
你的 lock-free queue 通过了所有单元测试,在 4 线程环境下稳定跑了整整一周,性能数据漂亮,直到你把压测线程数拉到 64,跑了 17 分钟后收到 SIGSEGV,打开 coredump 一看,崩溃地址指向的那块内存已经被 free 掉又被另一次 enqueue 重新 allocate 成了一个全新的节点,而 d…...
用STM32F103C8T6驱动总线舵机:手把手教你实现机械臂逆运动学(附完整代码)
STM32F103C8T6驱动总线舵机实现机械臂逆运动学全流程解析 第一次尝试用STM32控制机械臂时,看着六个关节不知如何协调运动,直到理解了逆运动学原理才豁然开朗。本文将带你从零实现一个基于STM32F103C8T6的四自由度机械臂控制系统,重点解决如何…...
