0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈Verilog-95、Verilog-2001与System Verilog之间的区别

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2021-06-21 14:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

发展历史

1984年,Verilog开始作为一种专用的硬件建模语言使用,取得了相当大的成功。1990年,Cadence Design Systems公司将该语言面向公众开放,作为试图与VHDL相抗衡的竞争手段的一部分。1995年,Verilog成为IEEE标准1364-1995,也就是所谓的Verilog-95。

Verilog-95以后不断演变,2001年成为IEEE的另一个标准1364-2001,即所谓的Verilog-2001。与过去的标准相比,它包含了很多扩展,克服了原来标准的缺点,并引入了一些新的语言特征。2005年,IEEE发布了1364-2005标准,称为Verilog 2005。它修改了一些规范,并具有一些新的语言特征。

IEEE发布了一些System Verilog的标准。最新的标准是1800-2009,是在2009年发布的。System Verilog是Verilog的一个超集,旨在更好地支持设计验证功能,提高仿真性能,使语言变得更加强大、更易于使用。

Verilog-2001是大多数FPGA设计者主要使用的Verilog版本,得到了所有的综合和仿真工具支持。

Verilog-2001

Xilinx 的 XST 和其他 FPGA 综合工具都有一个选项, 可启用或禁用 Verilog-2001 标准。XST 使用-Verilog2001 命令行选项, 而 Synplify 使用“ set_option-vlog_std v2001 ” 命令。下面简要概括了 Verilog-95 和 Verilog-2001 之间最主要的区别。

Verilog-2001 增加了对带符号数补码算术运算的支持。而在 Verilog-95 中, 开发者需要使用按位操作进行带符号数的运算。Verilog-2001 中的相同功能可以使用内置操作符和关键字进行描述。在自动扩展‘bz 和’bx 赋值方面, Verilog-95 中的代码:

wire [63:0] mydata = ‘bz;

将为 mydata [31:0]分配数值 z,并为 mydata [63:32]分配数值 0。而Verilog-2001将’bz和‘bx赋值扩展到变量的全部宽度。generate结构通过使用if/else/case语句,允许Verilog-2001控制实例和语句例化。通过使用generate结构,设计者可以很容易例化具有正确连接的一组实例。以下是使用generate结构的几个例子。

/ / 一组实例module adder array(input [63:0] a,b, output [63:0] sum);generategenvar ix; for (ix=0; ix《=7; ix=ix+l) begin : adder_array adder add (a[8*ix+7 -:8], b[8*ix+7 -:8], sum[8*ix+7 - :8]); endendgenerateendmodule // adder

//arraymodule adder(input [7:0] a,b, output [7:0] sum ); assign sum = a + b;endmodule // adder// if.。。。。。.else 语句module adder_array(input [63:0] a,b, output [63:0] sum);

parameter WIDTH = 4;

generateif (WIDTH 《 64) begin : adder_gen2 assign sum[63 -: (64-WIDTH)] =’b0; adder # (WIDTH) adder1(a[WIDTH-1 -:WIDTH], b[WIDTH-1 -:WIDTH],sum[WIDTH-1 -: WIDTH]);endelse begin:adder_default adder # (64) adder1(a, b, sum);endendgenerateendmodule // adder_array

// case statementmodule adder_array(input [63:0] a,b, output [63:0] sum);generatecase (WIDTH) 1: begin : ease1 assign sum[63 -: 63] = ‘b0; adder #(WIDTH) adder1(a[0], b[0], sum[0]); end default: begin : def adder # (64) adder1(a, b, sum); endendcaseendgenerateendmodule // adder_array

Verilog-2001增加了对多维数组的支持。综合工具对多维数组的综合设置了一些限制。例如,XST支持的数组维数最多为2,不允许一次选择多个数组元素。不能将多维数组传递给任务或函数。下面举例说明如何描述一个256x16线网型元素的数组,宽度为4位。

wire [3:0] multi_dim_array [0:255][0:15];

更简洁的端口说明如下所示。

/ / Verilog-95module adder(a,b,sum); input [7:0] a,b; output [7:0] sum;assign sum = a + b;endmodule // adder

// Verilog-2001module adder(input [7:0] a,b, output [7:0] sum ); assign sum = a + b;endmodule // adder

Verilog-2001增加了对指数或幂运算符“**”的支持。在许多应用中,例如用于计算存储器的深度,这是非常方便的。

综合工具支持指数时有一些限制。XST要求两个操作数都是常数,并且第二个数为非负数。数值x和z是不允许使用的。如果第一个操作数是2,则第二个数是可变的。公众号:OpenFPGA

下面举例说明如何使用指数。localparam BASE = 3, EXP = 4;assign exp_out2 = BASE**EXP;

