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

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

3天内不再提示

数字硬件建模SystemVerilog-网络

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-05-09 09:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

数字硬件建模SystemVerilog(七)-网络

System Verilog提供两组通用的数据类型:网络和变量(nets 和 variables)。网络和变量同时具有类型和数据类型特性。类型表示信号为网络或变量,数据类型表示网络或变量的值系统,即2态或4态。为简单起见,使用术语data type来表示信号的类型和数据类型。

软件工具(如仿真器和综合编译器)使用数据类型来确定如何存储数据和处理数据上的更改。数据类型影响操作,并在RTL建模中用于指示所需的硅行为。例如,数据类型用于确定加法器应基于整数还是基于浮点,以及应执行有符号算术还是无符号算术。

网络类型

网络用于将设计元素连接在一起,例如将一个模块的输出端口连接到另一个模块的输入端口。网络在三个重要方面不同于变量:

  • 网络没有像变量一样的临时存储,相反,网络反映了网络驱动器的当前值(电容性trireg网络似乎存储了一个值,但实际上代表了驱动网络的电容器的行为),
  • 网络可以计算多个驱动因素的结果值,其中变量只能有一个来源(如果对一个变量进行了多个程序赋值,则最后一个赋值是结果值,而不是解析所有赋值的结果)。
  • 网络反映驱动器值(0、1、Z或X)和驱动器强度。

驱动器的强度级别以0~7的步长表示。每个级别由一个关键字表示。大多数建模构件的默认强度级别为“强”,即级别6。强度级别对于晶体管级建模很重要,但不用于RTL建模。强度的表示和使用超出了本文关于RTL建模的范围。

可综合网络类型

通过同时指定类型和数据类型来声明网络。类型可以是表3-3和3-4中列出的任何关键字。数据类型必须是关键字logic,可以显式指定或隐式推断。

每个SystemVerilog网络类型都有特定的语义规则,这些规则会影响多个驱动程序的解析方式。虽然所有网络类型都表示硅行为,但并非所有网络类型都可以用标准ASICFPGA技术表示。表3-3列出了ASIC和FPGA综合编译器支持的网络类型。

表3-3:可综合网络类型
类型 代表
wire 使用CMOS行为解析多个驱动器的互连网络
tri wire的同义词在所有方面都相同,可用于强调预期具有三态值的网络
Supply0 电源强度级别具有恒定逻辑0的互连网络。可用于表示接地轨(GND、VSS)
Supply1 在电源强度级别具有恒定逻辑1的互连网络。可用于表示供电轨(VCC、VDD)

不可综合的网络类型。

SystemVeriIog有几种网络类型,综合编译器并不普遍支持这些类型,如表3-4(第77页)所示。

表3-4:一般不可综合的网络类型
类型 代表
uwire 不允许或不解析多个驱动程序的互连网络
pull0 一种互连网络,具有将下拉电阻器连接到网络的特性
Pull1 一种互连网络,具有将上拉电阻器连接到该网络的特性
wand 一种互连网络,通过对驱动值进行AND运算来解析多个驱动程序
triand wand的同义词,在所有方面都相同;可用于强调预期具有三态值的网络
wor 一种互连网络,通过对驱动值进行OR来解析多个驱动程序
trior wor的同义词,在所有方面都相同;可用于强调预期具有三态值的网络
trireg 具有电容性的互连网络;如果所有驱动器均为高阻抗,则电容反映最后解析的驱动值
笔记

某些RTL综合编译器可能支持一种或多种网络类型。最佳实践编码风格是不使用这些类型,以确保RTL模型与任何综合编译器兼容。如果使用其中一种类型,设计工程师应检查项目中使用的所有工具是否支持该类型。

CMOS工艺建模。

大多数ASIC和FPGA器件采用CMOS技术实现。CMOS互连的行为用线和三网类型表示。wire类型是最常用的网络类型,也是隐式推断网络时的默认网络类型。

单驱动和多驱动逻辑。

