三:BLE协议架构简介

news2024/10/6 20:27:55

低功耗蓝牙体系

  • 整体架构说明
    • 1. PHY(物理层)
    • 2. LL(链路层)
    • 3. HCI(主机与控制器通信接口)
    • 4. L2CAP(逻辑链路控制及适配协议)
    • 5. ATT(属性协议)
    • 6. GATT(通用属性规范)
    • 7. GAP(通用访问规范)
    • 8. SM(安全管理)

整体架构说明

在这里插入图片描述

架构层说明
PHY1. 物理层
2. 控制射频的发送和接收
LL1. 链路层
2. 定义通信结构体包括设备状态和射频控制
3. 提供Link Layer-level加密
HCI1. 主机控制器接口
2. 用于主机和控制器的通信
3. 控制器:PHY、Link Layer
4. 主机:L2CAP、ATT、GATT、GAP、SM
L2CAP1. 逻辑链路控制及适配协议
2. 充当协议复用器并处理数据包的分段和重组
3. 提供一个或多个复用的逻辑信道
ATT1. 属性协议
2. 提供了低功耗蓝牙设备之间数据传输的方法
3. 依赖于低功耗蓝牙的connection,基于connection它提供了读取、写入、指示、通知属性值的过程
GATT1. 通用属性协议
2. 为逻辑服务进行属性分组,例如心率服务 它公开了心率传感器的操作除实际数据外
3. 提供了属性的相关信息,及如何访问它们以及需要什么安全级别
4. 定义属性类型
GAP1. 通用访问规范
2. 为低功耗蓝牙设备和其它设备提供了设备广播、设备发现、打开和连接管理及数据广播
SM1. 安全管理
2. 提供绑定设备、加密和解密以及启用设备隐私的方法

1. PHY(物理层)

  • 频段:2.4GHz ISM频段(2402MHz-2480MHz)
  • 信道:40 RF信道,每信道2MHz带宽
  • 广播信道:3个广播信道(37,38,39);避开WIFI的1、6、11信道,这几个信道的中心频率分别为2412MHz(2402MHz-2422MHz)、2437MHz(2427MHz-2447MHz)、2462MHz(2452MHz-2472MHz),每信道带宽20MHz
    在这里插入图片描述
  • 调频方式:采用高斯频移键控(GFSK)的调制方式改变无线电波的频率,传输0或1的信息;频移键控是指把1和0通过轻微升高或者降低信号频率进行编码;调制指示表示围绕信道的中心频率的上下频率之间的宽度;传输无线电信号时,从中心频率出发超过185KHz的正向偏移代表值为1的比特;超过185KHz的负向偏移代表值为0的比特
  • 通信速率:Bluetooth4.0、4.1、4.2通信速率为1Mbps;Bluettoth5.0支持1Mbps和2Mbps
  • 发送功率和通信距离:
    在这里插入图片描述

