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

数字硬件建模systemverilog(一)-rtl和门级建模
接下来系列文章会有很多在verilog中知识点有被提及,关于这两者关系,请查看《谈谈verilog和systemverilog简史,fpga设计是否需要学习systemverilog》。
本文定义了通常用于描述使用systemverilog对硬件功能进行建模的详细级别的术语。
抽象
systemverilog能够在许多不同的细节级别(称为“抽象级别”)对数字逻辑进行建模。抽象意味着缺乏细节。数字模型越抽象,它所代表的硬件的细节就越少。
图1-3显示了systemverilog中可用的建模抽象的主要级别的详细模型
图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代码”。
图1-4:带进位的1位加法器,用逻辑门表示 示例1-1;带进位的1位加法器的systemverilog门级模型
`begin_keywords 1800-2012module gate_adder(input  wire a, b, ci,output wire sum, co); timeunit 1ns; timeprecision 100ps; wire n1, n2, n3; xor            g1 (n1, a, b); xor #1.3       g2 (sum, n1, ci); and            g3 (n2, a, b); and            g4 (n3, n1, ci); or  #(1.5,1.8) g5 (co, n2, n3);endmodule: gate_adder`end_keywords  
门级原语的语法非常简单:
〈instance name> (, );  
许多门级原语可以具有可变数量的输入。例如,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-2012module rtl_adder(input  logic a, b, ci, output logic sum, co);  timeunit 1ns/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-2012module rtl_adder_subtracter(input  logic        clk,   // 1-bit scalar input input  logic        mode,  // 1-bit scalar input input  logic [31:0] a, b,  // 32-bit vector inputs output logic [31:0] sum    // 32-bit vector output);  timeunit 1ns/1ns;  always_ff @(posedge clk) begin     if (mode == 0) sum <= a + b;    else           sum <= a - b;  endendmodule: 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篇介绍
工具与大脑完美结合,才能写出世上最棒的verilog代码
你真的理解verilog 中的module吗?
原文标题:systemverilog(一)-rtl和门级建模
文章出处:【微信公众号:openfpga】欢迎添加关注!文章转载请注明出处。


为什么要用CBB电容代替电解电容滤波?假如滤波全用CBB电容会怎样?
电容器太阳能草坪灯的设计,Lawn lamp
居然能玩大型游戏?特斯拉Model S预热
摩拜为什么没能赢下这局本应胜券在握的比赛
数字化智能充电器的设计
SystemVerilog对硬件功能如何进行建模
变频电机与普通电机哪个好
RC消火花电路的工作原理
存储器分类及各自优劣势介绍
LG折叠屏真机概念图曝光将会采用外翻折设计
工信部移动物联网生活智慧化应用案例锦集
LED电路保护的必要性 LED损坏的原因 保护LED电路小绝招
带你读懂3D结构光和ToF是什么又有何用
美国的限售禁令 VS 中国的实体清单,谁将获胜?
IMX6ULL正点原子开发板LED驱动
便携式系统开关电源PCB排版技术
安森美针对充电电池的低成本CCR充电解决方案
三大运营商将于11月底之前在全国范围内提供携号转网服务
可穿戴设备集成物联网解决方案如何帮助医疗保健行业应对疫情
OpenCV白平衡算法之灰度世界法_OpenCV实现马赛克和毛玻璃滤镜效果