ASIC和FPGA设计中的大多数互连网络将单个驱动器连接到一个或多个接收器。例外是共享总线,其中多个驱动程序连接到一个或多个接收器。例如,RAM设备具有双向数据总线,用于将值写入RAM和从RAM读取值。ASIC和FPGA设备通常具有一定数量的双向I/O焊盘,用于读取和驱动值。

最佳做法准则3-7

当设计意图是具有单个驱动器功能时,使用逻辑数据类型将设计组件连接在一起。仅当设计意图是允许多个驱动器时,才使用wire or tri类型。

将互连声明为逻辑将推断一个变量而不是网络类型。变量只允许单个源(驱动程序)。

尽管大多数互连网络仅具有一个驱动器;可综合的网络类型(如wire)允许多个驱动程序。工程师在使用网络类型时需要小心避免编码错误。网络列表中的简单错误可能会导致同一网络无意中连接到多个驱动程序。在编译和优化过程中不会捕获这种类型的错误。该错误会导致在仿真过程中检测到功能性错误。下面几个规则可以避免一些错误:

  • 使用变量而不是网络连接设计块。SystemVerilog还允许使用变量将设计元素连接在一起。变量不允许多个驱动源。如果同一变量意外连接到多个驱动程序,则会发生综合错误。

  • 将输入端口声明为变量类型而不是网络类型。默认情况下,输入和输入输出端口推断为网络类型,特别是wire类型,除非网络类型指定了不同的网络类型。如果多个驱动程序连接到同一输入端口(或者一个值从模块内被反向驱动到输入端口),这种网络类型的推断可能导致难以检测的建模错误。这些建模错误在SystemVerilog中是合法的,因为网络类型允许多个驱动程序。

通过将输入端口显式声明为var logic类型,可以防止输入端口的意外多个驱动程序。变量不允许多个驱动源。在编译和详细阐述设计模块时,意外的多个驱动程序将被报告为编码错误。

  • 使用uwire防止多个驱动程序。uwire网络类型还可用于防止输入端口的多个无意驱动源。uwire类型作为1364-2005 Verilog标准的一部分添加到SystemVerilog中,特别是为了使无意中的多个驱动程序成为编译/布线错误。输入端口可以明确声明为uwire类型,或者可以将默认网络类型更改为uwire。uwire类型不允许多个驱动程序。在编译和详细说明设计模块时,意外的多个驱动程序将被报告为编码错误。
笔记

在编写本文时,大多数综合编译器和一些仿真器尚未添加对uwire类型的支持,尽管它自2005年以来一直是Verilog/SystemVerilog标准的一部分。当需要多驱动器网络时,本书中的示例使用wire或tri类型。

网络定义规则

通过指定网络类型和可选数据类型来定义网络。数据类型必须是4态logic数据类型,或从4态logic数据类型派生的用户定义类型,如果未明确指定数据类型,则隐式推断logic数据类型。

所有网络类型的默认大小都是标量(1位)。可以使用与变量相同的语法将网络显式声明为任何大小的向量。但是,只有变量向量声明可以划分为子字段。向量不能划分为子字段。

一些可综合的网络声明示例如下:

91b8cbc4-cf30-11ec-bce3-dac502259ad0.png

默认情况下,所有网络类型都是无符号的。网络可以用与变量相同的方式显式声明为有符号或无符号。

网络位和部分选择。可使用与变量向量相同的语法从向量中选择任何特定位或位组。常量和变量位和部分选择都可以在网络上执行。

隐式声明

未声明的信号将在多个上下文中推断网络类型:

  • 模块input, inout or output,未明确声明类型或数据类型,或从以前的端口声明继承
  • 显式声明logic or reg数据类型或从以前的端口声明继承的模块input or inout端口
  • 与模块实例或接口实例的端口或基本实例的终端的连接
  • 连续赋值语句的左侧

默认情况下,推断的隐式网络类型为网络wire类型。隐式网络的向量大小基于本地上下文。如果网络是从模块端口声明推断出来的,那么隐式网络的向量大小将是端口的大小。如果从与模块、接口或例化实例的连接推断网络,则将推断标量网络。如果从连续赋值的左侧推断标量网络,则也会推断标量网络。示例3-1说明了几个隐式网络声明。

