lcytms
发表于 2016-12-25 22:53:18
1404
这边是它的数据输入端,触发器的D。
使能信号怎么做?
使能信号呢,可以这么做。
时钟这根线加载在主机的使能端,另外一根线通过反相器加载在从机的使能端,构成维持阻塞。
这个还是回到数电的复习。当使能信号,当时钟信号为高电平的时候,主机是穿透的,从机是阻塞的,保持的。
lcytms
发表于 2016-12-25 22:55:00
1405
当时钟从高到低跳变的瞬间,也就是它的负沿的瞬间,主机捕获了这个信号,保持住,从机穿透了。
所以说这个时候呢,无论是主从机的,哪一个处于导通状态,只有一个瞬间,信号被导通,所以说由此构成了沿敏感。
只有在下降沿的瞬间,这个数据才能被复制下来。
除了这个沿捕获之外,其它的任何情况下,都会被阻挡住,形成为阻塞。
下面呢,我们把它做出来。
这个部分呢,我们也是利用它的实例名,主机,从机。
中间信号我们加上,x2、x1。
反相器为U1。
lcytms
发表于 2016-12-25 22:56:36
1406
注意,我们这两天讨论的维持阻塞,仍然是电子的解决方案,还是站在老的EDA的解决方案上。
讨论了它做什么,如何去做。
现在我新建一个verilog,另存为d_type_flipflop.v。
这次是真的有时钟。
lcytms
发表于 2016-12-25 22:58:12
1407
有时钟,有d信号。
这个就是我们的D类型的。
只有一个q的输出。
不需要接reg,因为它是非行为的输出。
那么,我们就要用D锁存器来构建它。
lcytms
发表于 2016-12-25 22:59:25
本帖最后由 lcytms 于 2017-1-17 18:22 编辑
1408
做好装配的准备。
主机。
从机。
用门级原语做一个反相器。
中间信号声明出来,x1、x2。
X1是u1的输出。
1409
X1的输入接的是clk,端口的clk。
然后是主机。
主机的d接的是端口的d,主机的使能接的是端口的clk,主机的输出q接的是x2。
从机。
从机的d接的是x2,从机的使能接的是x1,从机的q是端口的q。
显然,D触发器我们要把它置为顶层。
芙蓉王
发表于 2016-12-26 14:47:04
:):)
lcytms
发表于 2017-1-17 18:24:09
1410
Ctrl+S、Ctrl+K。
好,现在它建模完了。
我们写它的验证。
新建verilog,另存为d_type_flipflop_tb.v。
这次不必从头写了,从D锁存器的testbench上复制过来。
修改代码。
lcytms
发表于 2017-1-17 18:25:45
1411
进行仿真设置。
lcytms
发表于 2017-1-17 18:27:36
1412
大家主要到,现在在输出端q已经没有毛刺了。
因为沿敏感的电路能够有效地屏蔽毛刺,避免冒险和竞争,这是数字电路统一讨论的。
并且我们看得到,是负沿触发。
时钟的负沿,捕获输入端的信号,并且保持到下一拍。
这是负沿采样。
正沿采样,我们也很容易做到,我们同学可以自己试一下。
这两个主从的使能端,正好是反向,把反相器往前面放即可。
这是电路的实现。
lcytms
发表于 2017-1-17 18:29:24
1413
好,现在我们来讨论一下行为。
直到现在,所有的时序逻辑,我们都是用结构化,用电路的方式来实现的,现在我们来看看行为的魅力。
如果用行为来写锁存器,该怎么写?
现在我来写一个D锁存器的行为。
把d_latch.v另存为d_latch_behaviour.v,并设置为顶层。修改代码。
端口去掉q_n。