为了自己以后需要这些知识的时候,可以方便查阅,仅仅代表自己的观点,不一定正确。
建立时间、保持时间和传输延迟时间都是和触发器的动态特性有关,因此必须介绍一下触发器,一个简单的触发器除了有输入和输出信号,还有一个触发信号,我们通常称这个信号为时钟信号,只有触发信号的到来,触发器的输出信号才会发生改变,一个简单触发器示意图如下所示:

建立时间(setup time):时钟沿到来之前输入信号D必须保持稳定的最小时间,如下图所示:
保持时间(hold time):时钟沿到来之后输入信号D必须保持稳定的时间,如上图所示。
传输延迟时间(clk-to-q time):输入D满足setup/hold time要求,从时钟沿到来时刻到输出端Q变化至稳定的时间。
如下图所示为的CMOS边沿触发D触发器的典型电路,其中FF1和FF2是两个利用CMOS传输门组成的电平触发D触发器,边沿D触发器的工作原理如下:
当CLK=0时,C=0、C’=1,TG1导通、TG2截止,D端的输入信号送入FF1,使Q1=D。而且,在CLK=0期间Q1的状态将一直跟随D的状态而变化。同时,由于TG3截止TG4导通,FF2保持原来的状态不变。
当CLK的上升沿到达时,C=1、C’=0,TG1变为截止、TG2变为导通。由于反相器G1的输入电容的存储效应,G1输入端的电压不会立刻发生改变。于是Q1在TG1变为截止前的状态被保存了下来。同时,随着TG4变为截止、TG3变为导通,Q1的状态通过TG3和G3、G4送到了输出端,使Q=D。

从上文分析一个最基本的D触发器工作原理,建立时间是指输入信号应当先于时钟信号CLK动作沿到达的时间。为了保证触发器可靠的翻转,在C和C’状态改变以前FF1中Q1的状态必须稳定地建立起来,使Q1=D。由于加到D端输入信号需要经过传输门TG1和反向器G1和G2的传输延迟时间才能达到Q1端,而在CLK的上升沿到达后,只需经过反相器G5的传输延迟时间C’的状态即开始改变(在这里我们规定传输门从控制信号跳变到它的输出状态改变的延迟时间、反相器的传输延迟都为td),因此D端的输入信号必须先于CLK的上升沿至少2td的时间达到,所以这里D触发器的建立时间最小为2td。
保持时间是指时钟信号CLK动作沿到达后,输入信号仍需要保持不变的时间。CLK动作沿到达后,需要经过G5,关闭传输门,花费的时间为2td,在这个时间期间,输入信号数据必须保持稳定。
传输延迟时间是指从CLK动作沿到达开始,直到触发器输出的新状态稳定建立所需要的时间。FF2输出端的Q的新状态需要经过C、C’、TG3和G3的传输延迟后才能建立起来,所以Q端的传输延迟为4td,Q’端的传输延迟为5td。
如下图所示是静态CMOS反相器的示意图,该反相器由两个mos管构成,上面是PMOS,下面是NMOS。当输入电压Vin为高电平时,NMOS管导通,PMOS管截止。输出电压Vout为0.当输入电压Vin为低电平(0)时,NMOS管截止,PMOS管导通。输出电压Vout为Vdd。

下图反映了反相器的瞬态响应曲线,黑色曲线表示输入电压Vin,红色电压表示输出电压Vout,当输入电压Vin从低电压变为高电压时,输出电压Vout并不是立即变为0,需要经过电容放电,是要经过一段时间后之后才变为低电平(0)。输入电平Vin由高电平变为低电平,输出电压Vout也不是突变为高电平,需要电源对电容充电,这也是需要经过一段时间。一个反相器的总传播延时tp=(tpHL+tpLH)/2,这里tpHL为由高至低翻转的传播延时,tpLH为由低至高翻转的传播延时。正是因为晶体管级别存在的传播延时才导致了时序电路需要做时序约束,在设计电路的时候需要满足触发器的建立时间和保持时间。

数字电路上时序的要求归根结底是因为管级电路的翻转不是突变的,是有延时的,需要电容充放电。
1 数字集成电路——电路、系统与设计(第二版)
2 数字电子技术基础(第六版)
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题: