FPGA_IIC时序实验
iic时序中数据建立时间

iic时序中数据建立时间一、数据建立时间的作用在IIC总线通信中,数据建立时间是指从SCL信号由低电平变为高电平时,SDA信号的电平要稳定在数据线上的一个时间间隔。
这个时间间隔是为了确保接收方能够正确识别数据的位值,即在SCL信号上升沿之前,SDA信号已经稳定并且能够被准确读取。
数据建立时间的作用是为了保证数据的可靠传输。
在IIC通信中,SCL信号控制数据的传输时序,SDA信号则承载具体的数据位值。
当SCL信号由低电平变为高电平时,SDA信号必须在一定的时间内稳定在数据线上,以确保接收方能够准确读取数据。
如果数据建立时间不足,SDA信号可能还未稳定,接收方就开始读取数据,就会导致数据读取错误。
二、数据建立时间的实现方式在IIC总线通信中,数据建立时间是通过控制SCL信号的高电平时间来实现的。
具体而言,数据建立时间应大于或等于t_BUF,其中t_BUF是IIC设备的数据缓冲时间,也是数据从发送方到接收方的传输时间。
为了确保数据建立时间的准确性,需要根据具体的IIC设备的规格书,了解其数据建立时间的要求。
不同的IIC设备可能有不同的要求,因此在设计和布线中需要严格按照规格书中的要求进行。
三、注意事项1. 确保IIC设备的工作频率和时钟频率一致,否则可能导致数据建立时间不足或过长。
2. 在设计和布线中,应尽量缩短SCL和SDA信号的传输路径,以减少信号的传输时间和干扰。
3. 需要注意IIC设备的驱动能力,以确保SDA信号能够在规定的时间内稳定在数据线上。
4. 在进行IIC通信时,应注意信号的抗干扰能力,避免外部干扰对数据建立时间的影响。
5. 在进行IIC设备的布局时,应尽量避免长线和并行线,以减少信号的传输时间和干扰。
IIC时序中的数据建立时间是确保数据能够正确传输的关键步骤之一。
通过控制SCL信号的高电平时间,保证SDA信号在数据线上稳定的时间间隔,可以确保接收方能够准确读取数据。
在设计和布线中,需要注意IIC设备的规格要求,合理设计和布局,以确保数据建立时间的准确性和稳定性。
FPGA时序分析

FPGA时序分析FPGA (Field-Programmable Gate Array) 是一种可编程逻辑门阵列芯片,它通过配置在其内部的逻辑门和可编程连线实现不同的逻辑功能。
FPGA 在数字电路设计中广泛应用,其灵活性和可重构性使其成为快速原型设计和现场配置电路的理想选择。
然而,FPGA设计和时序分析是一个复杂的过程。
时序分析是验证设计电路的正确性以及保证其能够在时钟信号的驱动下按照预期的时间顺序工作的过程。
下面将重点介绍FPGA时序分析的基本原理和关键概念。
在FPGA设计中,时序分析主要关注以下几个方面:时钟,时钟延迟,组合逻辑路径和寄存器。
1.时钟:时钟信号在FPGA设计中起到重要作用,它用于同步各个电路模块的操作。
时钟的频率和占空比对电路实现的性能和功耗都有很大的影响。
2.时钟延迟:时钟信号在从原始源头传达到特定电路元件的过程中会有一定的延迟。
这个延迟可以由时钟发生器的性能以及时钟信号在FPGA中传输的路径和电路元件的特性决定。
3.组合逻辑路径:组合逻辑路径是指信号从输入到输出经过的一系列逻辑门的路径。
每个逻辑门都会引入一定的延迟,而组合逻辑路径的时序分析主要关注延迟和信号传播的时间约束。
4.寄存器:FPGA中的寄存器用于存储电路的中间结果或暂存数据,它们可以在时钟上升沿或下降沿触发。
寄存器的时序分析包括确定数据到达寄存器的时间以及寄存器中数据对输出的影响。
时序分析主要用于验证和优化FPGA电路设计。
通过分析时钟频率、时钟延迟和电路路径延迟,可以确定电路是否满足设计规范和时间约束。
时序分析还可以帮助设计人员优化电路以达到更好的性能,如降低时钟频率、优化组合逻辑路径、调整寄存器设置等。
在进行 FPGA 时序分析时,通常使用的工具是时序分析器。
时序分析器是一种软件工具,可以输入 FPGA 设计的网络描述、时钟频率、时钟源等信息,利用相关算法和模型计算出电路的时序性能。
常见的时序分析器包括 Xilinx 的 Vivado 和 Altera 的 Quartus。
iic应答时序

