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

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

3天内不再提示

SystemVerilog对硬件功能如何进行建模

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-03-30 11:42 次阅读

数字硬件建模SystemVerilog(一)-RTL和门级建模

接下来系列文章会有很多在Verilog中知识点有被提及,关于这两者关系,请查看《谈谈Verilog和SystemVerilog简史,FPGA设计是否需要学习SystemVerilog》。

本文定义了通常用于描述使用SystemVerilog对硬件功能进行建模的详细级别的术语。

抽象

SystemVerilog能够在许多不同的细节级别(称为“抽象级别”)对数字逻辑进行建模。抽象意味着缺乏细节。数字模型越抽象,它所代表的硬件的细节就越少。

图1-3显示了SystemVerilog中可用的建模抽象的主要级别的详细模型

561ecade-ac9c-11ec-aa7f-dac502259ad0.png 图1-3:SystemVerilog建模抽象级别

门级建模

SystemVerilog支持使用门级原语对数字逻辑进行建模。数字逻辑门是一个非常接近硅(silicon)实现的详细模型。

SystemVerilog提供了几个内置的门级原语,并允许工程师定义其他原语,这些原语是指用户定义的原语(UDP)。SystemVerilog中的内置原语列在表1-1中:

表1-1:SystemVerilog门级原语

原语 描述
与and 具有2个或更多输入和1输出的与门
与非门nand 具有2个或更多输入和1输出的与非门
or 具有2个或更多输入和1个输出的或门
或非门nor 具有2个或更多输入和1输出的或非门
异或门xor 具有2个或更多输入和1输出的异或门
异或非门是xnor 具有2个或更多输入和1输出的异或非门
缓冲器buf 具有1个输入和1或更多输出的缓冲门
反向门not 具有1输入和1或更多输出的反向门
buffif0 三态缓冲门,带“1输入*1输出”和1个激活低启用
bufif1 具有1输入、1输出和1激活高启用的三态缓冲门
notif0 带1输入、1输出和1低激活的三态反向缓冲门
notif1 带1输入、1输出和1高激活的三态反向缓冲门

SystemVerilog还为ASIC和FPGA库开发人员提供了通过定义用户定义原语(UDP)添加到内置原语集的方法。UDP以表格格式定义,表格中的每一行列出一组输入值和结果输出值。组合逻辑和顺序逻辑(如触发器)原语都可以定义。

图1-4显示了带进位的1位加法器的门级电路。示例1-1显示了“使用原语对电路建模的SystemVerilog代码”。

5646d7ea-ac9c-11ec-aa7f-dac502259ad0.png 图1-4:带进位的1位加法器,用逻辑门表示 示例1-1;带进位的1位加法器的SystemVerilog门级模型

`begin_keywords"1800-2012"
modulegate_adder
(inputwirea,b,ci,
outputwiresum,co
);
timeunit1ns;timeprecision100ps;

wiren1,n2,n3;

xorg1(n1,a,b);
xor#1.3g2(sum,n1,ci);
andg3(n2,a,b);
andg4(n3,n1,ci);
or#(1.5,1.8)g5(co,n2,n3);

endmodule:gate_adder
`end_keywords

门级原语的语法非常简单:

〈instancename>(,);

许多门级原语可以具有可变数量的输入。例如,and原语可以表示2输入、3输入或4输入与门,如下所示:

and i1{o1,a,b);//2-输入与门
and i2(o2,a,b,c};//3-输入与门
and i3{o3,a,b,c,d);//4-输入与门

原语的实例名称虽然是可选的,但它是良好的代码注释,它使维护代码和将SystemVerilog源代码与示意图或设计的其他表示形式联系起来变得容易。实例名称是用户定义的,可以是任何合法的SystemVerilog名称。

门级原语可以用传播延迟来建模。如果未指定延迟,则门输入上的更改将立即反映在门输出上。延迟是一个表达式,可以是一个简单的值,如示例1-1中的实例g2,也可以是一个更复杂的表达式,如实例g5。上述代码中的栅极g2的传播延迟为13ns,这意味着当其中一个栅极输入上发生转换时,在栅极输出sum改变之前,这个时间是13ns。门g5将传播延迟分为不同的延迟,用于输出上的上升和下降跃迁。如果co值从0转换为l,延迟为1ns。如果co正在从1转换为0,更改延迟为1.8ns。

门级模型能够以高精度表示实际硅的传播延迟。逻辑门的功能反映了将在硅中使用的晶体管组合的功能,并且门延迟可以反映通过这些晶体管的传播延迟。ASIC和FPGA供应商使用这种精度对特定设备的详细行为进行建模。