/ / 该代码综合为移位寄存器assign exp_out1 = 2**exp_in;

使用逗号分隔敏感信号列表。// Verilog-95always @(a or b); sum = a + b;

/ / Verilog-2001always @(a,b); sum=a + b;always @(*); sum=a + b;

要求的线网型信号说明Verilog-95 要求所有不是端口且被连续赋值驱动的 1 位线网型信号必须要说明。这一要求在 Verilog-2001 中已被删除。

取而代之的是, Verilog-2001 标准中增加了一个新的’default_nettype 编译器指令。如果该指令被赋值为“none“,则必须声明所有1位线网型信号。公众号:OpenFPGA

/ / Verilog-95wire sum;assign sum = a+b;

// Verilog-2001wire sum; / / 不 需 要assign sum = a + b;

‘default_nettype nonewire sum; // 必须的assign sum = a + b;

System Verilog

System Verilog标准被设计为一个统一的硬件设计、规范和验证语言。这是一个大型标准,由几个部分组成,包括设计规范方法、嵌入式说明语言、函数覆盖、面向对象编程及约束。System Verilog的主要目标是建立统一的设计和验证环境,兼具VerilogVHDL和硬件验证语言的最好功能及编译优势。

System Verilog将多样化的工具和方法进行合并,消除了软件和硬件工程师在系统设计上的隔阂,以便共享成果。System Verilog中包含几个现有Verilog规范的扩展,用于减少代码行数,鼓励设计复用,并提高仿真性能。

同时,它还完全兼容以前的Verilog的各种版本。System Verilog得到多数商业模拟器的支持,包括ModelSim、VCS、NCSim等。System Verilog标准的可综合部分能被Synplify和Precision综合工具支持。设计综合及验证环境经常要使用System Verilog和Verilog语言编写。

顶层模块既在Verilog中实现,又在SystemVerilog中实现。这使得它与所有不支持System Verilog的FPGA综合工具相兼容。该设计可以很容易地与System Verilog编写的验证库集成在一起。以下简要概述System Verilog的一些独特功能。公众号:OpenFPGA数据类型

2个状态的数据类型接受数值0和1。4个状态的数据类型接受数值0、1、z和x。System Verilog提供了创建信号和变量的自定义分组,这类似于C语言。自定义分组定义了以下功能:类型定义、枚举类型、结构、合并和静态强制类型转换casting)。下面的例子中使用了几个System Verilog的数据类型。

bit x;enum {STATE1, STATE2, STATE3} state;typedef enum{ red=0,green,yellow } Colors;integer a,b; a=green*3 // 3赋值给a b = yellow+green;struct { bit [31:0] characteristic; bit [31:0] mantissa; } float_num;float_num.characteristic = 32’h1234_5678;float num.mantissa = 32‘h0000_0010;typedef union{ int u1; shortint u2;} my_union;

System Verilog 提供了强类型功能,以避免困扰 Verilog 设计的多种解译和条件竞争。端口连接SystemVerilog提供了“.name”和隐含的“.*”方法来描述端口连接,这大大压缩了代码长度。公众号:OpenFPGA

/ / Verilogadder_add (a,b,sum);// SystemVerilogadder_add (.a,.b,.sum);adder_add (。 *);

interface 和 modportSystem Verilog中的interface(接口)和modport(模块端口)说明模块实例之间的端口列表和互连。下面给出一个简单的例子。

/ / 定 义 接 口interface adder_if; logic [7:0] a, b; logic [7:0] sum;endinterface: adder_if

module top;/ / 例 化 接 口 adder_if adder_if1(); adder_if adder_if2();/ / 将 接 口连接到模块实例 adder add1(adder_if1); adder add2 (adder_if2);endmodulemodule adder(adder_if if);/ / 访 问 接 口 assign if.sum = if.a + if.b;endmodule / / adder

面向对象编程(OOP)System Verilog可以更好地支持面向对象编程(OOP)。OOP通过建立带自包含功能的数据结构而提高了抽象层次,这种数据结构允许数据封装(encapsulation)隐藏实现细节和增强代码的复用。

约束、覆盖和随机度System Verilog为覆盖驱动验证(coverage-driven verification)、定向(directed)和约束随机测试平台(constrained random testbench)开发提供了广泛的支持。断言断言(assertion)通过在设计中设置多个观测点进行功能覆盖。

通常,RTL设计者和验证工程师都会在设计中使用它。断言既可以放在RTL代码之内,也可以放在RTL代码之外。放在里面使更新和管理更加容易,放在外面使代码的可综合和行为部分保持独立。System Verilog提供断言规范,可用于许多ASIC设计验证的环境中。