iic应答时序【原创版】目录1.IIC 应答时序概述2.IIC 应答时序的工作原理3.IIC 应答时序的应用实例4.IIC 应答时序的优缺点正文I.IIC 应答时序概述IIC(Inter-Integrated Circuit),即内部集成电路,是一种串行双向通信总线,它是由 Philips 公司(现在的 NXP 半导体公司)于 1980 年代开发的。
IIC 用于在微控制器(MCU)和周边设备(如 EEPROM、LCD 显示器、传感器等)之间进行低速通信。
在 IIC 通信中,设备分为主设备和从设备,主设备负责发起通信和生成时钟信号,从设备则根据主设备的指令进行回应。
IIC 应答时序是指从设备在接收到主设备的指令后,进行回应的时间顺序和时序要求。
了解和掌握 IIC 应答时序对于设计和开发基于 IIC 通信的电子设备至关重要。
II.IIC 应答时序的工作原理IIC 通信采用主从模式,主设备发起通信,从设备响应。
在通信过程中,主设备会发送起始信号、读/写操作位、设备地址和数据,从设备收到这些信号后,会在规定的时间内发出应答信号(ACK)。
从设备在接收到主设备的指令后,需要按照规定的时序进行回应,这个过程称为 IIC 应答时序。
具体来说,IIC 应答时序包括以下几个步骤:1.主设备发出起始信号,从设备检测到起始信号后,开始准备接收后续信号。
2.主设备发送设备地址,从设备接收到设备地址后,根据地址判断是否是自己需要响应的设备,如果是,则进入下一步。
3.主设备发送读/写操作位,从设备接收到读/写操作位后,根据操作位确定是读操作还是写操作。
4.主设备发送数据,从设备接收到数据后,进行相应的存储或处理。
5.从设备在规定的时间内发出应答信号(ACK),表示已经成功接收到主设备的指令。
III.IIC 应答时序的应用实例一个典型的 IIC 应答时序应用实例是使用 IIC 总线连接微控制器和EEPROM。
在这个实例中,微控制器作为主设备,负责发起通信和生成时钟信号,EEPROM 作为从设备,负责响应微控制器的指令。
时序实验实验报告