门级模型通常由软件工具或专门从事库开发的工程师生成。在RTL级别设计的设计工程师很少(如果有的话)使用门级原语建模。相反,RTL设计者使用门级模型的网表,其中网表是通过合成RTL模型生成的。网表级模型由目标ASIC或FPGA设备的供应商提供。关于门级建模的内容比本文中介绍的要多得多。

开关级建模。SystemVerilog还可以使用开关原语(如pmos、nmos和cmos)、电阻开关原语(如rpmos、cnmos和rcmos)和电容网络在晶体管级对数字电路建模。这种级别的建模可以很好地表示实际的硅实现。然而,由于这些结构只能仿真数字行为,因此很少使用。晶体管、电阻器电容器都是仿真器件。数字仿真不能准确反映晶体管的行为。开关级建模通常不在SystemVerilog的FPGA设计流程中使用。

RTL模型

一个更抽象的建模级别——也是系列文章的重点——是寄存器传输级别(Register Transfer Levels),或RTL。此级别的建模使用编程语句和运算符表示数字功能。RTL模型是功能模型,不包含有关如何在硅中实现该功能的详细信息。由于这种抽象,复杂的数字功能可以比在详细的门级更快速、更简洁地建模。RTL模型的仿真速度也大大快于门级和开关级模型,这使得验证更大、更复杂的设计成为可能。SystemVerilog为RTL建模提供了两种主要结构:连续赋值(continuous assignments)和always程序块。

连续赋值以assign关键字开始,可以表示简单的组合逻辑。前面的示例1-1说明了1-bit加法器的门级模型。示例1-2显示了如何通过使用连续赋值在更抽象的层次上建模相同的1位加法器功能:

`begin_keywords"1800-2012"
modulertl_adder
(inputlogica,b,ci,
outputlogicsum,co
);
timeunit1ns/1ns;

assign{co,sum}=a+b+ci;

endmodule:rtl_adder
`end_keywords

示例1-2:带进位的1位加法器的SystemVerilog RTL模型

RTL建模的一个优点是代码更易于自文档化(self-documenting)。查看示例1-1中的门级模型并识别模型所代表的内容可能很困难,尤其是在没有注释和有意义的名称的情况下。但是,查看示例1-2中RTL模型中的代码并认识到该功能是一个加法器要容易得多。

RTL建模的另一个强大优势是能够处理矢量和数据包。矢量是一个大于一位宽的信号。开关级和门级建模的操作一1位宽的信号,在SystemVerilog中称为标量信号。要对32位加法器进行建模,需要对每个位上运行的开关或门进行建模,这与实际硅中的操作相同。上述示例1-2中的连续赋值语句可以通过改变信号的声明,对任意大小的加法器进行建模。

更复杂的功能可以使用程序块建模。程序块封装了一行或多行编程语句,以及有关何时执行这些语句的信息。RTL级别使用四种类型的always过程:always、always_comb、always_ff和always_latch。

以下示例简明地表示具有寄存器输出的32位加法器/减法器:

`begin_keywords"1800-2012"
modulertl_adder_subtracter
(inputlogicclk,//1-bitscalarinput
inputlogicmode,//1-bitscalarinput
inputlogic[31:0]a,b,//32-bitvectorinputs
outputlogic[31:0]sum//32-bitvectoroutput
);
timeunit1ns/1ns;

always_ff@(posedgeclk)begin
if(mode==0)sum<= a + b;
    else           sum <= a - b;
  end

endmodule: rtl_adder_subtracter
`end_keywords
示例1-3:32位加法器/减法器的SystemVerilog RTL模型

在一个典型的仿真和综合设计流程中,工程师们将花费大部分时间在RTL级别建模和验证RTL功能。

行为级和事务级建模

SystemVerilog过程块可用于在比RTL更高的抽象级别上建模,该抽象通常被称为行为模型(也称为总线功能或算法模型)。行为模型可能看起来与RTL模型非常相似,因为RTL和行为模型都是程序块。行为模型在两个方面与RTL有所不同。

•RTL程序块在单个时钟周期内执行其编程语句,如果是组合逻辑,则在零周期内执行。行为模型过程块可以使用任意数量的时钟周期来执行其语句。

•RTL模型必须遵守严格的语言限制,才能由RTL综合编译器进行合成。行为模型可以使用完整的SystemVerilog语言。

高级抽象是事务级建模。事务模型通常用于验证代码中,并且通常使用SystemVerilog的面向对象编程结构进行建模。

RTL综合编译器无法综合抽象的行为和事务级别,本系列中也没有讨论.

数字硬件建模-Verilog篇阶段总结及SystemVerilog篇介绍

566e87f4-ac9c-11ec-aa7f-dac502259ad0.jpg

工具与大脑完美结合,才能写出世上最棒的Verilog代码