2. LL(链路层)

  • 针对射频控制及bit数据流的发送和接收,BLE链路层提供第一级的控制和数据结构定义

    • 蓝牙状态机及状态切换
    • 数据帧和广播帧格式
    • 链路层操作
    • 连接、数据包分组、重传
    • 链路层级安全
  • 链路层操作包括:广播、扫描、建立连接

    • 广播
      • 1. 广播是低功耗蓝牙技术中最基本的操作之一。
        2. 广播为设备提供了一种告知存在、允许连接建立的方法。
        2. 广播数据中可以包含设备支持的服务列表、设备名称、发射功率等
      • 下图展示了:一个低功耗蓝牙设备在一个或多个广播信道上进行数据广播,并被远程设备发现
        Upper Layer Scanner Advertiser Advertisement 1 Found Device 2 Advertisement 3 Advertisement 4 Upper Layer Scanner Advertiser
      • 应用程序通常可以控制以下广播参数
        参数描述
        广播间隔20ms-10240ms1. 定义广播事件之间的间隔,每个广播事件根据配置的不同包含1至3个广播数据包
        2. 一个0-10ms的随机值被链路层添加到每个广播间隔以帮助避免数据包冲突
        广播信道37、38、391. 这些物理无线信道用于发送广播数据包
        2. 使用所有的信道是最可靠的操作,但以牺牲可靠性为代价减少广播信道数量可以降低设备功耗
        发现模式1. 不可发现
        2. 普通可发现
        3. 有限发现
        4. 广播
        1. 定义了广播者对其它设备的可见方式
        连接模式1. 不可连接
        2. 定向连接
        3. 不定向连接
        1. 定义广播帧是否能够被连接
        负载1. 主要广播(0-31Byte)
        2. BLE5辅助广播(0-255Byte)
        1. 在主要广播数据包中包含0-31字节数据
        2. 在BT5辅助广播数据包中可以包含0-255字节数据
    • 扫描
      • 1. 扫描是扫描者为发现和连接广播设备,或仅仅接收广播数据进行的一种操作
      • 两种扫描模式被支持:被动扫描、主动扫描
      • 在被动扫描模式中,扫描者仅仅监听传入的广播数据包。扫描者循环切换每一个广播信道,每次只监听一个信道
        Upper Layer Scanner Advertiser Advertisement 1 Found Device 2 Advertisement 3 Advertisement 4 Upper Layer Scanner Advertiser
      • 1. 在主动扫描模式中,扫描者监听传入的广播数据包,然后向广播者发送一包额外的扫描请求数据帧以获取更多信息。
        2. 通常在扫描应答帧中包含像所支持的服务列表、友好名称等信息,但是应用程序可以完全控制扫描应答帧中的内容
        Upper Layer Scanner Advertiser Advertisement 1 Scan Request 2 Scan Response(Name, Services) 3 Found Device (Name, Services) 4 Upper Layer Scanner Advertiser
      • 应用程序通常可以控制以下广播参数
        参数描述
        扫描间隔2.5ms-10240ms1. 扫描间隔是从一个扫描事件开始到下一个扫描事件开始的ms数
        2. 扫描间隔一定要大于或等于扫描窗口
        扫描窗口2.5ms-10240ms1. 扫描窗口定义了扫描事件中的监听(RX)窗口周期
        扫描类型1. 有限
        2. 普通
        3. 观察
        1. 定义扫描者可应答的广播者类型
        扫描模式1. 主动
        2. 被动
        1. 定义执行主动扫描还是被动扫描
        连接模式1. 不可连接
        2. 定向连接
        3. 不定向连接
        1. 定义广播者是否可连接
    • 连接
      • 1. 连接允许应用层数据以一种可靠、稳健的方式传输。
        2. BLE使用CRC校验、应答、重传以确保数据的正确交互。
        3. BLE连接使用自适应跳频(AFH)来检测和适应周围的环境,并提供一个可靠的物理层。
        4. 连接支持数据的加密和解密以确保它的安全性

      • 扫描者当收到一个可连接的广播者发送的广播数据帧后发起BLE连接。下图示例BLE连接过程

        Initiator & Master Advertiser & Slave Advertisement 1 Advertising Channels 1<->7:Total time < 3ms Connect Request 2 par [initiator-advertiser] 1<->7:Total time < 3ms "poll" 3 Data 4 Data Channels ACK 5 LL Terminate 6 ACK 7 par [master-slave] Initiator & Master Advertiser & Slave
      • 应用程序通常可以控制以下广播参数

        参数描述
        最小连接间隔7.5ms1. 最小允许的连接间隔
        最大连接间隔4000ms1. 最大允许的连接间隔
        连接(外设)延迟0-500(连接间隔)1. 定义扫描者可应答的广播者类型
        监督超时100ms-32000ms1. 定义通信可中断多长时间在连接被丢弃并向用户告知错误之前
      • 在一个连接的生命周期中连接参数可以通过”连接更新消息”被修改和更新

      • 1. 当主设备在定义的连接间隔内向从设备发送一包数据帧则连接事件开始(如图4.5)。
        2. 从设备在收到来自主设备的数据包150us后可以进行应答。
        3. 如果从设备没有数据要发送,它可以跳过在“连接(外设)延迟”中定义的一定数量的连接事件(如图4.6)。
        4. 如果主设备或从设备在规定的“监督超时”时间内没有收到数据包,则连接终止

        在这里插入图片描述

      • 1. 如果从设备要发送的数据超过了单包数据的容量,则连接事件会自动扩展。
        2. 从设备可以发送尽可能多的数据包在下一个连接间隔开始前。
        3. 这中操作只能与不需要应答的属性协议一起使用

  • 网络拓扑:在BLE中定义的设备角色

    • 广播者:一个设备发送广播帧,但它自己不能接收,它可连接或者不可连接
    • 扫描者:一个设备仅仅监听广播帧,它能连接广播
    • 从设备:一个设备连接单个主设备(BT 4.0)或多个主设备(BT4.1和更新)
    • 主设备:一个设备被单个或多个从设备连接。理论上一个主设备可以有无数个从设备连接到它,实际上一个主设备一次可连接4-20从设备
    • 混合者:一个设备可以同时进行广播和扫描,或者广播被连接到一个主设备并同时进行扫描
    • BLE网络拓扑图:
      在这里插入图片描述
    • BLE网络拓扑图:
      在这里插入图片描述

