【SystemVerilog】SV对Verilog的语法改进

news/2024/5/19 20:29:38 标签: fpga开发, systemverilog, 数字IC

SystemVerilog对Verilog兼容,就像C++兼容C一样,前者是后者的超集。


目录

一、基本数据类型的改进

1.1SV对表示数字的语法改进

二、SV对设计意图的关键字细化

三、void函数

四、循环语句性能增强

五、隐含的端口连接

六、SV模块的接口


一、基本数据类型的改进

相对于Verilog来说,SystemVerilog引进了一些新的数据类型,它们具有如下优点:

        (1)双状态数据类型:更好的性能,更低的内存消耗。

        (2)队列、动态和关联数组:减少内存消耗,自带搜索和分类功能。

        (3)类和结构:支持抽象数据结构。

        (4)联合和合并结构:允许对同一数据有多种视图(view)。

        (5)字符串:支持内建的字符序列。

        (6)枚举类型:方便代码编写,增加可读性。

更多数据类型介绍,请参考其他博客内容:

【SystemVerilog】数据类型(1)logic

【SystemVerilog】数据类型(2)定宽数组和动态数组

【SystemVerilog】数据类型(3)数组的方法

【SystemVerilog】数据类型(4)队列、枚举

  1. SV使用logic来替代reg/wire ,不必再纠结使用reg/wire的烦恼;
  2. SV新增2-state数据类型: bit/int/byte/ ;  双状态,即 0 / 1 ;而verilog中reg/wire都是四状态: 0 /1 /X /Z;

​​​​​​​1.1SV对表示数字的语法改进

SystemVerilog

Verilog

‘x

‘bx

‘z

‘bz

‘0

‘b0

‘1

-1(-1的二进制补码,所有位为1)

二、SV对设计意图的关键字细化

always关键字的细化

Verilog

SystemVerilog

always

always_comb

组合逻辑

always_latch

锁存器

always_ff

时序逻辑

SV允许仿真工具进行某些语法功能检查,当生成电路与设计意图不符时将报错

unique/priority

unique case

相当于使用full_case + parallel_case

即:必须有且只有一个条件选项与条件表达式匹配。

priority case

相当于verilog中的full_case编译选项

即:至少有一个条件选项与条件表达式相符;

若存在多个条件选项的值与条件表达式匹配,则必须执行第一个匹配分支。

unique if..else

取消判断顺序优先级

priority if..else

表示分支的次序是重要的,需按照原有次序进行优先级编码

注:关于full_case及parallel_case的综合编译选项,其实是对代码书写不规范而做的一种约束,如果我们代码书写规范(如:使用default来生成完备的case)就不需要考虑full_case及parallel_case。徒增烦恼罢了。

更多详细内容请参考博文:

【SystemVerilog】SV对设计意图的细化always和unique/priority

三、void函数

        回顾下verilog中的函数及任务:函数有输入,有返回值,不能有延时,不能调用任务;任务可以调用函数。那么如果想调用任务怎么办呢?SV提供了void函数,可以将无延时的任务改写为void函数进行调用。

void函数:

不能等待;

不能包括延时;

不能包括事件触发;

被always_comb搜索到的信号自动加入敏感列表。

举个栗子:

always_comb
    orf1(a);

function void orf1;
    input a;
    y = a | b | c;
endfunction

四、循环语句性能增强

verilog中的循环语句:

integer i ;

for(i=0;i<10;i=i+1)begin : for_loop

    //...

end

SV提供了 for/foreach/ do..while

for

for(int i =0;i< MAX;i++)  

变量i在循环范围内有效,增加了++操作符代替i=i+1显示增加;

foreach

foreach(array[j])

    $display(array[j]);

遍历数组,变量j自动声明,且只在循环范围内有效;

do..while

do

    a++;

while (a>MAX);

foreach/do...while更多介绍及示例请参考上述数据类型博文。

五、隐含的端口连接

verilog的端口信号连接:

端口名连接

mod_a m1 ( .clk(clk) , rst(rst),.a(a));

顺序连接

mod_a m1(clk,rst,a);

SV新增的隐含的端口连接:(端口名必须相同)

.name

mod_a m1(.a, .clk, .rst);

.*

mod_a m1(.*);