一、实验目的1. 掌握时序逻辑电路的基本原理和设计方法。
2. 熟悉常用时序逻辑电路器件的结构和功能。
3. 培养实际操作能力,提高电路设计水平。
二、实验原理时序逻辑电路是指输出不仅与当前输入有关,还与过去输入有关,即电路的输出状态具有记忆功能的电路。
本实验主要涉及同步计数器和寄存器的设计与测试。
三、实验设备1. 数字电子实验箱2. 示波器3. 信号发生器4. 74LS163、74LS00、74LS20等集成器件四、实验内容1. 设计一个4位同步计数器,实现二进制加法计数功能。
2. 设计一个8位同步寄存器,实现数据的暂存和传送功能。
五、实验步骤1. 4位同步计数器设计(1)根据计数器功能要求,列出状态转换表。
(2)根据状态转换表,画出状态转换图。
(3)根据状态转换图,画出电路图。
(4)将电路图连接到实验箱上,并进行调试。
(5)观察计数器输出,验证计数功能是否正确。
2. 8位同步寄存器设计(1)根据寄存器功能要求,列出数据输入、保持、清除和输出控制信号的真值表。
(2)根据真值表,画出电路图。
(3)将电路图连接到实验箱上,并进行调试。
(4)观察寄存器输出,验证寄存功能是否正确。
六、实验结果与分析1. 4位同步计数器实验结果经过调试,4位同步计数器能够实现二进制加法计数功能。
观察计数器输出,验证计数功能正确。
2. 8位同步寄存器实验结果经过调试,8位同步寄存器能够实现数据的暂存和传送功能。
观察寄存器输出,验证寄存功能正确。
七、实验总结本次实验,我们通过设计4位同步计数器和8位同步寄存器,掌握了时序逻辑电路的基本原理和设计方法。
在实际操作过程中,我们提高了电路设计水平,培养了实际操作能力。
八、实验心得1. 在设计时序逻辑电路时,要充分理解电路功能要求,合理选择器件,确保电路能够实现预期功能。
2. 在调试过程中,要仔细观察电路输出,发现问题及时解决。
3. 通过本次实验,我们对时序逻辑电路有了更深入的了解,为今后学习和实践打下了基础。
时序实验报告总结

时序实验报告总结时序实验报告总结时序实验是计算机科学中的一项重要实验,旨在通过设计和实现时序电路,来加深对数字电路和时序逻辑的理解。
本文将对我在时序实验中的学习和总结进行分享。
实验一:时序电路设计在时序电路设计实验中,我通过学习时序逻辑的基本概念和设计原理,成功完成了一个简单的时序电路设计。
通过该实验,我深入理解了时钟信号、触发器和状态机的概念,并学会了使用Verilog语言进行时序电路的建模和仿真。
实验二:时序电路优化时序电路优化实验是进一步提高时序电路设计能力的关键一步。
在该实验中,我通过对已有电路的分析和优化,实现了电路的性能提升。
通过优化电路的关键路径,我成功降低了电路的延迟,并提高了电路的工作速度。
实验三:时序电路测试时序电路测试是保证电路正确性的重要环节。
在该实验中,我学会了使用测试向量和模拟器对时序电路进行测试。
通过设计全面的测试用例和检查电路的输出波形,我成功发现和解决了电路中的一些问题,并提高了电路的稳定性和可靠性。
实验四:时序电路综合时序电路综合是将逻辑电路转化为物理电路的过程。
在该实验中,我学会了使用综合工具将Verilog代码转化为门级电路,并通过对综合结果的分析和优化,提高了电路的面积效率和功耗性能。
实验五:时序电路布局与布线时序电路布局与布线是将逻辑电路映射到芯片上的过程。
在该实验中,我学会了使用布局与布线工具对电路进行布局和布线,并通过对布局和布线结果的分析和优化,提高了电路的可靠性和稳定性。
实验六:时序电路验证时序电路验证是验证电路设计的正确性和可靠性的重要环节。
在该实验中,我学会了使用仿真和验证工具对电路进行验证,并通过对验证结果的分析和优化,提高了电路的正确性和稳定性。
通过以上实验,我深入了解了时序电路的设计、优化、测试、综合、布局与布线以及验证等方面的知识和技能。
通过实践和总结,我不仅提高了对时序电路的理解和掌握,还培养了问题解决和创新能力。
时序实验的学习过程中,我还遇到了一些挑战和困惑。
FPGA实验报告实验2

