通信接口——时钟和信号

news2024/12/25 1:22:46

前言

所有接口只要抓住三个核心点就能分清:时钟同步和异步,时钟的来源,信号的传输方向。

一、时钟同步和异步

接口之间的交互方式存在多种形式,如果按照是否有公共时钟CLK的参与,可以分为同步传输和异步传输。

同步:两个或两个以上随时间变化的量在变化过程中保持着一定的相对关系。异步:双方不需要共同的时钟,接收方不知道发送方什么时候发送。以特定的信号来提示对方开始接收信息。

同步和异步都是针对时钟来说的,同步意味着信号需要参考时钟信号,而异步信号不需要参考CLK信号。

(1) 异步传输

异步传输是指将比特串划分为一个个小组发送,这些小组可以在任何时间发送。异步传输也叫做起止式通信。

    异步传输最大的特点就是在传输每帧数据时,每个字符代码前后的都有起始位和停止位标识字符的开始和结束。以常见的UART异步通信数据格式为例。

    在数据开始发送时,有严格起始信号,停止信号。在某些场合还会增加标志位,奇偶校验位。因此,异步通讯的特点:通信方式简单,效率低,速率低;常见的应用场合:UART CAN总线,误码率高及对数据速率要求低的线路。

(2) 同步传输

    同步传输是指每一个数据位都是用相同的时间间隔发送,而接收时也必须以发送时的相同时间间隔接收每一位信息。

    不论是否传输数据,接收单元与发送单元都必须在每一个二进制位上保持同步。发送方和接收方的时钟是相同的,一般在同步字符后,传送大量数据。

    同步信号在发送和接收数据时,需要严格参考时钟信号。因此,在同步信号传输中,如果时钟信号存在错乱,传输的数据也将受到干扰。但是这种传输方式因为省去了固定的字节消耗,效率高,速度快,速度取决于时钟频率。在工程中应用较多的是I2C,SPI都属于同步传输的方式。

(3) 同步和异步的差异

差异点异步传输同步传输
公共时钟不需要需要
传输方式字符比特
传输单位字符
传输速度
传输效率
时序要求
应用场合低速接口高速接口
典型接口UART/RS232I2C/SPI

二、信号传输方向

    前面根据数据传输是否需要时钟将接口的传输分为同步和异步。如果按照在传输的时候,是单方向的传输还是双向的传输,又可以分为单工,全双工,半双工。

(1)单工

    单工通信说明接口之间的信息只能单向的传递,比如,电视,广播,功放。在UART通信中,单独针对RXD来说,信号只能通过RXD信号从发送设备向接收设备发送数据。接收设备不能通过RXD管脚做其他功能使用。

(2)半双工

    半双工说明接口之间的信息通道支持双向的传输,但是在某一个固定的时刻,信号只能从一方传递到另一方,不能同时传递信号。比如对讲机,智能音响。在单板中经常使用的RS485两线式的接口就是半双工的通信方式。

 

(3)全双工

    全双工说明信息能在某个时刻双向传输,不需要像半双工那样存在切换,全双工的通道一直支持信息双向的传递。比如有线电话,手机,都是双向通讯。在单板上,使用较广泛的UART(RXD/TXD),SPI(SDI/SDO)都是全双工接口。

三、时钟的来源

 有三种用于两个IC间通信的时序模型——系统同步、源同步和自同步(SerDes)。

【理论篇】IC间通信的时序模型——系统同步、源同步和自同步-CSDN博客

 在SerDes流行之前,芯片之间的互联通过系统同步源同步并行接口传输数据。

图、演示了系统和源同步并行接口。 

1、系统同步并行接口

   

     通过芯片的IO传输数据的最简单方法是将数据接口从一个芯片直接连接到下一个芯片(见图1)。由于数据通常由一个以上的信息组成,因此数据接口的宽度超过了一个比特。

    在图中,1号芯片内的n位数据接口通过芯片输出,穿过n位互连,通过2号芯片的输入,连接到接收芯片内的n位数据通路。由于两个芯片的时钟都是由同一个时钟源发出的,所以两个芯片之间的数据传输是同步的。

图片

