精华内容
下载资源
问答
  • 关系的度(degree)一对一与一对多并发控制并发控制概述封锁三协议第一封锁协议第二封锁协议第三封锁协议活死锁死锁预防一次封锁(完全封锁)顺序封锁死锁诊超时法等待图法死锁解除并发调度的可串行性可串行化调度...

    前言

    今天小测,赶快抱佛脚 Orz 。。。。

    编辑下,小测炸了,投啦投啦

    注:
    前半部分是个人对全英 ppt 的翻译,大家就当看个笑话 ,不保证准确性。。。
    后半部分是中文 ppt 的个人笔记,侵删。

    ER模型

    ER 模型,又名 “实体关系模型”,洋文叫 Entity - Relationship Model,是数据库结构设计的第一步,也是至关重要的一步,因为其决定了一些数据库的约束细节。

    实体

    实体是客观世界的一个描述。比如学生 “小明” 是一个实体。而实体集合则描述了一群实体,比如 “学校的所有学生”,或者 “隔壁老王的羊群” 就是实体的集合。

    在这里插入图片描述
    实体又根据其特征分为强弱实体。

    其中:

    1. 能够独立存在,自己(的特征)能够唯一地标识自己,这种实体是强实体
    2. 必须依赖其他强实体才能唯一地标识自己,这种实体是弱实体

    举例:

    一个员工是强实体。就比如同一办公室的 A 和 B,就不会被人搞混。

    一个银行账户是强实体。存款多少?谁拥有?白纸黑字,十分清楚。

    一个交易是弱实体,因为必须同时确定 “经手员工” 和 “银行账户” 才能够唯一地描述该交易。比如账户 1145141919810,经过柜台员工 C,存款 3000 元。账户和员工缺一不可。

    在这里插入图片描述

    属性

    属性是一些实体抽象出来的共有属性,比如人的两个肩膀扛一个脑袋,或者是螃蟹的八只脚。

    属性分为原子属性和复合属性,其中原子属性不可进一步拆分,比如年龄,性别。而复合属性可以被进一步拆分,比如姓名就可以等价于【姓+名】

    在这里插入图片描述

    关系

    关系是实体层面的概念。比如学生实体 A 报名选修了课程实体【离散数学】,那么这两个实体之间就建立了 “关系”

    在这里插入图片描述

    在这里插入图片描述

    参与

    【参与】这个概念是基于 entity 层面的。值得注意的是,并非所有 entity 都能参与关系 r。

    令 R 是实体集合 E1,E2,E…,En 上的一组关系的集合。一个 E1 中的实体 e1 参与关系集合 R,当且仅到 R 中存在包含 e1 的关系(元组)

    比如:

    1. E1=学生实体集合,E2=老师实体集合
    2. 关系集合 R 中存在一个关系(学生e1,老师e2)
    3. 其中学生实体 e1 属于 E1,老师实体 e2 属于 E2
    4. 那么称 e1,e2 参与关集合 R

    此外,同一组实体集合,可能他们之间存在不同的关系:

    1. 比如一个员工在一个部门工作(员工e,部门d)
    2. 或者是一个员工是该部门的经理(部门d,经理m)。

    注:
    这段话太拗口了,不 bb 看原文:

    在这里插入图片描述

    此外【R 是实体集合 E1,E2 上的关系】不等价于【E1,E2 中的每个实体都参与 R】,比如不是所有员工都是部门的经理,所以他们并不参与(经理,部门)这个关系。

    如果实体集合 E1 中的每个实体都参与关系 R,那么称 E1 完全参与 R。

    在这里插入图片描述

    关系的度(degree)

    关系的度即为参与该关系的实体集合数目。

    在这里插入图片描述

    一元关系:即只有一个实体集合参与的关系,度为 1,比如:

    1. 学生实体 s1 和学生实体 s2 是同学关系,有(s1,s2)和(s2,s1)
    2. 员工实体 e1 和员工实体 e2 是同事关系,有(e1,e2)和(e2,e1)

    在这里插入图片描述

    二元关系:即两个实体集合参与的关系,度为 2,比如:

    1. 学生实体 s1 选修课程实体 c1,那么有(s1,c1)
    2. 人实体 p1 拥有车辆实体 c1,那么有(p1,c1)

    注意有向性。。。即谁决定谁

    在这里插入图片描述

    三元关系同理,要注意谁决定谁:

    在这里插入图片描述

    一对一与一对多

    关系也有一对 n 的区别。比如一对一的关系就像【丈夫】和【妻子】。

    比如对于实体集合 E1,E2。E1 中的每一个实体 e1,最多存在一个 E2 中的实体 e2 与 e1 产生联系。

    在这里插入图片描述

    此外,一对一关系也分一元和二元(对应有向图和无向图),比如:

    1. 丈夫实体 h 对应妻子实体 w,那么有 二元的一对一 关系:(h,w)和(w,h)
    2. 妻子实体 w 嫁给 丈夫实体 h,那么有 一元的一对一 关系:(w,h)

    注意我们不能说【丈夫】嫁给【妻子】(因为 “嫁” 这个动词,并不存在这个关系,或者说不存在反向边)

    仅针对该动词。反过来【妻子】嫁给【丈夫】是合理的一元关系。

    在这里插入图片描述


    有 1 就有 n,一对多关系更多地应用于数据库中。比如一个学生可以有一个班级,但是一个班级可以对应很多个学生。

    在这里插入图片描述

    和上面的一对一关系一样,多对一关系也分一元和二元(对应有向图和无向图),比如:

    1. 一场洽谈会,可以有一个导师和 n 个学生。谓语为【洽谈】,于是有关系【学生和老师洽谈】or【老师和学生洽谈】
    2. 一个母亲实体 m 可以有 n 个孩子 ci,谓语为【是 xxx 的母亲】,但是反过来不能有【ci 是 m 的母亲】

    在这里插入图片描述

    多对多:和上面雷同

    在这里插入图片描述

    ER 图符

    通过一些标准化的图符来描述 ER 模型。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    比如我们可以用如下的图来表示名为【嫁给】的 一元一对一关系

    在这里插入图片描述
    一对多的二元,三元关系也是同理的:
    在这里插入图片描述

    关系转化(重要)

    关系转化是指通过关系图,写出对应的关系元组(或者说是写出数据库表的结构)。这里重要的意思是考试要考。

    至于为啥叫【转换】
    你问我??
    唔。。。。原文是 transform
    直译过来就是转换,没毛病 Orz

    对于一对一的关系,我们可以用外键的形式给出对应的约束。比如经理和部门之间的一对一关系:

    在这里插入图片描述

    我们通过关系转换,得到两个表,分别是:

    1. dept(Name,location)
    2. managers(SSN, Name, Age, Dept_name)

    这里仅展示第一种表的划分(下图左侧)。我们把 dept 表的主键 Name,以外键约束的形式,划分到 Manager 表中,表示该经理管理的是哪个部门

    在这里插入图片描述
    因为是一对一的关系(即一个部门有且只有一个经理)所以我们可以有两种划分表的方式。


    值得注意的是,如果面对多对一的关系比如某个员工管理某个部门:

    在这里插入图片描述

    经理也是员工,但并非所有员工都是经理,我们就要小心了:

    • 我们只能在部门表 dept 中,以外键约束 manager_SSN 来表示该部门的经理
    • 不能在员工表中添加一项外键来表示该员工所管理的部门
    • 因为不是所有员工都是经理。

    所以我们只能有一种外键的形式,那就是在 dept 表中添加外键,表示谁是该部门的老大:
    在这里插入图片描述

    注:
    如果你还没有晕,那你就没晕了(雾
    这里仅是我的理解
    但是,相信我,老师,给的,全英文的,ppt,更加,抽象,只有一张,图

    在这里插入图片描述

    同理,人人都有且仅有一个母亲,于是我们可以通过外键 mother_SSN 来唯一地表示该 person 的母亲。

    但是一个母亲可能有多个孩子,于是我们不能使用 child_SSN 来表示一个母亲的孩子。

    在这里插入图片描述

    对于一些复杂的属性,比如姓名又分为【姓+名】,我们一般有两种方案:

    1. 将复杂属性拆分并且合并到主表中
    2. 将复杂属性单独作为一个表,然后通过主表的外键约束进行寻址

    看图:
    在这里插入图片描述

    我们来做个简单题目:看图,写出表的结构(关系转换),这里使用 method1 进行转换:

    method1 不认为 programmer 或者是 manager 为新的类,于是仅使用员工 id(EMP#)来查询 Manager 的 budget 属性和 Programmers 的 Years_of_experience 属性:

    在这里插入图片描述

    method2 如下,因为将继承的类(programmer 和 manager)看作一张单独的表,于是我们要多写很多条目:

    在这里插入图片描述

    并发控制

    数据库往往是很多请求并发的进行,于是涉及到并发控制。

    概述

    并发控制的核心单位是【事务】,一个事务表示一件事情,比如收钱和出货往往是永不分离的,那么收钱和出货就组成一个事务。

    事务具有原子性,一个事务的所有操作要么全部执行,要么全部不执行,否则就会出错。

    并发控制中的不一致性

    在实际情况,收钱和出货往往不能够做到完全原子化,事实上,出货和收钱都是数据库中的一条 alter 命令,执行两条命令,必有先后!

    在这里插入图片描述

    并发操作会导致三种场景错误情况:

    1. 丢失修改(前一次修改的结果覆盖后一次修改的结果)
    2. 不可重复的(读数据在读之后被修改,读的是旧的数据)
    3. 脏读(读数据之后数据回滚,读的是新的数据)

    在这里插入图片描述

    修改丢失

    丢失修改发生于两个事务先后提交修改请求,那么前一次的修改就会被覆盖。
    在这里插入图片描述

    不可重复读

    不可重复读指的读请求之后,目标数据马上被修改,导致读的数据是旧的。
    在这里插入图片描述

    在这里插入图片描述

    脏读

    脏读指的是在某个事务 t 之后读数据,t 回滚导致读请求读到的是错误的数据。

    (注意与不可重复读区分,区别是:

    1. 脏读读取的是 “新” 的数据,不可重复读读取的是旧的
    2. 脏读往往伴随着 回滚 的发生

    在这里插入图片描述

    封锁技术

    封锁是一项重要的技术。在对数据进行存取之前,先将数据保护起来,即锁起来。

    基本的封锁类型有两类:

    1. 共享锁(S 锁)
    2. 排它锁(X 锁)

    在这里插入图片描述

    封锁三协议

    锁的基本类型有了,还要进行锁的使用规范。类比数据库三范式,锁的使用也有三协议。

    第一封锁协议

    一级封锁协议约定:

    1. 事务 T 在修改数据 R 之前必须对 R 上 X 锁,直到事务结束才释放

    因为要修改就要有 X 锁,而 X 锁能够保证当前事务的修改不被覆盖:

    在这里插入图片描述

    第二封锁协议

    二级封锁协议约定:

    1. 事务 T 在修改数据 R 之前必须对 R 上 X 锁,直到事务结束才释放
    2. 事务 T 在读取数据 R 之前必须对 R 上 S 锁,读完即可释放

    因为读数据之前要加 S 锁,而如果数据正在被写,那么根据协议 1,数据上面必有 X 锁,此时 S 锁加不上去,于是避免了可能存在的脏读:

    在这里插入图片描述

    注:
    因为 读完我们就释放 S 锁
    这意味着读完之后,同一数据的修改是当前事务不可控制的了
    那么我们无法避免【不可重复读】的异常情况。

    第三封锁协议

    三级封锁协议约定:

    1. 事务 T 在修改数据 R 之前必须对 R 上 X 锁,直到事务结束才释放
    2. 事务 T 在读取数据 R 之前必须对 R 上 S 锁,直到事务结束才释放

    因为 S 锁必须等到事务结束才释放,我们的事务可以完全保证要读的数据不被修改(因为改数据要加 X 锁,而 S 锁保证 X 锁加不上去),于是可以防止【不可重复读】的异常情况。

    在这里插入图片描述

    活死锁

    有锁必有死锁问题。先来看活锁:

    活锁的意思是在多个事务同时请求锁的时候,我们只能随机的给一个事务分配锁,那么就有可能出现一个永远轮不到的锁请求:

    在这里插入图片描述
    解决活锁也很简单,比如制定先来后到的规则即可。主要的难点还是死锁。


    来看死锁。死锁是两个事务都互相依赖于对方已经封锁的数据。因为锁在事务结束后释放,那么两个事务永远无法结束,陷入无穷的等待。。。

    在这里插入图片描述
    解决死锁可以从两方面下手:

    1. 不让死锁产生(预防)
    2. 解除死锁(拆锁)

    死锁预防

    死锁的预防是一难题。一般有如下两种方案:

    1. 一次封锁
    2. 顺序封锁

    一次封锁法,指的是一次性将所有用到的数据都上锁。缺点就是强制将并发事务阻塞成串行事务,降低了系统的并发性。

    而顺序封锁法,则是预先规定一组封锁顺序,比如先封锁 A 数据,后封锁 B 数据。人为地制定封锁顺序可以避开死锁发生的情况。难点是方案难以拟定,每更改一个应用场景,都要换方案,十分困难。

    死锁诊断

    死锁诊断则较为被动。在死锁发生的时候,我们需要判断当前系统是否发生了死锁。常见的方法有:

    1. 超时法
    2. 等待图法

    超时法很简单。如果上锁超过一定时间,就人为发生死锁。但是弊端也很明显:如果我事务就是要这么长时间呢?

    更加流行的方法是使用等待图法,即画出锁之间的依赖图。如果依赖图有环,那么说明会发生死锁!

    在这里插入图片描述

    死锁解除

    zsbd。
    在这里插入图片描述

    并发调度的可串行性(重要)

    数据库对于并发的事务的不同调度可能会产生不同的结果。

    串行调度意为顺序执行 n 个事务(只要不并发就不会有并发问题,经典鸵鸟 )而串行调度的结果是正确的。

    此外,执行结果等价于串行调度结果的调度,也是正确的调度。

    可串行化调度

    可串行化调度的定义是: n 个事务并发的执行,当且仅到其结果 R1,与串行地顺序执行 n 个事务得到的结果 R2,当 R1=R2 时,该调度为可串行化调度。

    一个给定的并发调度,当且仅到它是可串行化的,才是正确的调度。

    注:
    判断一个调度是否是可串行化调度,只要其调度结果,满足任意串行调度的全排列中的一个,即认为其是可串行化调度。
    比如事务 A,B,C 有 6 种调度顺序:ABC,ACB,BAC,BCA,CAB,CBA
    那么有结果 R1,R2,R3,R4,R5,R6
    只要最终调度的结果等于 R1,R2,R3,R4,R5,R6 中的任意一个,即认为该调度是可串行化调度

    例子:

    在这里插入图片描述

    如下图:

    我们按照 T1,T2 的顺序串行调度,结果为:A=3,B=4

    我们按照 T2,T1 的顺序串行调度,结果为:A=4,B=3
    在这里插入图片描述
    如下图:

    如果串行执行就会发生问题:结果不属于顺序执行的结果(3,4 或 4,3)中的任意一个,这里就发生了 “不可重复读” 的冲突!

    在这里插入图片描述

    如下图:则是一种正确的调度

    在这里插入图片描述

    冲突可串行化调度

    冲突可串行化是一种比 “可串行化” 更加严格的条件,一般在商用系统中调度器采用的都是这种策略。

    冲突可串行化要求一组事务的 冲突操作 满足可串行化的条件。那么什么是冲突操作呢?

    冲突操作

    冲突操作是指 不同事务 对于 同一数据

    1. 【读,写】 操作,互为冲突操作
    2. 【写,写】 操作,互为冲突操作

    其他的不是冲突操作

    在这里插入图片描述

    其中,不能交换的操作有:

    1. 同一事务的两个操作
    2. 不同事务的 冲突操作

    所以我们可以得出冲突可串行化的的定义:

    一个调度在 保证冲突操作顺序不变 的情况下,通过交换两个事务的 不冲突操作,得到一个新调度 S。如果 S 是串行的(结果等于任意一个顺序串行的执行结果),那么称 S 是冲突可串行化的调度。

    例子

    因为不同事务对于不同数据的【读,写】操作不是冲突操作,故我们交换事务 1,2 对于 A,B 的【读,写】操作的顺序,得到的新调度是合法的。

    在这里插入图片描述

    值得注意的是,可串行化调度,不一定是冲突可串行化调度,因为后者的要求更加严格!

    在这里插入图片描述

    两段锁

    两段锁规定了上锁的规范。进一步保证了事务的正确性。两段锁规定一个事务的上锁分为两个阶段:

    1. 扩展阶段:事务可以申请锁,但是不能释放任何锁
    2. 收缩阶段:事务可以释放锁,但是不能申请任何锁

    两段锁的精髓就是:各取所需,在用完之后马上释放。可以大大提高系统的并发性能
    在这里插入图片描述

    封锁粒度

    封锁粒度指的是封锁的规模。我们是要对一条记录上锁?还是一张表?一个页?一个数据库都上锁?

    锁的粒度越大,开销也越大,并发性能就越小。

    在这里插入图片描述

    隐式锁

    因为数据库中,数据存在树形结构关系,那么对父节点上锁,意味着子节点全部被锁了。

    在这里插入图片描述

    其中隐式锁就是父节点加锁,子节点跟着被锁了。尽管没有直接锁子节点,但是无形的带🔒已经将子节点封锁了。

    在这里插入图片描述

    意向锁

    对于一个树形的系统,如果要检查一个节点有无锁,那么理论上应该遍历其所有上级节点,检查上级节点是否被锁,这是开销非常大的。

    于是我们引入了意向锁。如果对节点 A 加意向锁,表明 A 的下层节点正在被加锁。意向锁能够大大减少遍历树的过程的开销。

    在这里插入图片描述

    锁的强度

    意向锁又分:

    1. 共享意向锁(IS)
    2. 排它意向锁(IX)
    3. 共享排它意向锁(SIX)
      在这里插入图片描述

    于是根据我们的定义,有如下的强度排名:

    X > SIX > S = IX > IS
    在这里插入图片描述

    展开全文
  • 任务的串行并行执行

    2021-06-20 15:56:02
    //串行处理 public class SingleThreadWWebServer{ public static void main(String[] args){ ServerSocket socket = new ServerSocket(80); while(true){ Socket connection = socket.accept(); handleRequest...
    //串行处理
    public class SingleThreadWWebServer{
      public static void main(String[] args){
        ServerSocket socket = new ServerSocket(80);
        while(true){
          Socket connection = socket.accept();
          handleRequest(connection);
        }
      }
    }
    

    理论上正确,实际性能却很糟糕,一次只能处理一个请求,新到来的连接必须等待直到请求处理完成

    //显式创建线程并行执行任务
    public class ThreadPerTaskWebServer{
      public static void main(String[] args){
        ServerSocket socket = new ServerSocket(80);
        while(true){
          final Socket connection = socket.accept();
          Runnable task = new Runnable(){
            public void run(){
              handleRequest(connection);
            }
          };
          new Thread(task).start();
        } 
      }
    }
    

    优势:
    1.任务处理过程从主线程分离,使得程序可以在前面的请求处理完成之前接受新的请求

    2.任务并行处理,从而同时服务多个请求,程序吞吐量得到提高

    3.任务处理代码必须是线程安全的

    不足:
    1.线程生命周期开销很高
    线程的创建和销毁需要时间,延迟处理请求,并且需要JVM和操作系统提供一些辅助操作,如果请求的到达率非常高但是处理过哼轻量级,那么为每个请求创建一个线程将消耗大量资源

    2.资源消耗
    活跃的线程会消耗系统资源,尤其是内存,如果可运行的线程数量多于可用处理器的数量,有些线程闲置,大量空闲的线程会消耗大量内存,给垃圾回收器带来压力,创建更多的线程反而会降低性能

    3.稳定性
    在一定范围内,过多创建线程只会降低执行速度,如果超出范围,整个应用程序将崩溃

    展开全文
  • 串行通信有单工通信、半双工通信和全双工通信3种方式。 单工通信:数据只能单方向地从一端向另一端传送。例如,目前的有线电视节目,只能单方向传送。 半双工通信:数据可以双向传送,但任一时刻只能向一个方向...

    数据通信的基本概念

    串行通信有单工通信、半双工通信和全双工通信3种方式。

    单工通信:数据只能单方向地从一端向另一端传送。例如,目前的有线电视节目,只能单方向传送。

    半双工通信:数据可以双向传送,但任一时刻只能向一个方向传送。也就是说,半双工通信可以分时双向传送数据。例如,目前的某些对讲机,任一时刻只能一方讲,另一方听。

    全双工通信:数据可同时向两个方向传送。全双工通信效率最高,适用于计算机之间的通信。

    此外,通信双方要正确地进行数据传输,需要解决何时开始传输,何时结束传输,以及数据传输速率等问题,即解决数据同步问题。

    实现数据同步,通常有两种方式,一种是异步通信,另一种是同步通信。

    异步通信

    在异步通信中,数据一帧一帧地传送。每一帧由一个字符代码组成,一个字符代码由起始位、数据位、奇偶校验位和停止位4部分组成。每一帧的数据格式如图7-1所示。

    一个串行帧的开始是一个起始位“0”,然后是5〜8位数据(规定低位数据在前,高位数据在后),接着是奇偶校验位(此位可省略),最后是停止位“1”。

    1. 起始位
      起始位"0”占用一位,用来通知接收设备,开始接收字符。通信线在不传送字符时,一直保持为“1”。接收端不断检测线路状态,当测到一个“0”电平时,就知道发来一个新字符,马上进行接收。起始位还被用作同步接收端的时钟,以保证以后的接收能正确进行。
    2. 数据位
      数据位是要传送的数据,可以是5位、6位或更多。当数据位是5位时,数据位为D0〜D4;当数据位是6位时,数据位为D0〜D5;当数据位是8位时,数据位为D0〜D7。
    3. 奇偶校验位
      奇偶校验位只占一位,其数据位为D8。当传送数据不进行奇偶校验时,可以省略此位。此位也可用于确定该帧字符所代表的信息类型,“1"表明传送的是地址帧,“0”表明传送的是数据帧。
    4. 停止位
      停止位用来表示字符的结束,停止位可以是1位、1.5位或2位。停止位必须是高电平。接收端接收到停止位后,就知道此字符传送完毕。

    图7-1 (a)表示一个字符紧接一个字符的传送情况,图7-1 (b)表示两个字符之间有空闲位的情况,空闲位为“1”,线路处于等待状态。空闲位是异步通信的特征之一。

    同步通信

    在同步通信中,发送端首先发送同步字符,紧接着连续传送数据(即数据块),并由时钟来实现发送端与接收端的同步。同步传送时,字符与字符之间没有间隙,仅在数据块开始时用同步字符(SYNC)来指示,其数据格式如图7-2所示。

    同步通信传送速度较快,但硬件结构比较复杂;异步通信的特点是硬件结构较简单,但传送速度较慢。

    MCS-51单片机釆用异步通信方式。

    波特率

    波特率是数据传送的速率,指每秒传送二进制数据的位数,单位是位/秒(bps)。假设数据传送速率是240字符/秒,而每个字符包含10个数据位

    则传送的波特率为10x240=2400bps

    每一位代码的传送时间几为波特率的倒数:

    T=1/2400=0.4165ms

    异步通信的波特率一般在50〜64000bps之间。

    串行口的结构

    MCS-51有一个可编程的全双工串行通信接口,可作为通用异步接收/发送器UART,也可作为同步移位寄存器。

    它的帧格式有8位、10位和11位,可以设置为固定波特率和可变波特率,给使用者带来很大的灵活性。

    80C51串行口的内部简化结构如图7-3所示。

    图中有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H,可同时发送、接收数据。发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。

    串行发送与接收的速率与移位时钟同步,定时器T1作为串行通信的波特率发生器,T1溢出率经2分频(或不分频)又经16分频作为串行发送或接收的移位时钟。移位时钟的速率即波特率。

    MCS-51单片机串行接口内部有一个发送数据缓冲器和一个接收数据缓冲器,简称串行数据缓冲器,共用一个地址99H;

    一个串行口控制寄存器SCON,用来选择串行口工作方式、控制数据接收和发送,并标示串行口的工作状态等。

    当串行口接收数据时,外界的串行信号通过单片机的引脚RXD (P3.0串行数据接收端),进入串行口的接收数据缓冲器。

    当串行口发送数据时,CPU将数据写入发送数据缓冲器,由发送数据缓冲器将数据通过引脚TXD (P3.1串行数据发送端),发送至外部的通信设备。

    特殊功能寄存器PCON控制串行口的波特率。PCON中有一位是波特率倍增位。

    串行口控制寄存器SCON

    串行口控制寄存器SCON决定串行口通信工作方式,控制数据的接收和发送,并标示串行口的工作状态等,其位格式为:

    SMO、SM1:串行口工作方式控制位,对应4种工作方式,如表7-1所示(fosc是晶振频率)。

    SM2:多机通信控制位,主要用于工作方式2和工作方式3。

    若SM2=1,则允许多机通信。

    多机通信规定:第9位数据位为1 (即TB8=1),说明本帧数据为地址帧:第9位数据为0(即TB8=0),则本帧数据为数据帧。

    当从机接收到的第9位数据(在RB8中)为1时,数据才装入接收缓冲器SBUF,并置RI=1向CPU申请中断;如果接收到的第9位数据(在RB8中)为0,则不置位中断标志RL信息丢失。

    当SM2=0时,则不管接收到第9位数据是否为1,都产生中断标志RI,并将接收到的数据装入SBUF。应用这一特点可以实现多机通信。

    串行口工作在方式0时,SM2必须设置为0;工作在方式1时,如SM2=1,则只有接收到有效的停止位时才会激活RI。

    REN:允许接收控制位。当REN=1时,允许接收;当REN=0时,禁止接收。此位由软件置1或清零。

    TB8:在方式2和方式3中,此位为发送数据的第9位,在多机通信中作为发送地址帧或数据帧的标志。TB8=1,说明该发送帧为地址帧;TB8=0,说明该发送帧为数据帧。在许多通信协议中,它可作为奇偶校验位。此位由软件置1或清零。在方式0和方式1中,此位未使用。

    RB8:接收数据的第9位。在方式2和方式3中,接收到的第9位数据放在RB8中。它或是约定的奇/偶校验位,或是约定的地址/数据标志位。在方式2和方式3多机通信中,若SM2=1且RB8=1,说明接收到的数据为地址帧。

    TI:发送中断标志位。在一帧数据发送完时置位。TI=1,申请中断,说明发送缓冲器SBUF已空,CPU可以发送下一帧数据。中断被响应后,TI不能自动清零,必须由软件清零。 ,

    RI:接收中断标志位。在接收到一帧有效数据后,由硬件置位。RI=1.申请中断,表示一帧数据接收结束,并已装入接收缓冲器SBUF中,CPU响应中断,取走数据。RI不能自动清零,必须由软件清零。

    串行口发送中断标志TI和接收中断标志RI共为一个中断源。因此,CPU接收到中断请求后,不知道是发送中断TI还是接收中断RI,必须用软件来判别。单片机复位后,控制寄存器SCON的各位均清零。

    特殊功能寄存器PCON

    电源控制寄存器PCON中只有一位SMOD与串行口工作有关,它的位格式为:

    SMOD:波特率倍增位。串行口工作在方式1、方式2、方式3时,若SMOD=1,则波特率提高一倍;
    若SMOD=0,则波特率不提高一倍。单片机复位时,SMOD=0。

    串行口的四种工作方式

    MCS-51单片机串行口可设置4种工作方式,由SCON中的SMO、SM1进行定义。

    方式0

    方式0时,串行口为同步移位寄存器的输入/输出方式。主要用于扩展并行输入或输出口。数据由RXD (P3.0)引脚输入或输出,同步移位脉冲由TXD (P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为focs/12。

    方式0输出

    方式0时输出时序如图7-4所示。

    对发送数据缓冲器SBUF写入一个数据,就启动了串行口的发送过程。内部的定时逻辑在SBUF写入数据之后,经过一个完整的机器周期,输出移位寄存器中输出位的内容送RXD引脚输出。移位脉冲由TXD引脚输出,它使RXD引脚输出的数据移入外部移位寄存器。当数据的最高位D7移至输出移位寄存器的输出位时,再移位一次后就完成了一字节的输出,中断标志TI置1。如要再发送下一字节数据,必须用软件先将TI清零。

    方式0输入

    方式0时输入时序如图7-5所示。

    当SCON中的接收允许位REN=1,用指令使SCON中的RI为0时,就会启动串行口接收过程。TXD引脚为串行输入引脚,移位脉冲由TXD引脚输出。当接收完一帧数据后,由硬件将输入移位寄存器中的内容写入SBUF,中断标志RI置1。如要再接收数据,必须用软件将RI清零。

    方式0输出时,串行口可以外接串行输入并行输出的移位寄存器,如74LS164、CD4094等,其接口逻辑如图7-6所示。TXD引脚输出的移位脉冲将RXD引脚输出的数据(低位在先)逐位移入74LS164或CD4094。

    方式0输入时,串行口外接并行输入串行输出的移位寄存器,如74LS165,其接口逻辑如图7-7所示。

    方式1

    串行口定义为方式1时,是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图7-8所示。其中1位起始位、8位数据位、1位停止位。

    方式1输出

    当执行一条写SBUF的指令时,就启动了串行口发送过程。在发送移位时钟(由波特率确定)的同步下,从TXD引脚先送出起始位,然后是8位数据位,最后是停止位。一帧10位数据发送完后,中断标志TI置1。方式1的发送时序如图7-9所示。方式1的波特率由定时器1的溢出率决定。

    方式1输入

    方式1的接收时序如图7-10所示。

    当用软件置REN为1时,接收器以所选择波特率的16倍速率釆样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。

    在接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0 (或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。

    方式2和方式3

    串行口工作于方式2或方式3时,为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图7-11所示。

    由图可见,串行口工作于方式2和方式3时起始位1位,数据位9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8)、停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定

    方式2和方式3输出

    CPU向SBUF写入数据时,就启动了串行口的发送过程。SCON中的TB8写入输出移位寄存器的第9位,8位数据装入SBUF。方式2和方式3的发送时序如图7-12所示。

    发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位(D0)到TXD引脚。每一个移位脉冲都使输出移位寄存器的各位右移一位,并由TXD引脚输出。

    第一次移位时,停止位“1”移入输出移位寄存器的第9位上,以后每次移位,左边都移入0。当停止位移至输出位时,左边其余位全为0,检测电路检测到这一条件时,使控制电路进行最后一次移位,并置TI=1,向CPU请求中断。

    方式2和方式3输入

    软件使接收允许位REN为1后,接收器就以所选频率的16倍速率开始取样RXD引脚的电平状态,当检测到RXD引脚发生负跳变时,说明起始位有效,将其移入输入移位寄存器,开始接收这一帧数据。方式2和方式3的接收时序如图7-13所示。

    接收时,数据从右边移入输入移位寄存器,在起始位。移到最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0 (或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8 (接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI,继续搜索RXD引脚的负跳变。

    多机通信的工作原理

    MCS-51单片机具有多机通信功能。

    串行口工作在方式2、方式3均可实现多机通信。串行控制寄存器SCON中的SM2和TB8、RB8相配合可以完成主从式多机通信。

    多机通信规定:第9位数据位为1 (即TB8=1),说明本帧数据为地址帧;第9位数据为0 (即TB8=0)时,则本帧数据为数据帧。

    若SM2=1,则仅当从机接收到的第9位数据为1时,数据才装入接收缓冲器SBUF,并置RI=1,向CPU申请中断;如果接收到的第9位数据为0,则不置位中断标志RI,该帧信息丢弃。

    主从式多机通信中,一台是主机,其余为从机,从机要服从主机的调度和支配。

    在多机通信时,一台为主机,其他为从机,所有从机的SM2都必须置1。主机首先发送一帧地址数据中断所有从机。从机接收到地址后,判断主机发送地址是否为本机地址,若是本机地址,则将SM2清零,进入正式通信状态,把本机的地址发送回主机作为应答信号,然后开始接收主机发来的数据或命令信息。其他从机由于地址不符,其SM2=1保持不变,不与主机通信,从中断返回。

    主从式多机通信遵循的通信协议为:

    • 使所有从机的SM2=1,处于只接收地址帧的状态。
    • 主机向从机发送一帧地址信息,其中包括8位地址,且第9位为1,表示发送的是地址,中断所有从机。
    • 从机接收。
    • 主机接收从机发回的应答地址信号后,与其发送的地址信息进行比较,如果相符,则使TB8=0,正式发送数据;如果不符,则发送错误信息。
    • 通信的各机之间必须以相同的帧格式及波特率进行通信。

    波特率的及算方法

    在串行通信中,收发双方对发送或接收的数据的波特率要有一个约定。

    MCS-51单片机串行口有4种工作方式:方式0和方式2的波特率固定不变;方式1和方式3的波特率可以变化,由定时器T1的溢出速率决定。

    下面介绍串行口 4种工作方式对应的波特率。

    方式0的波特率

    釆用工作方式0时,移位脉冲由机器周期的第6个状态周期S6给出,每个机器周期产生一个移位脉冲,发送或接收一位数据。因此,波特率是固定的,为振荡频率的1/12,不受PCON寄存器中SMOD的影响。用公式表示为

    工作方式0的波特率 = fosc/12

    方式2的波特率

    釆用工作方式2时,移位脉冲由振荡频率fosc的第二节拍P2时钟(即fosc/2)给出,所以,方式2波特率取决于PCON中的SMOD位的值,当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为人fosc/32。用公式表示为

    工作方式2的波特率=(2^SMOD/64) * fosc

    方式1和方式3的波特率

    方式1和方式3的移位脉冲由定时器T1的溢出速率决定。因此,方式1和方式3的波特率由定时器T1的溢出速率与SMOD值同时决定。用公式表示为

    方式1、方式3的波特率=(2*SMOD/32) x T1的溢出速率

    其中,T1的溢出速率取决于T1的计数速率(在定时方式时,计数速率 = fosc/12)和T1的预置初值。

    定时器T1作为波特率发生器时,通常选用定时器T1工作在方式2,并使其工作在定时方式(即C/T=0)。

    此时,T1的计数速率为fosc/12 (这时应禁止T1中断)。设定时器初值为X,则每过“256-X”个机器周期,定时器T1产生一次溢出。用公式表示为

    T1 的溢出速率=(fosc/12) / (256-X)

    当给出波特率后,可用下式计算出定时器T1工作在方式2的初始值为

    X=256-(fosc * (SMOD+1) / (384*波特率)

    当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出速率取决于TH1中的计数值。

    在单片机应用中,常用的晶振频率为12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率与各参数的关系如表7-2所示。

    在使用串行口之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下。

    1. 确定T1的工作方式(编程TMOD寄存器);
    2. 计算T1的初值,装载TH1、TL1;
    3. 启动T1 (编程TCON中的TR1位);
    4. 确定串行口控制(编程SCON寄存器);
    5. 串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。

    image-20200602010518784

    展开全文
  • 串行总线技术(一)-串行总线结构(以PCIe为例)串行总线的出现在早期的计算机系统中,多数外围设备使用并行总线结构。这些总线包括PCI和PATA(并行ATA)。当通信速率较低时,并行总线结...

    3bb40fa785e836bab1494a6103cfce2b.png

    串行总线技术(一)-串行总线结构(以PCIe为例)

    串行总线的出现

    在早期的计算机系统中,多数外围设备使用并行总线结构。这些总线包括PCI和PATA(并行ATA)。当通信速率较低时,并行总线结构可以设计得非常简单和有效,可以连接大量外围设备。通过使用中央仲裁机制,可以方便地实现总线设备间的通信:然而,当速率和带宽不断增加时,并行结构的潜力不断被发掘并不再能够满足系统设计要求。

    并行总线结构的带宽可以通过增加总线宽度或者提高总线的工作频率来实现,但这种增加带宽的方式会逐渐变得困难。并行总线会占用很多引脚,而对现代数字芯片来说,单一芯片中集成了大量的功能,引脚本身就是一种非常紧张的资源,这为继续增加总线宽度带来了困难。

    另外,总线频率已经进行了多次增加(如PCI-->PCIX),继续对大量信号线提高工作频率也变得更加困难。除此之外,并行结构还有一些固有不足,如没有包的概念,没有错误检验机制等。在并行总线中,传输的是数据突发片段,不是完整的数据包,也没有与所传输数裾 相关的CRC校验结果以进行差错控制。并行总线的不足促进串行总线结构的发展,这不仅克服了原有的缺陷,还带来了其他好处。如图所示为并行总线与串行总线示例。

    447b79565efe60fd75ab5f99374ac1e2.png 538966c2d406f5b4c3040a8ae4c835df.png

    现在的数字系统中有很多种串行总线。PCI Express(代替了并行PCI总线)、SATA(代替PATA)以及USB等就是一些常用的高速总线。这些总线的速率也从MHz达到了GHz。

    串行总线的优缺点

    优点

    • 占用引脚数量少

    串行总线使用一对信号线发送数据(TX+ TX-),使用一对信号线接收数据(RX+ RX-)。而PCI和PCIX等并行总线会占用大量引脚。

    • 差分信号

    TX和RX信号线上采用的是差分信号传输方式,这种传输方式具有很高的抗噪声能力。

    • 强错误检测能力

    串行协议使用基干包的数据传输方式,对数据包采用了CRC校验。相比于PCI中采用的奇偶校验,CRC校验具有很强的检错能力。

    • 纠错与恢复

    因为采用基于包的传输方式并且带有CRC校验,接收设备能够检测出接收数据包中的错误并通知发送端出现了传输错误,发送端可以重新发送出现错误的数据包。

    • 全双工数据和控制流

    数据包可以在TX信号线上传输,同时可以在RX信号线上接收控制信息。SATA使用类似HOLD的流控原语来实时阻止数据发送以避免数据溢出。

    • 分割式数据传输

    在分割式数据传输中,request和completion可以不出现在同一个数据传输操作中。这不是串行总线所特有的必要特征。所有的串行总线都使用包和分割式数据传输协议进行数据传输。多数早期的并行总线(PCI、AHB)不支持分割式数据传输。最新的并行总线,如AXI 开始支持这一协议。

    缺点

    串行总线也存在一些不利之处。

    • 只支持点到点连接

    通过串行总线只能连接两个设备,而对于并行总线,可以在单一总线上连接多个设备,并目.很容易增减总线上的设备。对于串行总线,我们需要使用交换机和多个总线设备连接。

    • 更大的延迟

    由于串行及分层结构特点,串行结构的总线延迟更大一些。

    串行总线结构

    串行总线结构只允许点到点连接,一条串行总线只能连接两个设备,而并行总线可以同吋连接多个设备。在串行总线结构中,总线设备中需要包括两个基本电路部件:MAC控制器(通常简称为控制器)和PHY(主要实现模拟收发功能)。MAC具有分层结构,通常包括三个 层次。PHY包括两个部分:PCS和PMA。PCS(Physical Coding Sublayer,物理编码子层)主要实现编解码等数字逻辑功能。PMA主要实现时钟恢复、均衡和信号电平检测等模拟功能。

    下面我们将以PCIe和SATA为例,对串行总线结构加以分析,如图所示。

    2c62c0ff59219bbf1c1f9f34e0f37b58.png

    MAC控制器包括三个层次:PHY逻辑层 、 数据链路层和事务层。每一层都有自己特定的功能。

    PHY逻辑层

    两个相互联接设备的PHY逻辑层之间使用PHY层包进行通信,称为有序训练集合,如图所示。PHY层包被用于建立链路和确定交互的操作速度,在训练阶段结束时,双方进入连接阶段,此时它们已经做好了传输数据链路层和事务层包的准备。PHY层包产生于PHY层,终结于另一侧的PHY逻辑层,不会上交给其他层次。

    c57f1de5cd76df56330b490ed5b0ffc6.png

    数据链路层

    数据链路层使用短的、固定长度(2个dword/8字节)的包在两个设备间交互链路信息,如图所示。这些包也被称为DLLP(Data Link Layer Packet,数据链路层包)。DLLP被用于交换信用信息、ACK、NAK和功率管理协议。DLLP在本层产生,终止于对端的同一层, 不会进一步向上提交。

    28e72432b2e5353c9821d6f296acd7ff.png

    事务层

    本层在两个设备间进行实际的数据交互,如下图所示。这些包被称为TLP(Transaction Layer Packet,事务层包),TLP为变长包。TLP包括头域、数据净荷和CRC校验。一个TLP由start-of-packet符号开始,以END符号结束。

    0d05b15fd1039fc03ccd92a570a89a89.png

    串行总线时钟

    在PCIe中,平台提供100MHz参考时钟,通过PCIe插槽提供给总线设备。PCIe端点设备从PCIe连接器处获取该参考时钟并将其交给PHY PMA层。PMA内部有一个PLL,它根据输入的100MHz时钟和输入的RX数据流生成250MHz的时钟PCLK。PHY将PCLK提供给MAC发送数据(从MAC到PHY)和接收数据(从PHY到MAC)都同步于PCLK。对于PCIe,MAC的接收和发送电路工作在同一个时钟域。对于其他串行总线结构,如SATA收发电路时钟可能不同。在SATA中,发送和接收时钟是不同的,属于异步时钟。

    发送路径的微结构

    MAC和PHY PCS之间的接口是标准的,虽然这不一定必要,但标准化有利于IP核的开发,可提高不同芯片厂商IP核之间的互操作性。对于PCIe来说,该接口被称为PIPE接口。

    MAC提供的发送数据的位宽为8比特或16比特。PCLK的频率与数据总线的位宽有直接关系,数据位宽为8比特时,PCLK为250MHz数据位宽为16比特时,PCLK为125MHz,如图所示。

    00ca7a2918b58ad29b3e0755584b5048.png

    这两个频率是PCIe Genl所使用的,在Gen2中,二者都进行了翻倍。位宽变换电路模块可以将16比特的数据位宽转换成8比特的位宽,接着将其送入8b/10b编码器。编码器将每个8比特的数据转换成为10比特的编码值并将其传递到PHY的PMA层。PMA层使用一个高速时钟(Genl时为2.5GHz,Gen2时为5GHz)进一步将10比特的编码结果转换为单比特串行数据并通过TX信号线发出。

    接收路径的微结构

    PMA接收电路实现比特提取和串并变换功能,将单比特的串行接收数据变换成为10比特的并行数据,如图所示。

    88466fc5bea9f359e763c6ba2d7f96c8.png

    10比特的数据流从PMA接收电路进入PCS接收电路。此时的10比特数据流并非是字符对准的。在PCS内部,10比特数据流先后进入字符对准电路、弹性缓冲区、10b/8b解码电路并最终进入可选的8b/16b转换电路。

    字符对准

    PCIe接收的数据是以10比特的字符为组成单位的。PMA接收电路将接收数据组成10比特字符时没有按照字符边界进行。字符对准逻辑电路查找COMMA字符并以它为基础进行字符边界对准。对准后的字符流被送入弹性缓冲区,如图所示。

    19976dbf9a65f8790824289f7f5fd492.png

    弹性缓冲区

    PCIe链路两端所使用时钟的标称值均为250MHz。它们可以使用平台提供的同一个时钟,或者选择它们自带的时钟源来生成250MHz的工作时钟。当使用相互独立的时钟时,它们之间会有微小的偏差(偏差可能非常微小,但不会为0),此时,经过一段时间之后,会造成数据的上溢或下溢。总线一端的时钟频率可能比另一端略微高一些,频率低的一端会出现数据缓冲区上溢,频率高的一端会出现数据缓冲区下溢。串行总线中使用弹性缓冲区来处理时钟频率上的微小差别。我们将对PCIe和SATA中的弹性缓冲区加以介绍。

    位宽为10比特的接收符号流被写入一个FIFO。按照PCIe协议,在发送数据时,会按照一定的间隔定期发送填充包(称为SKIP集合)。这些填充包可以在不影响数据净荷、编码/解码、扰码/解扰码的情况下快速插入和去除。写入逻辑持续将10比特的字符写入FIFO,读岀逻辑持续将FIFO中的字符读出。如果写入速度比读出速度快,FIFO中的数据深度将逐渐增加。

    当FIFO中的数据深度达到了预先设定的上限时,写入逻辑会丢弃1个或多个SKIP字符。类似地,当写入速度低于读出速度时,FIFO中的数据深度会逐渐降低,当深度降至预先设定的下限时,读出逻辑不再从FIFO中读出数据,它会暂停读出数据,同时向数据通路中插入一个SKIP符号。这里的FIFO就是弹性缓冲区,其内部数据深度是变化的,可以用于调整读写时钟频率的微小偏差,如图所示。

    4a1e61ba9fb2709ff8e331b7c8e7b38a.png

    需要说明的是,这种工作机制可以用于处理微小的读写频率偏差,不适合处理较大的频率偏差(较大的时钟偏差需要深度较大的弹性缓冲区并且会引入较大的延迟)。规范中对频率偏差会提出限制,例如,PCIe中的频率偏差应小于300PPM。当时钟偏差被限定在一定PPM之内时,SKIP出现的间隔就可以计算得到。

    SATA使用了类似的机制,它会在每256个双字之间插入两个ALIGH原语。ALIGN原语根据两边的频率差可以快速地被丢弃或插入。

    10b/8b解码和8b/16b转换

    弹性缓冲区的输出进入解码器电路,它会将10比特的字符转换成为8比特的数据。如果PCS-MAC接口数据通道宽度为16比特,那么需要将两个连续的8比特数据拼接起来构成16比特的数据并送给接收MAC如果数据通路宽度为8比特,那么不需要做任何处理,直接送给接收MAC。

    后面会继续讲讲《串行总线更多结构》,敬请期待。

    032f0b24a3963054f4579f492b607e8c.gif

    NOW

    学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

    文件名主标题内容简单介绍是否有中文版
    UG4767 Series FPGAs GTX/GTH  TransceiversGTX和GTH介绍,PCIe、serdes等学习必备
    UG4717 Series FPGAs SelectIO Resources描述 7 系列 FPGA 中可用的 SelectIO资源。
    UG1114PetaLinux Tools DocumentatonPetaLinux 工具文档 参考指南是,V2019.2
    UG949UltraFAST 设计方法指南(适用于 Vivado  Design Suite)赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标是,V2018.1
    IP手册pg057FIFO GeneratorFIFO生成器IP使用手册
    pg104Complex Multiplier复数乘法器IP使用手册
    pg122RAM-Based Shift Register 移位寄存器IP使用手册

    45ca22f429c9dfff436af538e7189353.png

    推荐阅读

    【Vivado那些事】如何查找官网例程及如何使用官网例程

    【Vivado使用误区与进阶】总结篇

    【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

    SystemVerilog数字系统设计_夏宇闻 PDF

    图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

    简谈:如何学习FPGA

    Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

    AD936x+ZYNQ搭建收音机(一)

    AD936x+ZYNQ搭建OpenWIFI

    无招胜有招-Vivado非工程模式下的详细设计

    面试中经常会遇到的FPGA基本概念,你会几个?

    推荐一些可以获取免费的国外的原版书籍(电子版)网站

    FPGA 的重构

    国产CPU概括

    从电子游戏历史看IC发展的助推剂

    80年代电子游戏及电脑游戏的发展历史

    PCIe总线的基础知识

    万字长文带你回顾电子游戏的七十多年历史(完整版)

    FPGA中异步复位,同步释放的理解

    OpenFPGA系列文章总结

    用Verilog设计一个16 位 RISC 处理器

    介绍一些新手入门FPGA的优秀网站(新增)

    Verilog数字系统基础设计-CR

    Verilog数字系统基础设计-奇偶校验

    建立和保持时间及时序简单理解

    (Xilinx)FPGA中LVDS差分高速传输的实现

    Xilinx Multiboot实例演示

    高速串行通信常用的编码方式-8b/10b编码/解码
    Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路

    图书推荐|一本图像/视频处理的强大工具书

    Verilog HDL-同步技术

    再说System Verilog 与 Verilog 的关系

    数模混合信号建模语言Verilog-AMS

    Intel/Altera 系列FPGA简介

    一块带给无数人年少欢乐的CPU,别说你没用过它

    Verilog在编写第一行代码之前

    【例说】Verilog HDL 编译器指令,你见过几个?

    穿越时空的爱恋-Z80 CPU的前世今生

    【Vivado】那些事儿-汇总篇

    古老CPU启示录-晶体管之路

    【Vivado那些事儿】约束的顺序

    童年修复系列-SNES芯片组介绍及FPGA实现

    优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V

    展开全文
  • Java中对象的串行化(Serialization)和transient关键字一、串行化的概念和目的1.什么是串行化对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把...
  • 串口通信基本概念(一)——串行与并行通信,同步与异步通信 一、串口通信简介 串口通信,顾名思义也就是利用串行接口进行通信。串行接口指串口按位(bit)发送和接收字节。尽管比按字节(byte)传输的并行通信慢,...
  • 他们的关系和各自的优缺点是什么?答案:3种基本模式分别为单线程、单元线程和自由线程1.单线程:简单的应用程序很可能是单线应用程序,仅包含与应用程序进程对应的线程。进程可以被定义为应用程序的实例,拥有该...
  • 数据流是一个编码信息的二进制流,它与主机的操作系统、CPU或字节顺序100%的没有关系。QTextStream和QDataStream都是面向数据流的,QTextStream可以完成的功能QDataStream都能完成,但是他们的侧重点不同。...
  • RxHttp实现并行和串行、多串行(一) #前言 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们...
  • 串行口通信(一)

    2021-01-06 13:59:07
    串行口通信就被发明出来,下面来了解串行口通信(uart)。 几个概念 为了能更好理解串行口通信,在介绍它之前,先来看看几个概念,补充知识,方便深入明白uart工作原理。 通信方式 通信方式 通信方式有两种,...
  • 1.什么是串行化对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性...
  • 51单片机(七)串行口通信

    千次阅读 2021-03-20 19:12:57
    一、并行与串行通信 1、并行通信 将数据每一字节的各位用多条数据线同时进行传送。每个字节8位,由8条数据线同时传送一位,同一时间总共传送1个字节。除了8条数据线外,还有一天信号线和若干控制线。 由于发送设备和...
  • 串行总线技术(二)-串行总线中的先进设计理念及SerDes/PMA介绍字节分割/链路聚合下面以PCIe为例对字节分割加以讨论,如图所示。PCIe使用链路和线路来发送串行数据。链路是一个逻辑...
  • (在这里主要是为了保证数据的一致性,不展开细说) 串行和并行 首先,串行和并行跟异步和同步个人任务半毛钱关系没有。异步和同步所需时间一样,而并行比串行快很多。 就好比是水龙头,你一条同样大的水管出水,能...
  • } console.log(resArr) } catch (e) { } } getResolve() 4秒后打印值 如果说只是需要求值 并没有互相依赖的关系 可以写成这样 let arr = [2, 3, 4, 5, 6, 7, 8, 9] // 此处可以循环调用 let resArr = [];...
  • 常常看到的并发和并行其实非完全的互斥和相关的关系,只是不同角度的概念 场景一 并发: 一个阿姨给两个窗口的人打饭,依次窗口A、窗口B ,未考虑优先级抢占问题说法(一个九尺霸道的人强制要求阿姨先给他打饭) ...
  • 附表是计算机串口的系统地址和8250内部寄存器的对应关系。DLAB(除数寄存器访问控制位)是通信线控制寄存器的D7位,当该位为1时,对地址3F8H(2F8H)、3F9H(2F9H)的读写是针对除数寄存器的,在此用途之外应使该...
  • 串行数据的时钟同步 一、串行数据的时钟同步问题 串行数据的发送(如USB,UART,I2C, SPI等)是通过一条数据总线发送,于是就有如果通过一条数据总线连续发送连续的01信号给接收设备,由于发送者和接受者的时钟频率...
  • 汽车电子分体机基本采用LVDS串行-解串器原件,利用串行-解串器能够大大减少近距离、宽带数据通信中的连线,类似的应用有电信和网络设备的背板互连、3G蜂窝电话基站中机架内部的互连、数字视频接口等。电流模式、低...
  • 数据通信的基本方式根据数据的传输方式可以分为串行通信与并行通信两种。 串行通信又根据数据的同步方式,分为异步传送和同步...或者根据数据的传输方向与时间关系,分为单工通信、半双工通信及全双工通信三种方式。
  • 一、顺序和并发是指多个任务能否同时开始 1. 顺序(sequential) 顺序:上一个开始执行的任务完成后,当前任务才能开始执行...串行:有一个任务执行单元,从物理上就只能一个任务、一个任务地执行 2. 并行(pa...
  • 基于串行同步接口的数码管显示(MSP430G2553) 由于一位数码管的驱动需要8个并行IO口进行输出,若驱动多位数码管则对单片机管脚的需求量过大,所以采用了74HC164芯片将串行数据并行输出,满足驱动数码管的要求。 74HC...
  • [专业课笔记] 第七章 8951串行口正文基本知识数据通信并行通信串行通信串行口及其应用8951之间的点对点异步通信8951和pc的机间通信无线单片机及其点到多点通信RFID技术和物联网的应用 正文 基本知识 数据通信 本机的...
  • 文章目录可编程串行异步通信接口芯片**8250**串行数据发送过程串行数据接收过程内部结构发送保持寄存器(3F8H/2F8H)接收缓冲寄存器(3F8H/2F8H)通信线状态寄存器(3FDH/2FDH)通信线状态寄存器示例中断允许寄存器(3F9H/...
  • 串行通信
  • 很多生产线工序并不是简单的串行或并行关系,而实两种同时存在的混合并发关系,本文主要对此种生产线简介,然后以最小完工时间为目标,介绍此类生产线。 示意图 目标函数 其中,各符号代表的意义如下: O(i,j):...
  • 在波形中标注如下: 需要明确的逻辑是:当前的状态和当前的in没有关系,只和当前周期的上升沿时刻的in信号以及前一个状态有关。这里没有START状态,因为只要在BIT0状态前,接收器就是空转(IDLE)状态,不需要进行...
  •     异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或...
  • 串行协议之SATA

    2021-10-30 01:34:56
    书接上回-《串行总线技术(一)-串行总线结构(以PCIe为例)串行总线技术(二)-串行总线中的先进设计理念及SerDes/PMA介绍简介SATA(Serial Advanced Techn...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,845
精华内容 50,738
关键字:

串行关系