西南科技大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:基于HDL十进制计数、显示系统设计姓名:学号:班级:通信1301指导教师:刘桂华西南科技大学信息工程学院制基于HDL十进制计数、显示系统设计一、实验目的1、掌握基于语言的ISE 设计全流程;2、熟悉、应用VerilogHDL描述数字电路;3、掌握基于Verilog的组合和时序逻辑电路的设计方法;4、掌握chipscope 片内逻辑分析仪的使用与调试方法。
二、实验原理1、实验内容:设计具有异步复位、同步使能的十进制计数器,其计数结果可以通过七段数码管、发光二极管等进行显示。
2、模块端口信号说明:输入信号:Clk_50m ---系统采样时钟clk -------待计数的时钟clr ---------异步清零信号,当clr=0,输出复位为0,当clr=1,正常计数ena---------使能控制信号,当ena=1,电路正常累加计数,否则电路不工作输出信号:q[6:0]---------驱动数码管,显示计数值的个位cout -----------1bit 数据,显示计数值向十位的进位COM-----------共阳级数码管,公共端(接地,参考开发板原理图3、以自顶向下的设计思路进行模块划分:整个系统主要设计的模块是:十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟clk,先通过消抖模块消抖后,再输出至后续使用。
1)十进制计数器模块设计输入: CLK -------待计数的时钟CLR ---------异步清零信号,当CLR =0,输出复位为0,当CLR =1,正常计数。
EN---------使能控制信号,当EN=1,电路正常累加计数,否则电路不工作输出:SUM[3:0]---------- 计数值的个位。
即,在CLK 上升沿检测到SUM=9 时,SUM 将被置0,开始新一轮的计数。
tc ------------计数值的十位进位,即:只有在时钟CLK 上升沿检测到SUM=9 时,TC将被置1,其余情况下TC=0;在设计中可以使用always,if-else-if语句实现,设计中注意不要在两个以上的always 模块中对同一个变量进行赋值,否则会产生多重赋值源(multi-source)的问题。
iic标准时序

iic标准时序
IIC(Inter-Integrated Circuit)是一种双线串行总线,也被称为I2C(发音为"I-squared C")。
它是由Philips公司开发的一种简单、双向、二线制同步串行总线。
IIC标准时序包括起始信号、数据传输、停止信号等步骤。
以下是IIC标准时序的基本步骤:
1.起始信号:当SCL线为高电平,SDA线由高电平跳变为低电平时,表示开始传输数据。
2.数据传输:在起始信号后,可以进行数据传输。
数据传输遵循以下规则:
在SCL线为高电平时,SDA线上的数据必须在稳定的电平状态,并且在SCL 线为低电平时,数据允许改变。
SDA线的数据在时钟信号SCL为高电平时保持稳定,在SCL为低电平时,数据可以改变。
3.停止信号:当SCL线为高电平,SDA线由低电平跳变为高电平时,表示停止传输数据。
4.应答信号:如果接收数据的设备能够正确接收数据,它将在SCL线的高电平期间将SDA线拉低,表示应答。
如果设备不能接收数据或发生错误,它不会拉低SDA线,表示非应答。
5.时钟同步:在数据传输过程中,主设备会生成时钟信号SCL,并用于同步数据传输。
从设备根据主设备的时钟信号来响应。
6.数据长度:一个IIC数据包中可以有1字节的数据,也可以有多个字节的数据。
多字节的数据必须以最高有效字节(MSB)在前的方式进行传输。
注意,上述是基本时序和规则,具体应用可能有所不同。
根据实际设备和具体需求,可能需要进一步了解和应用相关的具体参数和设置。
iic协议的时序

