电路为什么要有触发器这种结构?
http://www.fpgaw.com/forum.php?m ... 87732&fromuid=29512
(出处: fpga论坛|fpga设计论坛)
电路系统中是有两种电路,一种是组合逻辑(Combinational Logic),其输出只是当前输入的函数,与之前状态无关,无存储功能;另一种是时序逻辑(Sequential Logic ),能够存储数据供以后使用,如触发器,memory,寄存器(register,由多个触发器组成)。
举个例子,如果你要做累加,计算
s=0;
for (i=0;i
s = s+X{i} ;
如果不用触发器,只用组合逻辑,设计为下图。但可以看到这个设计有问题,无法实现结果,因为无法存储中间值,无法控制状态转换。
所以就需要触发器存储中间值,结构如下:
所以在实际的电路系统中,是由时序逻辑与组合逻辑共同组成。时序逻辑储存中间值,可分割组合逻辑,让每个组合逻辑变成一小块。流水线就是这样,能提高时钟频率,增加系统吞吐量,让每个模块的利用率达到最大。如下图所示:
设计触发器时,需要注意触发器的几个时间特性,满足这些特性触发器才能正常工作:
建立时间(T setup time):是指在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器。
保持时间(T hold):是指数据稳定后保持的时间,如果保持时间不满足要求那么数据同样也不能被稳定的打入触发器。
数据输出延时(Tco, Clock-to-Output Delay):当时钟有效沿变化后,数据从输入端到输出端的最小时间间隔。
注意只有建立时间(T setup time)与 数据输出延时(Tco, Clock-to-Output Delay)是在critical path上,是电路delay,如下图:
最后说下,触发器的内容一定要认真理解,这个是整个数字电路的基础。
你说到了同步异步,那我说下异步电路吧。异步电路不需要时钟,低功耗,速度快,但需要用大量握手信号来同步电路,设计起来很复杂,目前还是非主流,至少十年内时序同步电路仍会是主流。
-----------------------------------------------流水线分割------------------------------------------------------
有小伙伴说最好扩充下流水线(pipeline)知识,那我补充下吧
pipeline是将组合逻辑进行分割,能让任务以类似并行方式处理,提高系统频率,提高吞吐量(throughput).
举个例子,假设洗衣分为四个步骤,分别在四个设备上进行,其中漂洗机器,烘干机器,在衣架上折叠衣服,把衣服放进柜子里各用30分钟,全过程需两小时。现有四个人去洗衣服,若sequential处理,一个人完成全步骤别人才开始,每人两小时,四个人共用八小时。如下图:
但如果利用pipeline式的流水处理,当某人完成某步骤,其所用的设备就空闲了,后面的人就开始使用,四个人洗衣服只用3.5小时就能完成。如下图:
注意,pipeline只是提高系统的吞吐量,不能改善单个任务的latency。在实际电路中是在组合逻辑中插入register,分割组合逻辑,实现pipeline,而register读写也需要时间,所以单个任务的执行时间反而会增长。另外在分割组合逻辑时,使分割后的每段处理时间尽量相同,因为系统时钟是由最慢的那段决定的