3. HCI(主机与控制器通信接口)

  • HCI:提供主机和控制器的标准接口
  • HCI由两个独立的部分组成:逻辑接口和物理接口
  • 逻辑接口:逻辑接口定义命令和事件及其相关的行为,逻辑接口可以交付给任何物理传输或者通过位于控制器上的本地应用程序编程接口(API)交付给控制器
  • 物理接口:物理接口定义命令、事件和数据如何通过不同的连接技术来传输,已定义的物理接口包括USB、SDIO和两个UART的变种

4. L2CAP(逻辑链路控制及适配协议)

  • L2CAP定义了:L2CAP信道和L2CAP信令
  • L2CAP信道:是一个双向数据通道,通向对端设备上的某一特定的协议或规范
  • 低功耗蓝牙中只使用固定信道:一个用于信令信道,一个用于安全管理器,一个用于属性协议

5. ATT(属性协议)

  • 低功耗蓝牙规范展示了设备状态。状态被定义为一个或多个称为属性的值。访问这些属性的协议被称为属性规范(ATT)
  • 属性协议(ATT)定义了位于L2CAP通道之上服务器角色设备和客户端角色设备之间的通信。属性协议定义了两个角色:
    • 服务器:作为存储一个或多个属性数据的设备
    • 客户端:收集一个或多个服务器信息的设备
  • 客户端可以访问服务器的属性,客户端通过发送请求来触发服务器的应答
  • 为了提高效率服务器可以主动发送两种未经请求的属性消息:
    • notifications:不需要确认
    • indications:需要客户端发送确认
    • 客户端也可以向服务器发送消息以写入属性值。请求/响应、指示/确认事务遵循stop-and-wait模式
  • 为了提高效率服务器可以主动发送两种未经请求的属性消息:
    在这里插入图片描述
  • 属性定义:
    • 属性可以是0-512字节不等的数组,它可以是定长也可以是变长
      在这里插入图片描述
    • 所有的属性都包含句柄,句柄用于寻址单个属性。如图所示客户端通过句柄访问服务器的属性
      在这里插入图片描述
    • 属性同样包含类型,用UUID进行描述
      在这里插入图片描述
  • 属性协议操作
    • 属性协议是一种无状态、顺序的协议,这意味协议中不存储状态,一次只能执行一个操作
    • 属性协议方法如下面描述
      在这里插入图片描述
  • 应答
    • ATT操作通常需要应答(ACKs)。这允许应用程序知道哪些数据包已成功传输,这可应用于设计可靠的应用程序
    • 因为服务器必须等待客户端的应答,因此数据的吞吐量会受到影响
    • Non-ACKed操作可以应用于高吞吐量的应用,它可以在一个连接间隔内执行多个操作。链路层仍会重传丢失的包,所以可靠性不受影响。但应用程序不知道哪些数据包已经成功发送
    • 多种操作如图所示:
      在这里插入图片描述

