当前位置: 首页 > news >正文

我的 System Verilog 学习记录(8)



引言

本文简单介绍 SystemVerilog 的接口。

前文链接:

我的 System Verilog 学习记录(1)

我的 System Verilog 学习记录(2)

我的 System Verilog 学习记录(3)

我的 System Verilog 学习记录(4)

我的 System Verilog 学习记录(5)

我的 System Verilog 学习记录(6)

我的 System Verilog 学习记录(7)



接口

接口是啥 ? 

接口是一种将信号封装成一个块的方式,将所有相关的信号组合在一起形成一个接口块,以便同一接口可以被其他项目重用,也使得与DUT和其他验证组件的连接变得更容易。

示例

APB总线协议信号放在给定的接口中。请注意,信号在 interface 和 endinterface 中声明。

为啥信号声明为 logic ?

logic 是一种新的数据类型,它允许通过分配语句和过程块中驱动这种类型的信号。请记住,在verilog中,您只能在过程块中驱动reg,而只能在分配语句中驱动wire。但这只是一个原因。
连接到DUT的信号应该支持4个状态,以便可以捕获X/Z值。如果这些信号是位的,那么X/Z就会显示为0,你就会错过DUT的X/Z值。得不到正确的验证结果。

如何定义端口方向 ?

接口信号可以在各种验证组件以及DUT中使用,因此 modport 用于定义信号方向。不同的modport定义可以传递给不同的组件,从而允许我们为每个组件定义不同的输入输出方向。

DUT和接口如何连接 ?

接口对象应该在实例化 DUT 的顶级测试平台模块中创建,并传递给DUT。这对于确保将正确的modport 分配给DUT至关重要。

有啥优点 ?

接口可以包含任务、函数、参数、变量、功能覆盖率和断言。这使我们能够通过此块中的接口监视和记录事务。由于信息被封装在接口中,因此无论它有多少端口,连接到设计都变得更容易。

接口参数化怎么做 ?

和 module 定义的一样。

时钟块是啥 ?

在时钟块内指定的信号将相对于该时钟进行采样/驱动。一个接口中可以有多个时钟块。请注意,这是针对与测试平台相关的信号。您希望控制TB驱动和采样DUT信号的时间。解决了部分竞争条件,但不是全部。您还可以对时钟偏斜值进行参数化。

在上面的例子中,我们已经指定,默认情况下,输入应在 clk 的上升沿之前3ns采样,输出应在clk的上升沿之后驱动2ns。

时钟块如何使用 ?

如上,在将 1 分配给Enable值之前,不必等待时钟的上升边沿。这样,您就可以确保Enable将在下一个时钟上升沿之后驱动2 ns。


简介

SystemVerilog接口允许我们将许多信号组合在一起,并将它们表示为单个端口。所有这些信号都可以在一个地方声明和维护,并且很容易维护。接口中的信号由接口实例句柄访问。

语法

接口块是在 interface 和 endinterface 关键字中定义和描述的。它可以像模块一样实例化,可以带端口或不带端口。

接口还可以具有函数、任务、变量和参数,使其更像一个类模板。它还具有通过 modport 构造为不同模块端口定义方向信息的策略的能力,以及带有时钟块的测试台同步功能。它还可以具有断言、覆盖记录和其他协议检查元素。另外,它还可以包含 initial 和 always 以及连续的赋值语句(assign)。

接口内部不能例化模块,但是模块内部可以例化接口。

SystemVerilog现在作为一种HDL语言很流行,让我们看看在Verilog和SystemVerilog中使用相同设计的接口的两种情况。为了在这个介绍性示例中保持简单,我们只创建一个简单的接口。

Verilog 设计的接口

让我们看看如何在测试平台中使用接口并通过端口列表连接到标准的Verilog设计。下面显示的代码是在Verilog中设计的递增-递减计数器。该模块接受一个参数来决定计数器的宽度。它还接受只有当Load_en为1时才加载到计数器中的输入加载值LOAD。

当输入down为1时,计数器开始向下计数,否则向上计数。翻转输出指示计数器何时从最大值转换到0或从0转换到最大值。