5684686c-ac9c-11ec-aa7f-dac502259ad0.jpg

你真的理解Verilog 中的module吗?

原文标题:SystemVerilog(一)-RTL和门级建模

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

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

    关注

    1601

    文章

    21296

    浏览量

    593082
  • 硬件
    +关注

    关注

    11

    文章

    2921

    浏览量

    64744
  • 数字逻辑
    +关注

    关注

    0

    文章

    67

    浏览量

    16448

原文标题:SystemVerilog(一)-RTL和门级建模

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

收藏 人收藏

    评论

    相关推荐

    Android APP如何进行访问硬件驱动

    本文我们要讲的是在用 i.MX8 平台开发时,Android APP 如何进行访问硬件驱动。
    的头像 发表于 12-04 13:50 457次阅读
    Android APP如<b class='flag-5'>何进行</b>访问<b class='flag-5'>硬件</b>驱动

    DMK如何进行硬件调试???

    有哪位大侠,能讲解一下DMK如何进行硬件调试???(不是软件设计,而是打开一个程序,要看看它运行到哪里了?该如何做?先前51单片机用的少,我查了一些资料,网上也搜了一下,都不是很具体。)
    发表于 05-03 16:06

    如何在SystemVerilog中为状态机的命令序列的生成建模

     我们将展示如何在SystemVerilog中为状态机的命令序列的生成建模,并且我们将看到它是如何实现更高效的建模,以及实现更好的测试生成。​
    发表于 01-01 06:05

    3D建模软件中如何进行装配设计?

    的「快速配合」功能即可,通过「贴合」、「轴对齐」等高频使用的配合功能组来快速完成装配应用。4、阵列和镜像装配体中存在大量相同部件或对称元素,因此合理地利用浩辰3D建模软件提供的「阵列」和「镜像」
    发表于 03-12 14:48

    PLC与单片机硬件是如何进行通信的

    单片机和PLC的应用分别有哪些?PLC与单片机硬件通信的原理是什么?PLC与单片机硬件是如何进行通信的?
    发表于 08-12 07:34

    数字硬件建模SystemVerilog-归约运算符

    介绍归约运算符对单个操作数的所有位执行运算,并返回标量(1位)结果。表5-9列出了归约运算符。表5-9:RTL建模的归约运算符归约运算符包括一个NAND和一个NOR运算符,这是按位运算符所没有
    发表于 10-20 15:03

    SystemVerilog 3.1a语言参考手册

    本参考手册详细描述了Accellera为使用Verilog硬件描述语言在更高的抽象层次上进行系统的建模和验证所作的扩展。这些扩展将Verilog语言推向了系统级空间和验证级空间。SystemV
    发表于 07-22 12:14 187次下载

    何进行硬件连接,启动GUI并运行马达

    启动马达吧!快速,简单,有趣!本视频将向用户展示如何进行硬件连接,启动GUI并运行马达。
    的头像 发表于 11-28 06:04 2826次阅读

    SystemVerilog语言介绍汇总

    作者:limanjihe  https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一种硬件描述和验证语言
    的头像 发表于 10-11 10:35 2067次阅读

    FPGA学习-SystemVerilog语言简介

    SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了 C语言 数据类型、
    的头像 发表于 12-08 10:35 1364次阅读

    数字硬件建模SystemVerilog之Interface方法概述

    SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。
    的头像 发表于 04-28 14:10 1302次阅读
    数字<b class='flag-5'>硬件</b><b class='flag-5'>建模</b><b class='flag-5'>SystemVerilog</b>之Interface方法概述

    数字硬件建模SystemVerilog之Interface和modport介绍

    SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。
    的头像 发表于 04-28 14:12 2066次阅读
    数字<b class='flag-5'>硬件</b><b class='flag-5'>建模</b><b class='flag-5'>SystemVerilog</b>之Interface和modport介绍

    Systemverilog中的Driving Strength讲解

    systemverilog中,net用于对电路中连线进行建模,driving strength(驱动强度)可以让net变量值的建模更加精确。
    的头像 发表于 06-14 15:50 817次阅读
    <b class='flag-5'>Systemverilog</b>中的Driving Strength讲解

    SystemVerilog的覆盖率建模方式

    为了确保验证的完备性,我们需要量化验证目标。SystemVerilog提供了一套丰富的覆盖率建模方式。
    的头像 发表于 06-25 10:44 564次阅读

    SystemVerilog硬件设计部分有哪些优势

    Language,硬件描述语言),而SystemVerilog则是HDVL(Hardware Design and Verification Language,硬件设计与验证语言)。由此可见,
    的头像 发表于 10-19 11:19 441次阅读
    <b class='flag-5'>SystemVerilog</b>在<b class='flag-5'>硬件</b>设计部分有哪些优势