需要注意的是:

  1. 在同一个实例中禁止混用 .name 与 .* ;
  2. 在同一个实例中可以同时使用.name 和 .name(signal)  ;
  3. 在同一个实例中可以同时使用.* 和 .name(signal) ;
  4. 必须用.name(signal)的情况
  • 位宽不匹配 : .a ( a[9:0]) ;
  • 名称不匹配 : .a ( b ) ;
  • 没有连接项 : .a (  ) ;

也就是说,我们使用SV进行端口信号连接时,只需要列出端口连接例外的情况即可:

mod_a m1( .* , .a ( b ) );

六、SV模块的接口

SV使用接口对于verilog上百端口信号连接来说也就方便了10086倍吧~

这个后续单独介绍。

参考资料 : 《绿皮书》 《systemverilog讲座》


http://www.niftyadmin.cn/n/1076095.html

相关文章

【数字IC第一步】Linux系统安装(含常用IC软件)

为了简易入手&#xff0c;本虚拟机系统集成了主流IC软件。 资源来自网络&#xff0c;也当共享于网络。 链接&#xff1a;https://pan.baidu.com/s/1Oh-CTBuorHDkQkfGhmm_Wg 提取码&#xff1a;1csc 目录 前言 一、VMware安装 二、VMware运行 三、软件介绍 后记 前言…

【Verilog】常见bug之for循环

Debug系列文章&#xff0c;想起哪个坑就把它埋了~ 本文分享一个for循环的坑&#xff0c;见过了就别再踩了 在Verilog中&#xff0c;我们一般使用for语句进行循环操作。 假设场景&#xff1a; 某项目中&#xff0c;前面代码用到了一个二维数组array[3:0][2:0],如果array[i] 3…

【Verilog】通过任务(task)完成3个8bit数据的冒泡排序

题目&#xff1a; 设计一个模块&#xff0c;通过任务完成3个8位2进制输入数据的冒泡排序。要求&#xff1a;时钟触发任务的执行&#xff0c;每个时钟周期完成一次数据交换的操作。 Verilog代码&#xff1a; module sort(input sys_clk,input sys_rst,input [7:0] a,in…

【Debug】FPGA通过PCIe与主机通信,上传数据一直为0?

一杯茶&#xff0c;一支烟&#xff0c;一个BUG改一天。 项目背景 某视频项目中&#xff0c;图像数据通过FPGA接收、缓存后&#xff0c;通过PCIe上传至主机内存&#xff08;c2h&#xff09;。主机可对接收到的数据进行实时显示&#xff0c;也支持将主机的图像数据下发&a…

【Verilog】一文了解verilog基础语法

Verilog很简单&#xff0c;always..if..else走天下。 ——鲁迅 目录 前言 一、Verilog HDL简介 二、Verilog模型 三、Verilog模块 四、Verilog数据类型 4.1常量 4.2参数型 4.3变量 4.3.1 wire型 4.3.2 reg型 4.3.3 memory型 五、运算符 六、赋值语句和块语句 6.…

【Verilog】CRC校验码生成器原理及verilog实现

目录 一、CRC的基本原理 二、CRC生成步骤 2.1举个栗子 三、Verilog实现 四、参考资料 4.1 CRC在线计算器 一、CRC的基本原理 CRC &#xff1a;Cyclic Redundancy Check循环冗余校验码 将被处理的报文比特序列当做一个二进制多项式A(x)的系数&#xff0c;任意一个由二进制…

[转]OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

【OpenCV入门教程之十三】OpenCV图像金字塔&#xff1a;高斯金字塔、拉普拉斯金字塔与图片尺寸缩放 2014-05-18 18:58 36007人阅读 评论(54) 收藏 举报本文章已收录于&#xff1a; OpenCV知识库本系列文章由浅墨_毛星云 出品&#xff0c;转载请注明出处。 文章链接&#xff…

【Verilog】同步FIFO原理及verilog实现(参数化)

旨在学习理解&#xff0c;项目中还是用成熟IP靠谱~ 目录 一、FIFO原理 二、同步FIFO设计 2.1 位宽和深度 2.2 空、满标志 2.3 FIFO计数 2.4 ram模型 2.5 读/写操作 三、​​​​​​​verilog代码 四、仿真验证 后记 一、FIFO原理 FIFO( First Input First Output)是…