示例3-1:创建隐式网络的未声明标识符示例
91d26d0e-cf30-11ec-bce3-dac502259ad0.png

上面还涉及到dot-name 和 dot-star的使用,这将在后面介绍。

更改默认的隐式网络类型。可以使用编译器指令:

'default_nettype

更改隐式网络类型。每当推断出隐式网络时,在指令之后编译的所有SystemVerilog代码都将使用指定的网络类型。'default_nettype必须在模块或接口边界之外指定。

示例3-2将隐式网络类型定义为uwire(单驱动源)类型

示例3-2:更改隐式网络的网络类型
`default_nettypetri1//changedefaultforimplicitnets
//`default_nettypeuwire//changedefaultforimplicitnets
`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
modulemixed_rtl_and_gate_adder
(inputa,//implicituwirenet,logicdatatype
inputlogicb,//implicituwirenet,logicdatatype
inputregci,//implicituwirenet,logicdatatype
outputsum,//implicituwirenet,logicdatatype
outputlogicco//implicitvariable,logicdatatype
);
timeunit1ns/1ns;

xorg1(n1,a,b);//undeclaredn1isimplicituwirenet
xorg2(sum,n1,ci);
andg3(n2,a,b);//undeclaredn2isimplicituwirenet

assignn3=n1&ci;//undeclaredn3isimplicituwirenet

always_combbegin
co=n2|n3;
end
endmodule:mixed_rtl_and_gate_adder
`end_keywords
`default_nettypewire//resetdefaultforimplicitnets

关闭隐式网络声明。

隐式网络有优点也有缺点。大型、复杂的网络表可能需要几十个1位网络来连接设计块。显式声明这些多个网络既繁琐又耗时,显式声明大量互连网络也可能需要大量的键入,并存在需要键入的错误风险。隐式网络可以减少编写网表模型所需的时间,并减少键入错误。

但是,隐式网络的一个缺点是,与模块、接口或例化实例的连接中拼写错误的名称不会被检测为连接错误。不正确的名称将推断出一个隐式网络,其结果是必须检测、调试和纠正的功能性错误。另一个缺点是,从实例连接推断出的网络将是一个1位网络,而不管该网络连接到的端口大小如何。连接大小不匹配将导致警告消息,但仿真或综合仍将继续。端口大小不匹配还可能导致必须检测和纠正的功能缺陷。

隐式net与显式声明net的优缺点是Verilog和SystemVerilog工程师经常争论的话题。这实际上是用户偏好的问题。这两种编码风格都很好地工作,并且两种风格都有优点和缺点。

对于喜欢显式声明所有网络的工程师或公司,SystemVerilog提供了一种禁用隐式网络的方法。这就要求显式声明所有网络,禁用隐式网络是通过设置编译器指令来完成的:

91ef9834-cf30-11ec-bce3-dac502259ad0.png

此编译器指令必须在模块外部设置,并对编译到同一编译单元的所有后续模块保持有效,或者直到遇到另一个'default_nettype指令。

使用隐式网络或禁用隐式网络通常是个人偏好,有时也是公司内部的编码准则。本书中的示例假设启用了隐式网络,默认隐式网络类型为wire。

笔记

“default_nettype”指令可以影响多个文件。编译器指令在编译单元中是准全局的。当在同一编译单元中编译多个文件时,编译器指令对遇到该指令之前编译的任何文件没有影响,但会影响遇到该指令之后编译的所有文件。

最佳做法准则3-8

如果更改了默认网络类型,请始终将’default_nettype”用作一对指令,第一个指令将默认设置为所需的网络类型,第二个指令将默认设置回wire。

在任何更改默认值的模块之后,将默认网络类型设置回wire,将防止意外的副作用影响到其他预期默认wire的文件。

网络分配和连接规则

给网络赋值。网络可以从两种类型的源接收值:作为output or inout port端口的连接,以及作为连续赋值(assign语句)的左侧。不能在程序赋值的左侧使用网络。

在整个仿真过程中对连续赋值进行求值,赋值右侧的任何更改都会导致对右侧表达式进行求值,并更新左侧表达式。左侧可以是变量或网络。网络的连续赋值可以是显式的,也可以是隐式的。显式连续赋值以关键字assign开始。

9208610c-cf30-11ec-bce3-dac502259ad0.png

隐式连续赋值结合了网络声明和对该网络的赋值。组合中未使用assign关键字。

9225957e-cf30-11ec-bce3-dac502259ad0.png

注意不要混淆内嵌变量初始化和隐式连续赋值。

92441332-cf30-11ec-bce3-dac502259ad0.png

这两个构造的语法可能看起来很相似,但行为却截然不同。在线变量初始化是一次评估和赋值,在前面的示例中,如果a或b的值在以后的仿真中发生变化,则不会更新变量。隐式连续赋值,顾名思义,是在整个仿真过程中不断求值的表达式。在前面的示例中,每次仿真期间a或b的值发生变化时,n1都会更新。

连接大小不匹配。网络用于将设计块连接在一起,例如将一个模块的输出端口连接到一个或多个其他模块的输入端口。通常,端口和互连网络的向量宽度相同,但SystemVerilog允许向量大小不同。例如16位标量网络可以将32位宽的输出端口连接到8位宽的输入端口。这种尺寸不匹配可能是设计错误,但在SystemVerilog中,只会生成警告。

SystemVerilog语言具有解决端口/连接不匹配的规则:

  • port的比特数少于连接到的网络或变量-值的最左边的比特被截断,导致值的最重要比特丢失。
  • 一个端口的比特数大于连接到它的网络或变量的比特数-网络或变量的值保持扩展状态,如果端口、网络/变量中有一个无符号,则该值为零扩展。如果端口和网络/变量都有符号,则该值为有符号。

仿真器和综合编译器将生成连接大小不匹配的警告消息。这些警告不容忽视!连接不匹配通常是需要纠正的设计错误。

审核编辑 :李倩


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

    关注

    54

    文章

    9016

    浏览量

    153368
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51083
  • 变量
    +关注

    关注

    0

    文章

    615

    浏览量

    29371

原文标题:SystemVerilog(七)-网络

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    网络接口:数字世界的“门铃”,你了解多少?

    一个关键组件——网络接口。它就像是数字世界的“门铃”,负责接收和发送信息。作为苏州沃虎科技的销售人员,我经常向客户讲解网络接口的重要性,今天也和大家分享这方面的知识。 什么是网络接口?
    发表于 11-26 18:53

    NPB 2.0:网络可视化告别“专用硬件”?

    传统的基于专用硬件的实现方案,例如使用TAP交换机/分流器等采集设备,其初期购置和维护成本显而易见,并且随着网络规模的扩大,采购和运维费用都将继续增长。NPB 2.0是基于 SONiC 的开放网络技术栈的前沿实践。
    的头像 发表于 11-24 16:45 1209次阅读
    NPB 2.0:<b class='flag-5'>网络</b>可视化告别“专用<b class='flag-5'>硬件</b>”?

    企业如何用SD-WAN节省50%网络成本?揭秘数字化转型的网络新基建

    #企业如何用SD-WAN节省50%网络成本?揭秘数字化转型的网络新基建>一条软件定义的网络高速公路,正在为成千上万企业开辟数字化转型的快车道
    的头像 发表于 08-13 10:32 1464次阅读
    企业如何用SD-WAN节省50%<b class='flag-5'>网络</b>成本?揭秘<b class='flag-5'>数字</b>化转型的<b class='flag-5'>网络</b>新基建

    如何利用三维建模加速FCB-CR8530的定制化开发?案例与工具详解

    领域。然而,传统开发流程中,硬件设计、结构验证与软件调试往往需要多次迭代,导致周期长、成本高。三维建模技术的引入,为FCB-CR8530的定制化开发提供了全新路径,通过数字化仿真与快速验证,显著提升了开发效率。 一、三维
    的头像 发表于 07-22 16:14 424次阅读

    绕组开放型永磁同步电机的建模及应用

    :绕组开放型永磁同步电机的建模及应用.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 06-12 13:52

    VirtualLab Fusion应用:Herriott池的建模

    。Herriott单元是这种系统的一个例子,其特点是使用两个球面反射镜,在其中一个球面反射镜上钻一个离轴孔,以允许光束进出。镜子的曲率改变了光束的方向并控制了它的发散。在此用例中,我们用光学建模和设计软件
    发表于 06-11 08:52

    利用MATLAB对交流电机调速系统进行建模和仿真

    是借助计算机及相关技术,对真实系统的运行过程和状态进行数字化模拟的技术。Simulink作为MATLAB的一个组件,能够实现对动态系统的建模、仿真和综合分析。本文在Simulink环境中建立面向电气
    发表于 06-06 14:31

    SOLIDWORKS建模秘籍——必学的五个草图与建模技巧

    SOLIDWORKS作为一款功能强大的三维CAD软件,广泛应用于各种设计和产品开发领域。掌握SOLIDWORKS的草图与建模技巧,能够显著提升设计效率,减少错误,并快速将创意转化为现实。以下是五个必学的SOLIDWORKS草图与建模技巧,帮助你成为设计高手。
    的头像 发表于 05-26 13:17 846次阅读
    SOLIDWORKS<b class='flag-5'>建模</b>秘籍——必学的五个草图与<b class='flag-5'>建模</b>技巧

    索尼FCB-ER8530:三维建模与视觉感知的跨界融合

    数字化浪潮中,三维建模技术正重塑工业设计、文化遗产保护与智慧城市管理等领域,而索尼FCB-ER8530一体化摄像机模组凭借其4K超高清成像与智能感知能力,成为这一进程中的关键硬件支撑。 三维
    的头像 发表于 05-19 17:30 443次阅读

    基于VT系统的MCU硬件在环建模与仿真应用分析

    在新能源汽车行业快速发展的背景下,电机控制器(MCU)作为核心部件,其开发和测试的重要性日益增加。为了在开发早期阶段快速验证应用层算法功能及基础软件质量,硬件在环(HIL)测试技术应运而生。本文分析
    的头像 发表于 04-16 10:07 1097次阅读
    基于VT系统的MCU<b class='flag-5'>硬件</b>在环<b class='flag-5'>建模</b>与仿真应用分析

    VirtualLab Fusion应用:渐变折射率(GRIN)镜头的建模

    摘要 折射率平滑变化的渐变折射率(GRIN)介质可用于例如:使镜头表面平坦或减少像差。 VirtualLab Fusion为光通过GRIN介质的传播提供了一种物理光学建模技术。在相同的速度下
    发表于 03-18 08:57

    VirtualLab:系统建模分析器

    ,系统建模分析器。本文档介绍该工具的使用方法。 系统建模分析器 如何运行建模分析器 系统建模分析器 例1:光束清理滤波器 示例 – 光束清理滤波器 光束清理滤波器 – 光源
    发表于 01-14 09:45

    ANN神经网络——器件建模

    随着半导体行业的新材料、新工艺、新器件的不断发展,人工神经网络作为一种替代方法已经被引入器件建模领域。本文介绍了ANN神经网络建模的起源、优势、实现方式和应用场景。   随着半导体行业
    的头像 发表于 01-06 13:41 1667次阅读
    ANN神经<b class='flag-5'>网络</b>——器件<b class='flag-5'>建模</b>

    VirtualLab:系统建模分析器

    ,系统建模分析器。本文档介绍该工具的使用方法。 系统建模分析器 如何运行建模分析器 系统建模分析器 例1:光束清理滤波器 示例 – 光束清理滤波器 光束清理滤波器 – 光源
    发表于 12-19 12:36

    VirtualLab Fusion应用:Herriott池的建模与仿真

    。Herriott单元是这种系统的一个例子,其特点是使用两个球面反射镜,在其中一个球面反射镜上钻一个离轴孔,以允许光束进出。镜子的曲率改变了光束的方向并控制了它的发散。在此用例中,我们用光学建模和设计软件
    发表于 12-09 13:14