当前位置: 首页 > news >正文

【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

结果:
在这里插入图片描述
分析:
条件分支重叠,报出警告;

六.接口

http://www.lryc.cn/news/478883.html

相关文章:

  • 【点击劫持漏洞(附测试代码)】
  • 【AD】3-4 在原理图中放置元件
  • 协程2 --- 相关概念
  • Hadoop-005-HDFS分布式文件存储原理
  • 【多线程入门篇】 创建线程以及线程的属性
  • 三十四、Python基础语法(文件操作-上)
  • 【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场
  • 03 Oracle进程秘籍:深度解析Oracle后台进程体系
  • AndroidStudio通过Bundle进行数据传递
  • Linux篇(文件管理命令)
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:数据存储分区的艺术与实践(下)(2/30)
  • 【数据结构】B树
  • Docker 容器网络模式详解
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.11
  • 小游戏开发,出现了降本增效的技术?
  • (4)Java 编程基础概览:Java中的输入输出操作与代码注释详解
  • Git使用指南
  • 【linux】再谈网络基础(一)
  • Unknown at rule @tailwindscss(unknownAtRules)
  • IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版
  • 高级 SQL 技巧详解
  • 移除元素(java)
  • 【Linux】shell脚本:检测文件是否存在,如存在则删除
  • Git代码托管(三)可视化工具操作(1)
  • How to use ffmpeg to convert video format from .webm to .mp4
  • Halcon 从XML中读取配置参数
  • hive表内外表之间切换
  • 电子邮件营销软件哪个好?
  • OpenAI大事记;GPT到ChatGPT参数量进化
  • springboot020基于Java的免税商品优选购物商城设计与实现