下面使用一个可参数化值作为计数器信号的宽度声明了一个名为cntif的接口。此任务还有一个任务init() 来赋值 。

仿真结果:

SV设计的接口

现在让我们看看如何在测试平台中使用接口并将其连接到SystemVerilog设计模块。SystemVerilog允许模块接受接口作为端口列表,而不是单个信号。在下面显示的设计示例中,我们用用于定义设计功能的接口句柄替换了计数器 ud 的端口列表。

向设计实例传递一个名为 cnt_if 的接口句柄,该接口句柄用于驱动从测试台到设计的输入。如果需要,可以使用相同的接口句柄来监视设计的输出。

这和 Verilog 有啥区别 ?

Verilog通过其模块端口连接不同的模块。对于大型设计,这种连接方法可能会变得更加耗时和重复。其中一些端口可能包括与AXI/AHB等总线协议相关的信号、时钟和复位引脚、进出RAM/存储器和其他外围设备的信号。

使用 Verilog 端口

让我们考虑这样一个场景,在上面所示的设计中有12个从模块。如果在 d_slave 模块端口上进行了更改,那么该更改也必须反映在 d_top 的所有12个从实例连接中。

缺点

使用Verilog端口方法进行连接的一些缺点是:

  • 繁杂的跟踪、调试和维护
  • 太容易破坏设计功能
  • 设计要求的变更可能需要修改多个模块
  • 在多个模块、通信协议和其他地方需要的复制

使用SV的接口

请注意,模块d_top只是使用接口与从实例连接,而不是如前所示重复声明与从块的每个信号的连接。

现在,如果从接口中的一个信号发生变化,它将自动应用于所有实例。在SystemVerilog中,模块端口列表还可以具有接口类型的端口,而不是通常的 input、output 和 inout 。

接口数组

在下面的示例中,创建了一个名为mylninterface空端口列表的接口,并在顶级测试平台模块中实例化了该接口。省略空端口列表的圆括号也很好,而用分号截断语句。

可以实例化一个名为 if0 的接口,并且应该通过引用该句柄来访问该接口内的信号。然后,可以使用该句柄来驱动和采样进入DUT的信号。

我们还可以有一个接口数组,这里这个数组的名称是wb_if,它有4个接口实例。

当接口被引用为端口时,假设其中的变量和网络分别具有 ref 和 inout 访问权限。如果在设计中使用相同的标识符作为接口实例名称和端口名称,则也可以使用隐式端口连接。


接口捆绑(bundle)

上节涵盖了对接口的需要,如何实例化和连接接口与设计。
有两种方式可以书写设计:

  • 通过使用一个现有的接口名称来专门地只使用该接口
  • 通过使用任何接口都可以传递到的通用接口句柄

显然,当接口定义更新为具有不同名称的较新版本时,通用方法效果最好,并且需要支持使用它的较旧设计。

示例

在本例中,设计引用了访问其信号的实际接口名称。下面的示例显示了设计模块 myDesign 和您的设计都在端口列表中声明了一个名为 if0 的端口来访问信号。

使用通用捆绑的示例

在本例中,设计使用 interface 关键字作为实际接口类型的占位符。下面的示例显示设计模块myDesign和您的设计都使用占位符句柄来引用信号。然后在设计模块实例化期间传递实际接口。此通用接口引用只能使用端口声明语法的ANSI样式声明,否则是非法的。

Modport

带有方向的modport列表是在接口中定义的,用于对模块内的接口访问施加某些限制。关键字modport表示声明方向时就像在模块内一样。

语法

下面所示的是接口 myInterface 的定义,内部含有几个信号的定义以及2个 modport 声明。modport dut0主要表述了信号 ack 和 sel 为输入信号,gnt 和 irq0为输出信号,不论什么模块使用此特定modport。

同样地,另外一个 modport dut1 声明的方向刚好相反。

已命名的端口 bundle 示例

在这种风格中,设计将从其端口列表中提到的接口对象中获取所需的正确modport定义。测试台只需要向设计提供整个接口对象。

连接端口 bundle 示例

在这种风格中,设计简单地接受提供给它的任何方向信息。因此,测试平台负责为设计提供正确的modport值。