图1. 芯片间并行数据总线

    图1所示的并行数据总线有两个固有的问题:

    第一个问题是,每个芯片上需要n个输入/输出(I/O)引脚来传输数据

    在历史上的某个时刻,这是可以接受的(巨大的IO开销)。然而,与几十年前相比,摩尔定律推动了芯片上可制造的电路数量的大幅增加。芯片封装技术的引脚密度并没有以与硅电路密度相同的速度增长。因此,I/O引脚的价格大大高于硅电路,将n个I/O引脚专用于上述数据总线对于大多数芯片应用来说是不可接受的。

    第二个问题是,涉及到满足时序要求。

    数据由1号芯片同步启动,并使用相同的时钟在2号芯片中同步捕获。芯片2号输入端的数据必须满足相对于芯片的时钟输入的建立和保持时间。这些建立和保持时间的计算必须有足够的余量,以考虑到两个芯片的时钟分配路径延迟以及通过芯片到启动和捕获触发器的延迟差异。    延迟可能根据芯片的工艺、电压和温度(PVT)条件而变化,必须增加余量以考虑最坏情况的变化。对于更高的时钟频率,可能需要在芯片中使用锁相环(PLL)来调整时钟相位,以补偿芯片内的时钟分布延迟,并适应不断变化的工艺、电压和温度条件。如果时钟频率足够高,几乎不可能建立一个能在这个数据总线上可靠地传输数据的系统。

2、源同步并行接口

 

   源同步是指两个通讯的IC,发送端在发送数据的时候,会伴随着时钟一起发送,接收端依据此时钟进行数据的接收。

    这种架构包括任何用输入时钟来捕获数据的接口。这可能是发射和接收芯片都使用的参考时钟,或者是发射芯片驱动一个时钟给接收芯片。在这两种情况下,源同步接口都不需要时钟恢复电路。

 

2.1. 减少I/O引脚数量

    要解决的第一个问题是减少芯片之间传输数据所需的I/O引脚的数量。这是通过将芯片#1输出的n位数据复用到k位互连接口上(k<n),然后将芯片#2输入的k位互连接口解复用到n位内部数据通路上来实现的。这在图2中显示。由此产生的系统在每个芯片上只需要k个I/O引脚,而不是以前需要的n个引脚。

图片

图2. 串行化数据以减少引脚数量

    当然,虽然引脚数的要求按k:n的比例减少,但所需的参考时钟频率却按这个比例的倒数增加。由于噪声、电磁干扰(EMI)和功耗的考虑,系统设计者通常不喜欢在系统内分布高速参考时钟。通常,一个较低频率的时钟被使用,芯片中的PLL被用来将这个参考时钟乘以一个可用的频率。由此产生的时钟的相位变化,加上较高的数据传输频率,往往会加剧并行数据总线方法的时序问题。

2.2 时钟转发

    在图3中,在两个芯片之间的数据路径中加入了一个高速时钟。但假设时钟源提供一个比芯片内部数据触发器需要的时钟频率低一些的时钟频率。每个芯片都使用PLL来产生这个频率的倍数时钟。产生的时钟用于启动和捕获各自芯片中的数据。芯片#1中的PLL的输出时钟,用于启动该芯片的数据,也是该芯片的一个输出。这个时钟被2号芯片用来捕获数据。这种方法被称为时钟转发。

    这种方法的优点是,用于在芯片#1启动(传输)数据的高速时钟可供芯片#2作为捕获数据的参考。在时序分析中不需要考虑驱动两个芯片的时钟网络的延迟变化。只有时钟路径和数据位之间的延迟变化是相关的。这些路径之间由于工艺、电压和温度引起的变化在一定程度上是相互跟踪的。其结果是,接口的定时分析需要较少的余量,因此设置和保持时间更容易满足。

    到目前为止,我们还没有就高速时钟的频率相对于接口的比特率做出任何区分或建议。一般来说,图中所示的高速时钟可以是单数据速率(SDR)或双数据速率(DDR)(图4)。接收芯片在SDR时钟的每个上升沿(或每个下降沿)捕获数据;而有些接收芯片在DDR时钟的每个边缘(包括上升沿和下降沿)捕获数据。

图片

图3. 与数据一起转发的高速时钟

图片