6. GATT(通用属性规范)

  • 通用属性协议(GATT)建立在属性协议(ATT)之上,并为属性协议传输和存储的数据提供统一的框架。GATT定义两个角色:服务器和客户端
  • GATT服务器存储通过ATT传输的数据,并接收来自GATT客户端的ATT请求。GATT服务器另一方面发送请求应答,当收到配置时发送指示和告知到GATT客户端。GATT还指定存储在GATT服务器上的数据格式
  • 属性分为服务和特性,服务包含一系列特性。特性包含单个值和描述特性值的任意数量的描述符
  • 蓝牙规范定义了数据交换的结构。规范定义了元素例如服务和特性,他也包含安全定义和连接建立参数。通常规范包含高级用例所需的一项或多项服务,例如心率、节能监控。标准的规范允许设备和软件供应商互连互通
  • 服务:是由一个或多个特性组成的数据集合,用于完成设备的特定功能,例如电池监控或温度数据而不是完整的用例
  • 特性:是在服务中使用的一个值,用于公开或交换数据或控制信息。特性具有明确定义的已知格式。它们包含如何访问信息、必须满足哪些安全需求、特性值如何被显示和解释。特性同样包含特性描述符、特性配置权限、数据指示和告知
  • 下图说明了GATT客户端、GATT服务器、服务、特性、特性声明、数据、描述符之间的关系:
    在这里插入图片描述

7. GAP(通用访问规范)

  • GAP通常是蓝牙开发者所接触到第一个协议。这是因为GAP通常用于控制一个设备对于其它设备的可见和可连接,以及如何被远程设备发现和连接
  • 简单来说,GAP提供了对链路层操作(如链路操作章节描述的那样)的访问,这些链路层操作和设备发现,连接建立,终止以及连接时序控制有关
  • GAP定义了为底层控制器提供特定要求的设备角色。角色允许设备射频只Tx、只Rx或者两种功能都有
    • 广播者(TX only):发送广播事件和广播数据
    • 侦察者(RX only):侦听广播事件和广播数据
    • 从设备(RX TX):从设备总是能被连接和广播,能被主设备单一连接的一种简单设备
    • 主设备(RX TX):通常主设备从不广播,专门负责启动和管理多个连接
  • 一个设备可以支持多个角色,但在给定的时间内只能支持一个角色
  • GAP还定义了发现、连接、绑定的模式和过程
    • 模式:
      • 可连接:能够创建一个连接。状态:不可连接、可连接
      • 可发现:能够被发现(is advertising)。状态:无、有限、常规
      • 可绑定:如果可连接,将于连接的设备配对以实现长时间连接。状态:不可绑定、可绑定
    • 过程:
      • 名称发现:进入菜单并发现其它设备的名称。该名称与双模设备中的BR/EDR共享
      • 设备发现:搜索可用于连接的设备
        1:发现设备地址和名词

        2:定义设备角色
      • 连接建立:选择一个广播设备和它建立连接
        1:指示链路层发送CONNECT_REQ
        2:执行服务发现
        3:请求设备认证
        4:请求使用服务
      • 服务发现:用于查找主设备和从设备之间对等的服务

8. SM(安全管理)

  • 为了确保基于BLE技术的通信安全,该技术提供了一些特性确保可信性、完整性、私密性及数据的加密
  • 下面给出BLE安全技术的整体概述,后续会详细技术:Pairing、Encryption、Privacy
  • 蓝牙安全提供哪些保护:
    • 蓝牙规范定义了保护用户数据及身份的安全特性。BLE技术的安全特性符号NIST或者FIPS
    • BLE技术提供三种基本的安全服务:
      1:身份验证和授权:在设备间建立信任关系
      2:加密和数据保护:保护数据完整性和机密性
      3:隐私和保密:防止设备追踪
    • BLE安全模型包含5个安全特性:
      1:Pairing(配对):创建共享密钥的过程
      2:Bonding(绑定):保存Pairing过程中创建的密钥,以备后面使用
      3:Device authentication(设备认证):验证存储的密钥
      4: Encryption (加密):数据保密
      5:Message integrity(消息完整性):防止数据更改
    • 安全管理者的职责:
      1:配对
      2:密钥分配
      3:生成哈希和短期密钥
    • 另一方面链路层负责数据的加密和解密
    • BLE安全功能可针对无线通信中的以下常见威胁提供保护:
      1:中间人攻击(Man-in-the-Middle Protection)
      1:防止被动窃听(Protection against Passive Eavesdropping)
      3:隐私保护(Privacy Protection)
  • 配对和绑定:
    • 蓝牙配对是相关各方交换其身份信息以建立信任关系并生成用于数据交换的加密密钥的过程。BLE技术提供多种配对选项,具体取决于应用程序的安全要求
    • BLE标准版本V4.0和V4.1使用安全简单配对模型,用户可以在基于input/output 能力的Just Works、Passkey Entry、Out-of-Band的方法中选择一种
    • BLE标准版本V4.2中,新的LE安全连接配对模型、添加a numeric comparison method、引入introducing the Elliptical Curve DiffieHellman(ECDH)密钥交换算法以增强安全性
    • 下表总结了可以在双方之间使用的关联模型、具体取决于它们支持的I/O能力。术语配对是指安全密钥的生成和交换、术语绑定是指安全密钥的存储以备它们在后期使用
      在这里插入图片描述
      在这里插入图片描述
  • 加密
    • BLE技术使用AES-CCM加密技术进行加密、加密由BLE控制器执行。加密函数使用FIPS-1971中定义的AES-128位块密码生成128位密钥
  • 隐私
    • BLE技术还支持降低在一段时间内跟踪低功耗蓝牙设备的能力的功能
    • 为了解析私有地址设备需要预先绑定。公共地址是使用在之前配对或绑定过程中设备的IPK(Identity Resolving Key)生成的
    • 在蓝牙4.0和4.1标准中,私有地址在主机上解析和生成。在蓝牙4.2和最新的标准中,私有地址在控制器处解析和生成,而不涉及主机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java开发 - Quartz初体验