modport 的需求是什么 ?

默认情况下,在简单接口内声明的网络是 inout ,因此连接到同一网络的任何模块都可以驱动值或从中获取值。简而言之,值传播的方向没有限制。您可能会在网络上得到X,因为测试台和设计都将两个不同的值驱动到同一接口网络。测试台编写器应该特别小心,以确保不会发生这种情况。这可以通过使用modport从本质上避免。

连接通用接口的示例

模块还可以有一个通用接口作为端口列表。通用句柄可以接受从上面的层次结构传递给它的任何modport。

设计示例

让我们考虑两个通过非常简单的总线结构连接的模块:主模块和从模块。假设总线能够发送地址和数据,而从模块需要捕获和更新其内部寄存器中的信息。因此,主模块必须始终启动传输,并且从模块能够通过其 sready 信号向主模块指示它是否准备好接受数据。

接口

下面显示的是主模块和从模块之间共享的接口定义。

设计

假设主机简单地将地址从0迭代到3,并发送等于该地址乘以4的数据。主机应仅在从机准备接受且由 sready 信号指示时才发送数据。

假设从机接受每个Addr的数据并将其分配给内部寄存器。当地址从3回绕到0时,从机需要额外的1个时钟才能准备就绪。

这两个设计模块在顶层捆绑在一起。

testbench

测试台将把接口句柄传递给设计器,然后设计器将主和从调制解调器分配给子模块。

请记住,主机发起总线事务,从机捕获数据并将其存储在相应地址的内部寄存器reg_*中。

Questa Sim 仿真:


时钟块

默认情况下,模块端口和接口不指定任何定时要求或同步方案。在 clocking 和 endclocking 之间定义的时钟块。它是与特定时钟同步的信号集合,有助于指定时钟和信号之间的时序要求。
这将允许测试编写者更多地关注事务,而不是担心信号何时会与时钟进行交互。一个测试台可以有许多时钟块,但每个时钟只有一个块。

语法

延迟值表示信号要被采样或驱动的距离时钟事件多少时间单位的偏差。如果未指定默认偏差,则所有输入信号将被采样#1step,并且输出信号在指定事件之后被驱动。

注意以下几点:

  • 创建一个名为ck1的时钟块,它将在clk的上升沿被激活
  • 默认情况下,时钟块内的所有输入信号将在5ns之前被采样,时钟块内的所有输出信号将在时钟钟块的正边缘后被驱动2ns
  • data,valid, ready信号被声明为块的输入,因此将在clk的定位前5ns采样
  • grant 是对具有自身时序要求的块的输出信号。在这里,授予将在clk的负边缘驱动,而不是默认的状态。

接口内使用

简单地说,时钟块封装了一组共享公共时钟的信号。因此,在接口内声明时钟块可以帮助节省连接到测试台所需的代码量,并有助于节省开发期间的时间。

时钟块内的信号方向是相对于测试台而不是DUT的。

时钟块允许在指定的时钟事件下采样输入和驱动输出。如果时钟块提到输入偏差,则该时钟块内的所有输入信号将在时钟事件之前的偏差时间单位被采样。如果时钟块被提及输出偏差,则该块中的所有输出信号将在相应时钟事件之后的偏差时间单位被驱动。

输入/输出偏斜是啥 ?

偏斜被指定为常量表达式或参数。如果仅使用数字,则偏斜被解释为跟随给定范围内的活动时间刻度。

在上面给出的例子中,我们声明了一个名称cb的时钟块,以描述当属于这个块的信号时必须进行采样。信号req被指定为有1ps的歪斜,并将在时钟边缘clk之前采样1ps。输出信号gnt有2个时间单位的输出倾斜,因此将遵循当前范围内所遵循的时间尺度。如果我们有一个1ns/1ps的时间尺度,那么#2代表2 ns,因此将在时钟边缘后被驱动2 ns。最后一个信号sig是inout类型的,将在时钟边缘前1 ns采样,在时钟边缘后3 ns驱动。
1step 的输入倾斜表示信号应该在前一个时间步结束时采样,或者换句话说,在正时钟边缘之前立即采样。