图4. 单倍数据速率和双倍数据速率时钟

    与SDR时钟相比,DDR时钟的优势在于对相应的I/O驱动器(输出)和接收器的带宽要求。一个以每秒bMbits的比特率使用的I/O单元需要足够的带宽来传输101010...数据模式。这相当于一个频谱,其基本频率上限为b/2MHz。一个SDR时钟的相应频率是bMHz,是数据频谱限制的两倍。然而,同一接口的DDR时钟的频率只有b/2MHz,与数据的频谱一致。因此,同一个I/O驱动器和接收器可以用来驱动和接收数据以及DDR时钟。

    无论高速时钟是SDR时钟还是DDR时钟,接收芯片都使用这个时钟来直接捕获数据。该芯片还使用参考时钟来生成相同频率的内部系统时钟。这些时钟是同步的。虽然频率是相同的(鉴于它们共享一个共同的频率参考),但时钟之间的相位关系是未知的,并且可能由于PVT变化而变化。因此,接收芯片通常将收到的数据从接口时钟域重新过渡到内部芯片时钟域。FIFO被用来执行这种跨时钟域功能。最好是尽量减少由接口时钟触发的触发器的数量,以尽量减少时钟分配网络的延迟;否则时序问题会加剧。

2.3. 差分信号

    非差分信号的上升和下降时间不等,导致闭眼。在芯片上切换的信号也会在芯片的配电网上产生电流变化,这反过来又会引起压降(噪声)的变化,从而导致周围电路的延迟变化。为减少这些现象对眼宽的影响,一个方法是在芯片之间驱动差分信号。

    差分信号用两个电信号(真信号和补信号)表示数据位。逻辑 "0"是指真信号被驱动到其下限电压,而补信号被驱动到其上限电压;逻辑"1"是指真信号被驱动到其上限电压,而补信号被驱动到其下限电压。差分接收设备根据两个信号之间的差异来解释逻辑位值,而不是根据任何一个信号的电平来单独解释。

图片

图6. 具有独立高速时钟的多组数据

    与同等的单端驱动相比,差分驱动电路往往具有线性电流驱动,并在电源上产生较少的噪声。大多数噪声源在真信号和补信号上引起的电压变化是相同的;这种共模噪声被接收器所忽略。另外,由于差分信号的一个边沿在上升,而另一个边沿在下降,或者相反,不平衡的上升和下降时间效应被抵消。

    差分信号的缺点是,每个数据位需要两个芯片引脚。然而,差分信号带来更高速度,这抵消了它更多引脚消耗的缺点,而单端信号则不可能带来更高的速度。

2.4. 多个接口时钟

    图3中的接口时钟与用于启动数据的时钟相同,一般来说,它是从时钟分配网络中的某一点驱动的,尽可能接近启动数据的实际触发器。任何不属于数据路径和时钟路径的电路都会引入相位变化。

    为了使眼宽最大化,通过时钟树到每个数据触发器和时钟输出的路径应尽可能多地共享,而且时钟的输出驱动器应与数据的输出驱动器相似。理想情况下,同一个时钟缓冲器应该驱动时钟到输出驱动器,并驱动所有数据触发器的时钟输入。数据总线上的位数越多,实现起来就越困难。I/O驱动器必须根据连接到封装引脚的接地规则进行物理分布。电路之间的距离越大,工艺、电压和温度的变化就越大,时钟分配网络中由于缺乏接近性而不能共享的电路路径就越多。

图片

图7. 调整接收器中的采样时钟相位

    用于改善眼宽的一种技术是限制与特定接口时钟线相关的数据位的数量。更宽的数据总线是通过使用多个接口时钟建立的,每个时钟与数据位的一个子集相关。图6是一个例子,其中k位互连被细分为两组,每组都有自己的高速接口时钟。请注意,接收芯片必须在不同的时钟域中捕获每组数据位,并需要将这些数据跨时钟域传输到芯片内部的公共时钟域。

