lcytms
发表于 2016-12-25 22:12:57
1337
这时候是一个交叉耦合的稳态,就像我们上午所说的,置于一个凹槽之中的一个球,这个时候这个稳态是保持的。
任何轻微的抖动都会导致这种交叉耦合的反馈,使它回到原来的稳态。
1338
它的输入为全1的情况下,只有触发能量足够大,才能使这种交叉耦合发生翻转。
也就说11的情况是保持,00的情况是禁止。
现在我们也对他建模,分配命名为U1、U2。
用门级原语的形式来做。
现在是RS锁存器,但是是由与非门构成的。
将原来的rs_latch.v另存为rs_latch_nand.v,修改模块名字,并将它设为顶层。
在层次这棵树上可以找到它。
lcytms
发表于 2016-12-25 22:14:21
1339
修改端口,将原来的正逻辑改为负逻辑。
用与非门的原语来做。
做它的连线。
这是构成了交叉耦合的,由与非门构成的RS锁存器。
lcytms
发表于 2016-12-25 22:16:49
1340
Ctrl+S、Ctrl+K。写它的验证。
新建rs_latch_nand_tb.v。
写时标。
1341
实例化。
装配上。
lcytms
发表于 2016-12-25 22:18:12
1342
写它的激励。
写forever。
依次set、保持、reset、保持。
写停机。
lcytms
发表于 2016-12-25 22:19:47
1343
做仿真设置。
RS锁存器,由与非门构成的。
分析和综合。
lcytms
发表于 2016-12-25 22:22:26
1344
查看仿真结果。
现在我们即便是做的是与非门,仍然讨论的是how to do,如何去实现它,用电路逻辑的方式。
现在仍然没有上升到行为。
在这一拍做set,S_n为真值,所以说输出的是1状态。
这一拍,输入撤销了,保持,两个都是假值,但是这个1状态得到记忆,能够维持下来。
现在这一拍,是做一个reset,r_n为真值,低电平的负逻辑,所以说输出为0状态。
在这一拍保持了。
lcytms
发表于 2016-12-25 22:27:08
1345
这个呢就是RS锁存器。
RS锁存器仍然使用电路结构的方式来实现。
下面我们进一步地把这个RS锁存器演变为,进化为D锁存器。
RS锁存器它是靠两个端口,数字电路告诉我们,通过set和reset的端口来进行设置。
但是呢,这个电路工作的时候并不是很方便。
通常呢,我们会把这个RS锁存器,用称之为D类型的锁存器来替代。
只用一个数据位,一个比特位,来做它的双稳态的电路的驱动。
1346
那么这个时候怎么做呢?
实质上还是这张图,只不过在这张图前级再加一个与非门。
这边也加上一个与非门。
这两个与非门呢,用一个数据线来控制,这根线呢,就称为D线,或者是data线,数据线。
数据线的一头连接到s_n。
数据线的另外一头用反相器取反,连接到reset的端口上。
1347
剩下的两个端口连接到一起,做使能线。
当使能线为真值的时候,使能为1,D为1的时候,1跟1相与为1,1取反为0。
这边反相器之后为0,0跟1相与为0,0取反为1。
1348
这是负逻辑嘛,S_n为真值,所以它输出的是1。
就好像1从D输入端,穿透到了Q输出端。
为什么我们讲穿透呢?
我们来看,如果D输入端不是1,而是0。
0跟任何数相与为0,取反后为1。
lcytms
发表于 2016-12-25 22:28:41
1349
反相器后为1,1跟1相与为1,取反为0。
Reset为真值,输出是0状态。
我们这样一分析,就可以看得到,在使能信号为1的时候,输入为1,输出为1,输入为0,输出为0。
这就好比这个D穿透了这个锁存器,在使能信号为真值的时候。
当使能信号为假值的时候,无论数据是什么,我们写上X。
0与任何数相与为0,取反为1。
lcytms
发表于 2016-12-25 22:31:44
1350
两个1是什么?
保持。
它会是一个稳态,保持之前的那个状态。
也就是说,当使能信号为0的时候,输出状态可以保持。
这一点很有意思,当使能信号从高到低跳变的瞬间,我们知道,当使能信号为高的时候,是穿透的,输入是什么,输出是什么。
而使能信号为0的时候,它保持住,也就是说采样点。
它是沿采样,就是当使能信号从高到低跳变的瞬间,把D的这个数据捕获到双稳态。
就一直保持住,一直保持到下一次。
这个呢,我们也把它做出来。
lcytms
发表于 2016-12-25 22:33:29
1351
我们在实现的过程中,仍然是用结构化来实现。
仍然讨论了how to do。
我们给它分配实例名,U1、U2、U3、U4、U5,四个与非门,一个反相器。
反相器后面的中间信号为D_n信号,还有S_n、R_n。
现在我们来做这段建模。
新建一个verilog,另存为d_latch.v。