具有显式 #0 偏斜的输入将与其相应的时钟事件同时采样,但在观察区域内,以避免竞争条件。同样,没有偏差或显式#0的输出将在 Re-NBA 区域中与计时事件同时被驱动。(No Blocking Assignment)

示例

考虑一个简单设计,具有输入 clk 和 req ,并驱动输出信号 gnt 以使事情简单,让我们只要接收到请求就提供许可。

为了处理设计端口信号,让我们创建一个名为if的简单接口。

下一步是驱动设计的输入,以便它返回许可信号。

 仿真结果:

输出偏斜

为了清楚地了解输出偏差,让我们调整接口,使其具有三个不同的时钟块,每个时钟块具有不同的输出偏斜。然后,让我们使用每个时钟块来驱动 req ,以查看不同之处。

 在我们的测试平台中,我们将使用for循环来迭代每个激励,并为每个迭代使用不同的时钟块。

仿真:

值得注意的是,通过cb_1时钟块采样的测试台代码设法获得值0x3,而cb_0获得0xd。请注意,对于其他仿真器,这些值可能不同,因为它们可以采用不同的随机化种子值。

 

相关文章:

我的 System Verilog 学习记录(8)

引言 本文简单介绍 SystemVerilog 的接口。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3) 我的 System Verilog 学习记…...

详解JAVA字节码

目录 1.概述 2.字节码文件构成 2.1.魔数 2.2.版本号 2.3.常量池 2.4.访问标志 2.5.索引 2.6.字段表 2.7.方法表 3.字节码指令 3.1.概述 3.2.指令分类 3.2.1.加载存储指令 3.2.2.运算指令 3.2.3.其他指令 3.3.完整指令工作流程 4.字节码保护 1.概述 以往的编程…...

前端利用emailjs发送邮件

最近有一个需求,前端发送一个form表单到一个邮箱,找了一圈发现emailjs还不错就使用他了。首先emailjs官网注册一个账号注册完之后创建一个邮件服务(我这里使用的是谷歌邮箱)链接谷歌邮箱账户 然后创建服务接下来就要创建一个邮件的…...

16 Nacos服务端服务注册源码分析

Nacos服务端服务注册源码分析 服务端调用接口 我们已经知道客户端在注册服务的时候实际上是调用的NamingService.registerInstance这个方法来完成实例的注册,而且在最后我们也告诉了大家实际上从本质上讲服务注册就是调用的对应接口nacos/v1/ns/instance&#xff…...

Spring Boot2中如何优雅地个性化定制Jackson

概述 本文的编写初衷,是想了解一下Spring Boot2中,具体是怎么序列化和反序列化JSR 310日期时间体系的,Spring MVC应用场景有如下两个: 使用RequestBody来获取JSON参数并封装成实体对象;使用ResponseBody来把返回给前…...

2023年全国最新食品安全管理员精选真题及答案11

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 101.婴幼儿配方乳粉的产品配方应当经()部门注册。…...

【脚本】用于得到某个文件/文件夹所有文件的存储大小(MB单位)

知识点 来自在线转换换算网页:在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算 电脑中存储常用的单位: 1Byte(Byte 字节) 8Bit 1KB (Kilobyte 千字节) 1024Byte 1MB (Megabyte,兆字节,简称“兆”) 1024KB 1GB (Gigabyte&am…...

19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)

项目要点 Fashion-MNIST总共有十个类别的图像。代码运行位置 CPU: cputf.config.set_visible_devices(tf.config.list_physical_devices("CPU"))fashion_mnist keras.datasets.fashion_mnist # fashion_mnist 数据导入训练数据和测试数据拆分: x_valid, x_train…...

【正点原子FPGA连载】第二十二章IP封装与接口定义实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第二十二章IP封装…...

【ElasticSearch8.X】学习笔记(二)

【ElasticSearch8.X】学习笔记四、基础操作4.1、索引操作4.1.1、创建索引4.1.2、查询指定索引4.1.3、查询所有索引4.1.4、 删除索引4.2、文档操作4.2.1、创建文档4.2.2、查询文档4.2.3、修改文档4.2.4、删除文档4.2.5、查询所有文档4.3、数据搜索4.3.1、匹配查询文档4.3.2、匹配…...