2.5. 采样边沿调整

    另一种用于允许源同步接口更高速运行的技术是在接收器处处理数据信号,并在每个比特的基础上调整时钟的采样相位。这是通过将接收到的接口时钟信号连接到一个多隙延迟线的输入端,并在多个由不同时钟相位驱动的触发器中捕获数据信号来实现的。然后,可以用逻辑来确定数据转换发生的时钟相位,并选择用于捕获数据的最佳时钟相位。这个方案如图7所示。

    如图7所示的方案,可能需要在接口初始化时或定期进行训练模式。如果使用训练模式,相位选择在训练期之间保持静态。更复杂的实现方式是根据收到的数据或根据嵌入在数据流中的训练模式来动态调整。将数据应用于延迟线的替代架构也是可能的。然而,请注意,大多数这些方案的一个固有特点是,相位调整小于正负一个比特时间,必须有一个足够开的“眼”,这样才能存在一个最佳的采样相位。

    鉴于上面讨论的先进方案,源同步接口的数据速率可以扩展到每个互联位每秒几千兆比特(Gbps)。然而,PVT变化使接口速度的进一步提高变得异常复杂。在这些速度之外,从数据流的边缘转换中提取时钟的高速Serdes设备成为首选解决方案。

3、自同步串行接口

    自同步的意思就是不需要单独的时钟线,但是器件能在数据流中准确得到数据和时钟。 

 

    在系统同步接口方式中,随着接口频率的提高, 有几个因素限制了有效数据窗口宽度的继续增加。

a)、时钟到达两个芯片的传播延时不相等(clock skew)

b)、并行数据各个bit的传播延时不相等(data skew)

c)、时钟的传播延时和数据的传播延时不一致(skew between data and clock)

    虽然可以通过在目的芯片(chip #2)内用PLL补偿时钟延时差(clock skew),但是PVT变化时,时钟延时的变化量和数据延时的变化量是不一样的。这又进一步恶化了数据窗口。

    在源同步接口方式中,发送侧Tx 把时钟伴随数据一起发送出去, 限制了clock skew对有效数据窗口的危害。通常在发送侧芯片内部,源同步接口把时钟信号和数据信号作一样的处理,也就是让它和数据信号经过相同的路径,保持相同的延时。这样PVT 变化时,时钟和数据会朝着同一个方向增大或者减小相同的量,对skew最有利。

我们来做一些合理的典型假设,假设一个32bit 数据的并行总线,

a)、发送端的数据skew = 50 ps —很高的要求

b)、pcb走线引入的skew = 50ps —很高的要求

c)、时钟的周期抖动jitter = +/-50 ps —很高的要求

d)、接收端触发器采样窗口 = 250 ps —Xilinx V7高端器件的IO触发器

可以大致估计出并行接口的最高时钟 = 1/(50+50+100+250) = 2.2GHz (DDR)或者1.1GHz (SDR)。

    利用源同步接口,数据的有效窗口可以提高很多。通常频率都在1GHz 以下。在实际应用中可以见到如SPI4.2接口的时钟可以高达DDR 700MHz x 16bits位宽。DDR Memory接口也算一种源同步接口,如DDR3在FPGA中可以做到大约800MHz的时钟。

    要提高接口的传输带宽有两种方式,一种是提高时钟频率,一种是加大数据位宽。那么是不是可以无限制的增加数据的位宽呢?这就要牵涉到另外一个非常重要的问题—–同步开关噪声(SSN) 。

    这里不讨论SSN的原理,直接给出SSN的公式: SSN = L *N* di/dt。

    L 是芯片封装电感,N是数据宽度,di/dt是电流变化的斜率。

    随着频率的提高,数据位款的增加,SSN 成为提高传输带宽的主要瓶颈。下图是一个DDR3串扰的例子。图中低电平的理论值在0V,由于SSN的影响,低电平表现为震荡,震荡噪声的最大值达610mV,因此噪声余量只有1.5V/2-610mV=140mV。

图2 DDR3串扰演示

    因此也不可能靠无限的提高数据位宽来继续增加带宽。一种解决SSN的办法是使用差分信号替代单端信号,使用差分信号可以很好的解决SSN问题,代价是使用更多的芯片引脚。使用差分信号仍然解决不了数据skew的问题,很大位宽的差分信号再加上严格的时序限制,给并行接口带来了很大的挑战。

 

3.1 SerDes接口

    目前并口发展遇到的限制主要为,一方面芯片封装面临着IO数量紧张的问题,另一方面是,并口的数据速率提升过程中面临的串扰(Crosstalk)和噪声(SSN)问题,使得数据的同步变得很困难。

    源同步接口的时钟频率已经遇到瓶颈,由于信道的非理想(channel)特性,再继续提高频率,信号会被严重损伤,就需要采用均衡和数据时钟相位检测等技术。这也就是SerDes所采用的技术。