iic协议的时序
IIC(Inter-Integrated Circuit)协议,也被称为I2C(Inter-IC)
协议,是一种串行通信协议,用于在集成电路(IC)之间进行数
据通信。
以下是IIC协议的时序:
1. 起始条件(Start Condition):主设备发送一个低电平的起
始信号,表示要开始一次通信。
2. 地址传输(Address Transmission):主设备发送从设备的地址,由7位地址和一个读/写位组成。
地址包括一个从设备的
唯一标识符,告诉其他设备谁是通信的对象。
3. 应答(ACK):主设备发送完地址后,等待从设备发送应
答信号。
应答信号是一个低电平,表示从设备正常响应。
4. 数据传输(Data Transmission):主设备发送数据到从设备。
每个字节的传输都以一个起始位、8位数据和一个应答位结束。
5. 应答(ACK):从设备在接收到数据后发送应答信号,表
示已经成功接收。
6. 重复起始条件(Repeated Start Condition):主设备可以在
没有停止条件的情况下发送一个重复的起始条件,用于在多个字节数据传输之间保持通信。
7. 停止条件(Stop Condition):主设备发送一个高电平的停止信号,表示通信结束。
需要注意的是,IIC协议是多主设备的协议,每个主设备都有自己的时序控制。
以上时序只是IIC协议的基本流程,实际应用中可能会有其他补充协议或时序约定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA_IIC时序实验概述:这篇文章通过FPGA实现对EEPROM的读写操作,演示了如何看懂芯片时序和结构建模风格的verilog实现的一般方法。
以对IIC总线的FPGA实现为例子,揭示了芯片时序的分析的一般方法,和结构化建模风格的verilog实现如何对算法进行描述以及如何对时序的精确控制的一般方法。
这篇文章分为两个部分,第一个部分是如何看懂时序图,第二个部分是结构化建模风格的verilog如何对算法进行描述和对时序进行精确控制。
第一个部分尽量独立于第二个部分,也就是说这里的如何看懂时序图不仅仅适合FPGA对时序的描述,也同样适合单片机等控制器对时序的描述。
我觉得说明时序图是如何看懂的,和代码是如何思考和写出来的,比分析个别时序和解释个别代码如何工作更具有普遍性。
所以这篇文章主要是记录如何看懂时序图和如何把时序图写成对应的verilog模块。
接下来一部分主要讲结构化建模的思考方式。
对如何看懂时序感兴趣的可以直接跳到时序分析部分。
对如何通过verilog实现IIC总线感兴趣的可以直接跳过到代码分析部分。
建模的首要任务是管理复杂度。
管理复杂度可以通过以下方法来实现。
一般思路是首先找出要实现功能对应的抽象数据对象(ADT),然后通过建立原型的方法搭建模块的骨架,以增量式的开发方式构建肌肉、神经、血管和皮肤,然后构成完整的功能模块。
增量式的开发原则是每一步以能够最快的实现预期现象为目的进行的。
如果不能以最快的看到预期现象为目的,只是搭建完成各模块的后进行整合直接看结果的话,通常结果是什么都没有的。
这里借用了软件开发的一个原理,提高软件工程效率有效方法是把错误产生时间和解决的时间控制在越早,整个软件工程的代价就越小;否则,解决问题的时间离产生问题的时间越晚,整个软件工程的代价会成指数增长,最终会导致整个工程崩溃。
增量式开发的原则中的最快的实现预期现象,要运用到测试和调试的方法。
这里需要注意的一点是要看到实际的现象,而不仅仅是仿真的时序图符合预想。
通常错误的预想产生仿真的时序图也会符合预想。
在完成这次实验中就遇到了这样的问题,错误预期的仿真时序图符合了预期。
最后整合模块后下载到FPGA中,没有任何结果,也无法定位错误产生的位置,只好全部丢带,重构整个模块。
建模过程中产生的难以理解的问题,可以通过建立试验的方法,把基本功能从模块分离出来进行试验。
可以有效的找到理解和解决问题的方法。
在建模的整个过程中要贯穿抽象性,封装性,高内聚和松散耦合的方法。
涉及到具体的verilog,就是每个模块实现一个完整的功能,这里的一个体现了封装性和松散耦合,完整就是每个模块都能独立实现相应的功能,体现了抽象性和松散耦合。
算法中每个步骤实现一组相关的功能。
每个时钟周期处理一个数据的概念。
这里主要是根据结构化设计为理论基础。
结构化设计简单的说就是直线式的代码设计,自上而下不随意在前后跳转,和模块化设计。
结构化设计的原则是代码清晰第一,效率第二。
建模的首要目的是管理复杂度。
代码的设计和阅读都是人来进行的。
所以代码越清晰,就越适合人在设计的过程中在同一时间将复杂度控制在一定范围内,简化设计时的思维跨度,能够提高设计效率。
时序分析:(1)什么是时序什么是时序?要对时序进行分析,首先要理解时序的概率。
我对时序的理解是,数据(信号)在传输时,时间的先后顺序。
具体来说就是每一位数据在每一时钟周期是如何传递的。
要理解时序需要时钟周期的概念。
时钟周期就像的心跳,每一步处理的数据都在一个时钟周期内完成的,不能多半个时钟周期,也不能少半个时钟周期。
这就是一个时钟周期,处理一个数据的概念。
一个时钟周期有一段高电平和一段低电平,也可以说是一个上升沿和一个下降沿。
我把时钟周期两个沿定义成节拍。
就像心跳的跳和停节拍一样。
一个时钟周期,处理一个数据;一个时钟周期,由两个节拍构成。
这样一个数据的处理就只有两种情况了,要么在时钟的上升沿处理数据,要么在时钟的下降沿处理。
通常数据的处理方式分为数据更新和数据锁存。
那么一个时钟就对应两种数据处理方式,时钟的上升沿更新数据,时钟的下降沿锁存数据;或者是时钟的下降沿更新数据,时钟的上升沿锁存数据。
两种数据处理方式如下图。
上图是数据处理的理想时序。
实际时序虽然存在延时,但可以通过找到等价的理想时序来简化实际时序,对时序进行描述。
这里用到了计算机中地址对齐的概念,例如一个结构体变量有一个整型变量(4个字节),一个浮点型变量(8个字节),结构体变量在通过编译器优化后会变成16(8+8)个字节,而不是12个字节(4+8),字节数少的向字节数多的对齐,使每次访问的都是8的整数,简化字节访问。
通过实际时序向理想时序对齐,只要理想时序的每个时钟周期大于实际时序的每个时钟周期,就可以对实际时序进行描述了。
而且理想时序只有这两种处理数据的方式,大大简化了实际时序的复杂情况。
使得对时序的描述可以模板化。
在实际情况中理想时序上升沿数据更新,下降沿数据锁存的例子有串口时序、PS2时序等,下降沿数据更新,上升沿数据锁存的例子有IIC 时序、SPI 时序等。
在时序分析时还涉及到一个重要的概率就是工作频率。
工作频率是时钟周期的倒数,是对同一种概念的不同性质的描述。
工作频率反应了时序的快慢,工作频率越高,工作速度越快;反之则越慢。
例如串口的波特率115.2KHZ 就表示1秒钟传输115.2K 位数据,值得注意的一点是这里单位是位(bit ),而不是字节(byte )。
我总是喜欢把这两个单位搞混。
芯片数据手册上一般给出的也都是时序的工作频率。
用来反映芯片工作的快慢,而不是时钟周期。
然而要对时序进行描述的话就需要处理每一个数据的时钟周期,而不是每一秒传输多少个数据的工作频率。
只要对工作频率求倒数就可以得到时钟周期了。
把上面的理想时序分析总结一下,首先根据工作频率求出时钟周期,然后根据实际时序按照理想时序的两种数据处理方式,找到对应的模型即可。
这里的原则是只要理想时序大于实际时序就可以了。
在时序分析中要时刻注意时钟周期的概念。
因为每一个数据的处理都是在一个时钟周期内完成的。
(2)EEPROM 简介接下来通过EEPROM 24LC04B 芯片来演示分析IIC 时序的整个过程。
在这里只提到了有上升沿数据更新 下降沿数据锁存下降沿数据更新 上升沿数据锁存关的信息。
24LC04B芯片详细的信息请参考datasheet文件夹下的数据手册。
分析芯片的时序当然是以芯片的数据手册为依据。
芯片对应的硬件电路也是根据数据手册画出的,下面为了说明的方便直接给出对应的硬件电路原理图。
上图是24LC04B的原理图。
SCL表示IIC时序的时钟信号,是单向输入信号;SDA表示IIC时序的数据信号,是双向的输入输出信号。
写IIC驱动时序主要对这两个引脚进行操作。
24LC04B是一个具有4K(2 x 256 x 8=512byte)位的EEPROM。
首先通过读数据手册找到它的工作频率,100 kHz (2.5V) and 400 kHz (5V)。
当供电为2.5V时支持100KHz的工作频率,换句话说就是最慢的情况的每秒可以传输100 (bit)位数据。
在这里我分析的是工作频率为100KHz情况下时序,所以把工作频率转换成对应的时钟周期就是10us(1/100KHz)。
也就是说处理一个数据的时钟周期为10us。
一个时钟周期由两个节拍构成,一个节拍就是5us。
5us就是描写时序所需要的最小时间单位。
一个时钟周期,处理一个数据。
通过时钟的对齐,数据处理的时间都为5us的整数倍,便于对时序就行描述。
在数据手册中可以找到这样一句话During data transfer, the data line must remain stable whenever the clock line is HIGH.这句话对应的理想时序模型就是第二种情况,下降沿数据更新,上升沿数据锁存。
找到理想时序模型后,时序描述就变得很简单了。
只需要把理想时序套在实际时序上,就可以写出对应的时序了。
(3)开始信号总线时序(BUS TIMING START)数据手册中的实际时序图有两副,分别描述了开始信号时序和结束信号时序,写数据时序和读数据时序。
把每种情况分开来看。
在看的过程中要记住一个时钟周期,处理一个数据。
在这里开始信号当作一个数据处理,结束信号也当作一个数据处理,所以它们对应且只对应一个时钟周期(一个下降沿到下一个下降沿之间)。
A B C D A B C D上图是实际时序的开始信号和结束信号。
先看左边的开始信号,开始信号和一般的数据不太一样不能套用数据更新和数据锁存的概念。
但根据一个时钟,处理一个数据的原则任然把开始信号当做广义上的“数据”。
在数据手册中有这样一句话Changes in the data line while the clock line is HIGH will be interpreted as a START or STOP condition.意思是当SCL为高时SDA拉低传递开始信号,SDA拉高传递结束信号。
在上图开始信号部分有TSU:STA,和THD:STA,也就是开始条件建立需要时间和开始条件需要保持的时间。
这两个时间要到时序表中寻找。
上面是时序表中的对应时间,左边的是100KHz的时间,右边是400KHz的时间,单位是ns。
在这里只需要看左边的TSU:STA建立时间是4.7us,THD:STA保持时间是4.0us。
考虑TR和TF,一个完整的开始“信号”所需要的时间就是(1+4.7+4+0.3) = 10us。
这里留有2.5V 100KHz时的bug,SDA拉低必须在5.7(1+4.7)us后,根据原则理想时序应该大于实际时序,再根据5us对齐,这里的开始条件应该在10us建立时间,但是我在后面为了方便直接使用的5us建立时间。
因为在我的实际硬件电路中供电是3.3V,大于2.5V,所以要求最小的时钟周期必定小于5.7us,最后的实际结果也证明是可行的。
在这里理想时序都是采用的上升沿和下降沿从左边对齐的方式,仅仅是为了分析方便。
因为一个时钟周期,传递一个数据。
两个下降沿之间才构成一个完整的时钟周期。
所以这里完整的开始条件的时钟周期关于5us对齐,SCL为5us低+5us低+5us高+5us高,SDA为5us高+5us高+5us高+5us低。
SDA在第三个5us时拉低就可以产生开始信号。
由于SDA是在SCL的第三个5us变化的,所以可以把第一个5us简化。
最后描述的开始条件为SCL为5us低+5us高+5us高,SDA为5us高+5us高+5us低。
得出的这个时序关系可以直接映射成对应的表达式。
这个时序关系,在后面通过verilog描述开始条件时需要用到。