0. 前言
这段时间翻了下数字电路,结合工作实践,才恍然大悟,SR锁存器原来和FPGA设计和SRAM关系很大:
-
SR锁存器与FPGA设计为什么要避免锁存器;
-
SRAM结构与SR锁存器之间关系;
-
基于SRAM和Flash架构的FPGA本质区别。
1. SR锁存器
SR锁存器可以通过与非门或者或非门来实现,下面通过与非门通过Verilog语言实现:
RTL视图如下:
对应的真值表如下:
通过上面的真值表可以发现以下的功能特点:
-
R=S=0需要避免,因为Q=~Qn不成立;
-
R=~S归0和置1操作(RS低有效,分别是Rset 0和Set 1);
-
R=S=1锁存保持上次的值。
由于SR锁存器有锁存值的功能,那么我们可以通过保证RS在R=~S和R=S=1的转态下来去掉单脉冲的抖动,如下图:
2. FPGA为何要避免锁存器
SR锁存器的结构和功能一般都知道,但是否想过FPGA又为什么要避免锁存器了?下面对上面的Verilog编写的SR锁存器进行仿真,其中用5ns模拟与非门的逻辑延时:
其中,模拟R和S不是同时达到来测试锁存器会产生毛刺的现象,仿真得到的波形如下:
通过仿真的波形,可以确定:
1. 锁存器输入后经过一段时间稳定得到正确的输出结果;
2. 锁存器会产生毛刺。
因此,在FPGA设计中应该避免使用锁存器,抛开锁存器会消耗FPGA内部LUTR不说,最大的问题是会产生毛刺让时序很不确定,很易产生不确定的结果,不确定性在数字电路非0即1逻辑中是致命的。
3. SRAM结构与锁存器关系
SRAM的最小存储单元结构是由6T即6个MOS管组成,可以在wikipedia中查到,由于国内网站目前不能访问该网址,已将其转为PDF在文章末尾分享给大家:
直接看这6个MOS管,一脸懵逼,和SR锁存器能有什么关系,但是如果把它们拆解看:
其中,M5和M6是控制开关可以实现与门的功能,再和反相器一起实现与非门,最终实现SR锁存器,所以SRAM最小存储单元结构就是由SR锁存器来实现的,最终SRAM读写的实现如下图:
如上图,通过加上MOS管T7、T8和三态门G1、G2、G3就能实现SRAM的读写,R/W=1时,G3开,读取SR锁存器中的存储的值D;R/W=0时,G1和G2开,写入值到SR锁存器中。
4. 基于SRAM和Flash架构FPGA本质区别
之前有写一篇FPGA(Altera/Xilinx/Actel)如何估算分析功耗,里面对SRAM架构和FLASH架构的FPGA做过比较:
1. SRAM架构FPGA需要晶体管个数更多,故功耗会更高,掉电数据丢失,发展的工艺也更好,所以集成度更高;
2. Flash架构FPGA需要晶体管更少,故功耗会更低,掉电数据不丢失,但发展工艺并不好,所以集成度较低。
5. 总结
SR锁存器会和FPGA的毛刺和SRAM有关,那么D触发器是不是也和SR锁存器和建立时间和保持时间有关,先放一张D触发器图,下节再写D触发器的由来: