当前位置: 首页 > 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.mrgr.cn/news/67942.html

相关文章:

  • 什么是Mysql事务-特性-类型
  • 《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明
  • 真正的Agent来了,智谱新模型AutoGLM的相关应用,以及AutoGLM的python代码部署实战
  • 阿里云k8s-master部署CNI网络插件遇到的问题
  • Python自动化运维项目管理实践:从需求分析到项目交付
  • flex与Bison 词法语法分析
  • 零基础小白 Python这样学就对啦!——05篇
  • RMQ消息发送失败处理
  • 解析静态链接
  • 理解Web登录机制:会话管理与跟踪技术解析(二)-JWT令牌
  • MP2315 DC-DC电源芯片引脚功能说明
  • 基于STM32的温室自主灌溉系统(论文+源码)
  • 初识arkts2
  • 父组件调用函数式子组件,并向子组件传递函数参数。
  • PCL截取ROI
  • 123456789
  • CORS(跨域资源共享)和SOP(同源策略)
  • C++从零到满绩——命名空间、输入输出and缺省参数
  • 架构师:如何提高web网站的请求并发响应量?
  • 高速电机精确控制
  • kafka+zookeeper的搭建
  • 【笔记】变压器-热损耗-频响曲线推导 - 04 额定功率处损耗特性
  • 【jmeter】jmeter的线程组功能的详细介绍
  • lua入门教程:ipairs
  • JMM内存模型详解
  • 【wxWidgets GUI设计教程 - 高级布局与窗口管理】