System Verilog断言可用于设计的多个方面:变量说明、条件语句、内部接口和状态机。公众号:OpenFPGA断言得到了一些商业模拟器的支持,如ModelSim和VCS。System Verilog断言规范的一小部分子集支持可综合断言。遗憾的是,只有极少数的FPGA设计工具支持可综合断言。其中的一个是Synopsys Identify Pro,它具有断言综合和调试功能。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1664

    文章

    22508

    浏览量

    639438
  • IEEE
    +关注

    关注

    7

    文章

    418

    浏览量

    50399
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114732
  • 代码
    +关注

    关注

    30

    文章

    4977

    浏览量

    74400

原文标题:Verilog 版本:Verilog-95、Verilog-2001与System Verilog区别简谈

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件建模语言。
    的头像 发表于 03-04 15:04 5812次阅读
    <b class='flag-5'>Verilog</b> HDL语法学习笔记

    FPGA 入门必看:Verilog 与 VHDL 编程基础解析!

    很多开发者第一次接触FPGA,都会有同样的疑问:FPGA是硬件,不是软件,怎么写程序?答案就是用硬件描述语言(HDL),最常用的就是Verilog和VHDL。今天,我们就带你入门,搞清楚FPGA编程
    的头像 发表于 01-19 09:05 738次阅读
    FPGA 入门必看:<b class='flag-5'>Verilog</b> 与 VHDL 编程基础解析!

    请问测试用例.verilog文件是怎么生成的呢?

    在仿真时可以通过添加.verilog文件,直接读入ITCM中,从而在仿真时我们就可以知道处理器的运行结果,例如打印hello_world字样。
    发表于 11-11 07:56

    verilog testbench中运行测试用例时,运行到make run_test出错怎么解决?

    按照胡老师书上的在verilog testbench中运行测试用例时,在运行到make run_test步骤时出错,查了很多方案没有解决。
    发表于 11-11 06:52

    你觉得哪个软件写verilog体验最好?有什么优势?

    你觉得哪个软件写verilog体验最好?有什么优势?请在评论区留言跟大家分享一下吧。
    发表于 11-10 07:47

    如果将蜂鸟的risc-v移植到其他的fpga中想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?

    请问如果将蜂鸟的risc-v移植到其他的fpga中想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?
    发表于 11-10 06:35

    请问verilog文件开头部分的@00080000是什么意思?

    请问verilog文件开头部分的@00080000是什么意思??
    发表于 11-06 08:10

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打开仿真顶层文件tb_top.v,存放在ITCM模块里面的指令是通过readmemh函数读入.verilog文件实现的: 下面通过对NucleiStudio IDE进行设置,实现将c
    发表于 11-05 07:07

    芯来e203移植开发分享(二)——仿真文件简述与itcm固化程序

    可以在makefile中设置自己想要仿真的testcase,这里使用的rv32ui-p-add.verilog,这里我们把的这个文件复制的上次分享建立的文件testcase中,读取仿真。 仿真主要流程
    发表于 10-27 06:04

    基于MCU200T的蜂鸟E203不上板跑分教程

    : (1)System文件 地址:e203_hbirdv2-master/e203_hbirdv2-master/fpga/mcu200t/src/system.v (这里我们选用的是mcu200t
    发表于 10-24 11:54

    NucleiStudio如何生成.verilog文件和.dasm文件,以及对.dasm文件中自定义指令反汇编结果分析

    硬件设计需要.verilog文件来运行加NICE后的tb仿真、软件组需要.dasm来确定自定义指令有无被正确编译。今天,我们来分享一下NucleiStudio如何生成.verilog文件和.dasm
    发表于 10-24 06:33

    如何利用Verilog HDL在FPGA上实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA上实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA中实现SRAM读写测试,包括设计SRAM接口模块
    的头像 发表于 10-22 17:21 4585次阅读
    如何利用<b class='flag-5'>Verilog</b> HDL在FPGA上实现SRAM的读写测试

    为什么我选择VHDL入门

    在群里交流提问的时候,大家总是惊讶并疑惑:为什么我要选择 VHDL入门?因为好像 99% 搞 FPGA 开发的人都在用 Verilog。 我的选择,是通过网上搜索的讨论而做出的,为了留存,我这里水一
    的头像 发表于 06-25 11:18 1414次阅读
    为什么我选择VHDL入门

    SVA断言的用法教程

    SVA是System Verilog Assertion的缩写,即用SV语言来描述断言。断言是对设计的属性的描述,用以检查设计是否按照预期执行。
    的头像 发表于 05-15 11:39 3807次阅读
    SVA断言的用法教程

    verilog模块的调用、任务和函数

    在做模块划分时,通常会出现这种情形,某个大的模块中包含了一个或多个功能子模块,verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的.
    的头像 发表于 05-03 10:29 1762次阅读
    <b class='flag-5'>verilog</b>模块的调用、任务和函数