Ubuntu22.04安装、配置、美化、软件安装、配置开发环境

Ubuntu22.04安装、配置、美化、软件安装、配置开发环境 一、Ubuntu、Windows11(10)双系统安装 因为ubuntu的安装网上的教程特别多了,所以这里不做赘述,推荐使用小破站这个up主的教程:Windows 和 Ubuntu 双系统从安装到…...

企业电子招投标采购系统之系统的首页设计

​​ 功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为…...

Python爬虫-阿里翻译_csrf

前言 本文是该专栏的第37篇,后面会持续分享python爬虫干货知识,记得关注。 笔者在前面有介绍过百度翻译的案例,感兴趣的同学,可往前翻阅查看(JS逆向-百度翻译sign)。而本文,笔者要介绍的是阿里翻译,相对于百度翻译的参数被逆向需要花点时间,阿里相对于易上手。 下面…...

C语言实现三子棋【详解+全部源码】

大家好,我是你们熟悉的恒川 今天我们用C语言来实现三子棋 实现的过程很难,但我们一定要不放弃 三子棋1. 配置运行环境2. 三子棋游戏的初步实现2.1 建立三子棋分布模块2.2 创建一个名为board的二维数组并进行初始化2.3 搭建棋盘3. 接下来该讨论的事情3.1 …...

双指针法将时间复杂度从 O(n^2) 优化到 O(n)

[1] 什么是双指针法 双指针法(Two Pointers)是一种常见的算法技巧,常用于数组和链表等数据结构中。 双指针法的基本思想是维护两个指针,分别指向不同的位置,通过它们的移动来解决问题。在某些情况下,使用双…...

【SpringBoot系列】 Spring中自定义Session管理,Spring Session源码解析

系列文章:Spring Boot学习大纲,可以留言自己想了解的技术点 目录 系列文章:Spring Boot学习大纲,可以留言自己想了解的技术...

【上位机入门常见问题】SQLServer2019 安装指导

SQLServer2019 安装指导 这里要说一下SQLServer的版本问题,首先说纵向的高低版本,如果大家跟我学习,我教给大家的是T-SQL编程的方法,而不是直接操作菜单的方法,所以,我们学习中只要使用SQLServer2012或以上…...

RabbitMQ第一讲

目录 一、RabbitMQ-01 1.1 MQ概述 1.2 MQ的优势和劣势 1.2.1 优势 1.2.2 劣势 1.2.3 MQ应用场景 1.2.4 常用的MQ产品 1.3 RabbitMQ的基本介绍 1.3.1 AMQP介绍 1.3.2 RabbitMQ基础架构 1.3.3 RabbitMQ的6种工作模式 ​编辑 1.4 AMQP和JMS 1.4.1 AMQP 1.4.2 JMS …...