前言 在上一篇博客中&#xff0c;我们对单点登录有了初步了解&#xff0c;这也让我们独立做系统有了最基础的保障。但在业务开发中&#xff0c;总是会出现一些定期处理的任务&#xff0c;我们首先想到的是Timer&#xff0c;但由于其调度功能单一&#xff0c;我们实际并不会用它…

sqlmap工具说明

目录 1 工具简介 3 1.1 简述 3 1.2 背景及需求 3 1.3 主要功能 3 2 功能确认 4 2.1 安装和使用 4 2.1.1 Windows操作系统 4 2.1.2 Linux操作系统 6 2.1.3 Kali 7 2.2 添加目标 7 2.2.1 参数-u 7 2.2.2 参数-m 8 2.2.3 参数-r 9 2.3 指定参数 11 2.4 爆破数据库 11 2.5 爆破表 …

【LeetCode】剑指 Offer(16)

目录 题目&#xff1a;剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer …

Uipath DataTable-Build Data Table(构建数据表)

Build Data Table(构建数据表) 活动描述 Build Data Table(构建数据表)&#xff1a;通过在“构建数据表向导”窗口可以构建数据表。 使用如下图&#xff1a; Build Data Table(构建数据表)属性配置 属性 作用 DisplayName 在设计器面板中设置活动显示的名称 Private 如…

List、Set、Map众多集合框架等你来学,让我们一起精进Java框架的知识点吧

文章目录一、各集合特性二、HashMap深入解析三、遍历集合元素的若干方式一、各集合特性 1. ArrayList特性 不唯一&#xff0c;有序&#xff1a;实现了List接口&#xff0c;该接口是序列&#xff0c;所以不唯一且按顺序保存不同步&#xff1a;因为ArrayList.add&#xff08;&am…

Java 编写Vue组件(VueGWT的初尝试)

在之前&#xff0c;我曾写过这样的文章《不会前端没事&#xff0c;用GWT Boot和Spring Boot构建Web程序》&#xff0c;这篇文字使用的Domino UI来做前端页面&#xff0c;由于现在更流行VUE&#xff0c;并且VUE的页面更具现代化&#xff0c;所以我尝试了一下VueGWT。 VueGWT 有…

Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported

前言 前端项目使用( npm run dev ) 运行vue项目时&#xff0c;出现错误&#xff1a;Error: error:0308010C:digital envelope routines::unsupported 经过探索&#xff0c;发现问题所在&#xff0c;主要是nodeJs V17版本发布了OpenSSL3.0对算法和秘钥大小增加了更为严格的限制…

xFormers安装使用

xFormers是一个模块化和可编程的Transformer建模库&#xff0c;可以加速图像的生成。 这种优化仅适用于nvidia gpus&#xff0c;它加快了图像生成&#xff0c;并降低了vram的使用量&#xff0c;而成本产生了非确定性的结果。 下载地址&#xff1a; https://github.com/faceb…

C++ | 你真的了解namespace吗?

文章目录一、前言二、命名冲突三、命名空间1、域作用限定符2、命名空间的概念&#x1f449;示例1&#x1f449;示例23、命名空间的定义4、命名空间的使用① 指定命名空间访问【做项目】② 使用using部分展开【做项目】③ 使用using namespace全局展开【日常练习】5、小结解答&a…