图3一个N对SerDes收发通道的互连演示,一般N小于4

    可以看到,SerDes不传送时钟信号,这也是SerDes最特别的地方,SerDes在接收端集成了CDR(Clock Data Recovery)电路,利用CDR从数据的边沿信息中抽取时钟,并找到最优的采样位置。

    SerDes采用差分方式传送数据。一般会有多个通道的数据放在一个group中以共享PLL资源,每个通道仍然是相互独立工作的。

    SerDes需要参考时钟(Reference Clock),一般也是差分的形式以降低噪声。接收端Rx和发送端Tx的参考时钟可以允许几百个ppm的频差(plesio-synchronous system),也可以是同频的时钟,但是对相位差没有要求。

    作个简单的比较,一个SerDes通道(channel)使用4个引脚(Tx+/-,Rx+/-), 目前的FPGA可以做到高达28Gbps。而一个16bits的DDR3-1600的线速率为1.6Gbps*16 = 25Gbps,却需要50个引脚。此对比可以看出SerDes在传输带宽上的优势。

相比源同步接口,SerDes的主要特点包括:

a) SerDes在数据线中时钟内嵌,不需要传送时钟信号。

b) SerDes通过加重/均衡技术可以实现高速长距离传输,如背板。

c) SerDes 使用了较少的芯片引脚。

具体SerDes原理见如下地址:

SerDes 基础详解_serdes clkpma 和pcs-CSDN博客

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

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

相关文章

C语言——队列的实现

队列按照先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则管理数据。这意味着最先进入队列的元素会被最先移出&#xff0c;类似于排队等候服务的情况。队列通常有两个主要操作&#xff1a;入队&#xff08;enqueue&#xff09;&#xff0c;将元素添加…

DRF返回值源码分析

DRF返回值源码分析 1 返回值 在视图中定义finalize_response方法&#xff08;也可以用来判断是否异常&#xff09; 自定义异常 配置文件 # settings.py REST_FRAMEWORK {"EXCEPTION_HANDLER": utils.handlers.exception_handler # 自定义的exceptional_handler路…

Sarcasm detection论文解析 |利用对话语境进行讽刺分析

论文地址&#xff1a; 论文地址&#xff1a;Sarcasm Analysis Using Conversation Context | Computational Linguistics | MIT Press github地址&#xff1a;https://github.com/debanjanghosh/sarcasm_context Alex-Fabbri/deep_learning_nlp_sarcasm: code for deep learnin…

基于springboot实现公司日常考勤系统项目【项目源码+论文说明】

基于springboot实现公司日常考勤系统演示 摘要 目前社会当中主要特征就是对于信息的传播比较快和信息内容的安全问题&#xff0c;原本进行办公的类型都耗费了很多的资源、传播的速度也是相对较慢、准确性不高等许多的不足。这个系统就是运用计算机软件来完成对于企业当中出勤率…

debug的基本使用

1.简介   首先看下IDEA中Debug模式下的界面。 如下是在IDEA中启动Debug模式&#xff0c;进入断点后的界面&#xff0c;我这里是Windows&#xff0c;可能和Mac的图标等会有些不一样。就简单说下图中标注的8个地方&#xff1a; ① 以Debug模式启动服务&#xff0c;左边的一个按…

Redis运维篇-快速面试笔记(速成版)

文章目录 1. Redis的持久化1.1 RDB&#xff08;快照模式&#xff09;1.2 AOF 模式 2. Redis主从模型&#xff08;高可用&#xff09;2.1 Redis的主从复制2.2 Redis拓扑结构 3. Redis集群模式&#xff08;高并发&#xff09;3.1 Redis的Slots3.2 集群模式的常用命令3.3 多主多从…

win下vscode的vim切换模式的中英文切换

问题描述 在vscode中安装vim插件后&#xff0c;如果insert模式下完成输入后&#xff0c;在中文输入方式下按esc会发生无效输入&#xff0c;需要手动切换到英文。 解决方法 下载完成vscode并在其中配置vim插件下载github—im-select.exe插件&#xff08;注意很多博文中的gitcod…

Node.js -- express 框架