华为机试题:HJ100 等差数列(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…...

数据推荐 | 人体行为识别数据集

人体行为识别任务旨在通过对人体姿态进行分析,识别出人体的具体动作,为人体行为预测、突发事件处理、智能健身、智能看护等领域提供技术支持。 图片 图片 人体行为识别数据标注方式 人体行为数据通用的标注方式包括人体关键点标注和动作标签标注&#…...

667真题分析 | 2023年667真题简要分析和答题思路参考

2023年667真题简要分析和答题思路参考 文章目录 2023年667真题简要分析和答题思路参考前言1. 名词解释2. 简答题3. 分析题3.1 答题框架(套路)3.2 答题框架实战3.2.1 图书情报档案事业如何在文化自信、文化强国中发挥自己的地位和作用3.2.2 高校图书馆如何发挥空间资源的功能和…...

配置 Docker 使用 GPU

准备工作 首先你需要准备一台拥有GPU的实例,在这里我将使用阿里云的竞价实例来做演示,因为它对于短期使用GPU更加划算。 注意,本篇文章将教你手动进行GPU驱动的配置,所以在购买时选择系统的时候不要选择自动安装GPU驱动。 具体关…...

「并发编程实战」常见的限流方案

「并发编程实战」常见的限流方案 文章目录「并发编程实战」常见的限流方案一、概述二、计数器限流方案三、时间窗口限流方案四、令牌桶限流方案五、漏桶限流方案六、高并发限流算法小结文章参考: 追忆四年前:一段关于我被外企CTO用登录注册吊打的不堪往事…...

IO 复习

IO 把电脑硬盘中的数据读到程序中,称为输入,进行数据的read操作 把程序往外部设备写数据,称为输出,进行数据的write操作 File类 一个File对象可以表示计算机硬盘上的一个文件或目录(文件夹) 可以获取文件信息,创建文件,删除文件 但是不能对文件中的数据进行读写操作 一些…...

什么是项目管理

项目管理(简称PM),就是将知识、技能、工具与技术应用于项目活动,以满足项目的要求。项目管理通过合理运用与整合特定项目所需的项目管理过程得以实现。项目管理使组织能够有效且高效地开展项目 “现代管理,项目就是一切…...

什么是入站营销?如何向合适的受众推销

没有什么比入站营销更有效地优先考虑客户体验了。 入站营销可为您的客户在他们需要的时间和地点准确提供他们想要的东西。它以最有机的方式在您的行业中建立信任、忠诚和权威。 什么是入站营销? 入站营销是一种商业方法,可提供优质内容和量身定制的客户…...

Qt 崩溃 corrupted double-linked list Aborted

文章目录摘要1 使用全局静态变量2 不取第一个和最后一个数3 将数据计算放到同一线程计算4 替换槽函数5 修改传值为const6 神奇的环境因素7 更神奇的板子差异8 另一个细节Aborted最后关键字: Qt、 Aborted、 corrupted、 double、 linked 摘要 额,结论&…...

牛逼了!这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer

这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer???????容我小小的嘚瑟一下下啦~~这份神仙面试宝典总共有25大专题:专题一:JavaOOP面…...

单链表详解

单链表一.概念二.一些类型的创建三.尾插四.头插五.头删尾删六.打印链表七.单链表查找,任意位置插入,任意位置删除八.源代码一.概念 该篇链表博客是按照工程项目的格式来记录的,与平常的算法链表有些许不同,注意区分。 二.一些类型的创建 三.尾…...

【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共5页精讲):该篇博文将告诉您: 如何让ECU发出的首帧/第一帧是网络管理NM报文/帧(Tx Nm报文先于Tx App应用报文发出) 目录 1 图解详述APP报文和NM报文是如何发送的...

网站ui/360推广怎么收费

【科技犬】华为6月2日发布会上会公布鸿蒙系统第一批升级名单,并且会在5月31号开始归档,6月2日同步升级,后续再逐步公布各批次升级时间,其中首批名单包括:Mate40、Mate40 Pro、Mate40 Pro、Mate40 RS、MateX2、nova8、n…...

可靠的常州网站建设/推广app下载

系统管理-管理节点,刷新状态 转载于:https://www.cnblogs.com/cocoat/p/5856669.html...

上海 企业网站建设/网站分析工具

有两种观点,一种观点是必须备案,另外一种观点是无需备案,这两种说法都有片面性,具体来讲:1:百度已经官方声明过,未备案的域名,其网站在搜索引擎中的关键词排名不会受到影响&#xff…...

263邮箱个人登录入口/长沙seo男团

前言 由浅入深、逐个击破 30SecondsOfCode 中函数系列所有源码片段,带你领略源码之美。 本系列是对名库 30SecondsOfCode 的深入刨析。 本篇是其中的函数篇,可以在极短的时间内培养你的函数式思维。 内容根据源码的难易等级进行排版,目录…...

wordpress k2/优化软件刷排名seo

EasyNVR流媒体解决方案 EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行…...

惠州网站建设模板/百度推广优化师培训

1.以业务为先。云计算沦为摆设的情况实在太常见了。把云计算策略当作整个业务策略之不可分割的一部分来制定,就会获得更高的回报。应该让业务策略来形成云计算方案必须应对的目标、机遇和制约条件。首席信息官应当尽早参与,把云计算解决方案塑造为促进业…...