【经验分享】使用了6年的实时操作系统,是时候梳理一下它的知识点了 | 文末赠书4本

使用了6年的实时操作系统&#xff0c;是时候梳理一下它的知识点了 摘要&#xff1a; 本文简单介绍了博主学习操作系统的心路历程&#xff0c;同时还给大家总结了一下当下流行的几种实时操作系统&#xff0c;以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 文章目录…

【开放域目标检测】一:Open-Vocabulary Object Detection Using Captions论文讲解

出发点是制定一种更加通用的目标检测问题&#xff0c;目的是借助于大量的image-caption数据来覆盖更多的object concept&#xff0c;使得object detection不再受限于带标注数据的少数类别&#xff0c;从而实现更加泛化的object detection&#xff0c;识别出更多novel的物体类别…

【数据结构】顺序表:尾部操作我很行,随机访问我超快!!!

顺序表的模拟实现 文章目录顺序表的模拟实现1.线性表2.顺序表2.1概念结构2.2顺序表的模拟实现2.2.1顺序表的初始化2.2.2顺序表的销毁2.2.3尾插数据2.2.4尾删数据2.2.5头插数据2.2.6头删数据2.2.7中间插入数据2.2.8中间删除数据2.2.9打印顺序表2.2.10查找数据2.2.11复用Insert和…

Linux学习第二十一节-sudo提权

1.概念 管理员提前为用户设置执行权限许可&#xff1b; 被授权用户有权执行授权命令&#xff1b; 配置文件&#xff1a;/etc/sudoers&#xff1b; 命令格式&#xff1a;sudo 特权命令。 2.提权操作 ①方式一vim编辑配置文件后wq&#xff01;&#xff1a;#vim /etc/sudo…

pnpm 基本详细使用(安装、卸载、使用)

一、简介 官网地址、GitHub地址、官方安装文档、官方卸载文档。 pnpm 全称 performant npm&#xff0c;意思为 高性能的 npm。pnpm 由 npm/yarn 衍生而来&#xff0c;解决了 npm/yarn 内部潜在的 bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景。被誉为 最先进的…

【Docker】之docker-compose的介绍与命令的使用

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录docker-compose简介docker-compose基础…

Word文档的密码忘记了怎么办?

Word文档可以设置两种密码&#xff0c;文件的“限制密码”和“打开密码”&#xff0c;今天来分享一下忘记这两种密码可以如何处理。 如果忘记的是Word文档的“限制密码”&#xff0c;文档就无法编辑及更改了&#xff0c;菜单目录中的相关选项也都是灰色状态&#xff0c;无法点…

LeetCode-343. 整数拆分

目录递归动态规划题目来源 343. 整数拆分 递归 对于给定的一个整数 n&#xff0c;穷举它的每一种分解情况&#xff0c;然后对所有情况&#xff0c;求最大值。 并且我们知道&#xff0c;n 可以拆成如下情况&#xff1a; 通过上图&#xff0c;我们很容易得到一个递归表达式&am…

Verilog使用always块实现时序逻辑

这篇文章将讨论 verilog 中一个重要的结构---- always 块&#xff08;always block&#xff09;。verilog 中可以实现的数字电路主要分为两类----组合逻辑电路和时序逻辑电路。与组合逻辑电路相反&#xff0c;时序电路电路使用时钟并一定需要触发器等存储元件。因此&#xff0c…

用Chrome浏览器加入新必应候补名单,微软最终还是无法赢得一切(~ ̄▽ ̄)~

前言 ChatGPT最近太火了&#xff0c;国内厂商刚开始宣布跟进时&#xff0c;微软必应搜索直接接入了ChatGPT的能力&#xff0c;推出了新必应。此举给Google当头一棒&#xff0c;相比于传统搜索引擎&#xff0c;新必应的这种搜索方式&#xff0c;让用户更快速的获取到自己问题的…

02 C语言计算

02 C语言计算 0、编程练习题 #include<stdio.h>int main(int argc,char const *argv[]){int a,b;scanf("%d %d",&a,&b);printf("%d %d %d\n",a,b,a b);printf("%d - %d %d\n",a,b,a - b);printf("%d * %d %d\n",a…