文章目录 1. express 使用2. 路由2.1 路由的使用2.2 获取请求报文参数2.3 获取路由参数2.4 路由参数练习 3. express 响应设置4. 中间件4.1 全局中间件4.2 路由中间件4.3 静态资源中间件 5. 获取请求体数据 body-parser6. 防盗链7. 路由模块化8. 模板引擎8.1 了解EJS8.2 列表渲…

InfluxDB安装使用介绍

1.介绍 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成&#xff0c;着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据&#xff0c;IoT行业的实时数据等场景。 2.对常见关系型数据库&#xff08;MySQL&#xff09;的基础概念对比 1…

Spring Cloud——Circuit Breaker上篇

Spring Cloud——Circuit Breaker上篇 一、分布式系统面临的问题1.服务雪崩2.禁止服务雪崩故障 二、Circuit Breaker三、resilience4j——服务熔断和降级1.理论知识2.常用配置3.案例实战&#xff08;1&#xff09;COUNT_BASED&#xff08;计数的滑动窗口&#xff09;&#xff0…

UE4_Niagara_两个模型之间的粒子幻化

学习笔记&#xff0c;仅供参考&#xff01; 操作步骤&#xff1a; 1、新建niagara system&#xff0c;添加空的发射器&#xff0c;渲染改为网格体渲染器&#xff0c;网格体为1M_Cube. 2、创建粒子材质重载。 3、渲染网格体的材质设置&#xff1a; 4、在发射器属性面板&#x…

LeetCode 213 —— 打家劫舍 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题是 LeetCode 198—— 打家劫舍 的升级版&#xff0c;多了一个首尾相连的设定。 因为首尾相连&#xff0c;所以第一个房屋和最后一个房屋只能偷窃其中一个。 所以&#xff0c;第一种方案就是不偷窃最后一个房…

Web APIs 学习归纳6--- BOM浏览器对象

前面几节主要针对DOM进行了学习&#xff0c;现在开始新的内容的学习---DOM浏览器对象。 DOM是更注重页面&#xff08;document&#xff09;内容的设计&#xff0c;但是BOM不仅限于页面&#xff08;document&#xff09;的设计&#xff0c;而是更加全面包括页面的刷新&#xff0…

SpringBoot使用ResponseBodyAdvice和RequestBodyAdvice实现请求体解密、响应体加密

文章目录 一、写在前面二、实现细节1、定义加解密注解2、请求体解密逻辑3、响应体加密逻辑4、测试类5、测试结果 三、源码分析1、RequestResponseBodyMethodProcessor2、RequestBodyAdvice3、ResponseBodyAdvice 一、写在前面 项目中经常需要对接第三方平台&#xff0c;每次对…

redis ZRANGE 使用最详细文档

环境&#xff1a; redis_version:7.2.2 本文参考 redis 官方文档1 语法 ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]参数含义key是有序集合的键名start stop在不同语境下&#xff0c;可用值不一样BYSCORE | BYLEX按照分数查询 | 相…

Node.js -- mongoose

文章目录 1. 介绍2. mongoose 连接数据库3. 插入文件4. 字段类型5. 字段值验证6. 文档处理6.1 删除文档6.2 更新文档6.3 读取文档 7. 条件控制8. 个性化读取9. 代码模块化 1. 介绍 Mongoose是一个对象文档模型库&#xff0c;官网http://www.mongoosejs.net/ 方便使用代码操作mo…

2021-10-21 51单片机两位数码管显示0-99循环

缘由单片机两位数码管显示0-99循环-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; sbit bpP3^4; bit k1,wk10,wk20; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,1…

数据库(MySQL) —— DDL语句

MySQL—— DDL语句 什么是MySQL的DDL语句查看所有的所有数据库查看当前使用的数据库库操作创建库使用数据库删除库 表操作创建表查询当前库中所有的表查询表结构查询指定表的建表语句删除表 表修改删除字段修改数据类型修改字段名和字段类型重命名表删除指定表并重新创建该表 我…

c3 笔记7 css基本语法

相关内容&#xff1a;字体、段落、词间距、文字效果&#xff08;对齐、上下标、阴影&#xff09;、背景图、背景渐变、…… 单位pt与px的差别pt是印刷使用的字号单位&#xff0c;不管屏幕分辨率是多少&#xff0c;打印到纸上看起来都是相同的&#xff0c;lot的长度是0.01384英寸…

Mybatis四种实例化对象方式

代码准备 创建mybatis-config.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration…