-
2021-04-19 20:08:30
1.管脚图
2.异步复位library ieee; use ieee.std_logic_1164.all; entity dffyibu is port(d,clk,reset : in std_logic; q,qb : out std_logic); end dffyibu; architecture behave of dffyibu is begin process(clk,reset) begin if(reset = '0')then q <= '0'; qb <= '1'; elsif(clk'event and clk = '1') then q <= d; qb <= not d; end if; end process; end behave;
3.同步复位
library ieee; use ieee.std_logic_1164.all; entity dfftongbu is port(d,clk,reset : in std_logic; q,qb : out std_logic); end dfftongbu; architecture behave of dfftongbu is begin process(clk,reset) begin if(clk'event and clk = '1') then if(reset = '0') then q <= '0'; qb <= '1'; else q <= d; qb <= not d; end if; end if; end process; end behave;
更多相关内容 -
74hc74双上升沿D触发器(有预置和清除端子)英文资料.pdf
2022-05-09 21:09:5574hc74双上升沿D触发器(有预置和清除端子)英文资料,原版说明书 -
计算机系统-电路设计07-上升沿D触发器的内部电路实现/移位寄存器/串行接口/并行接口
2020-06-28 17:35:21Q都保持原值不变 文章至此一直讲述的都是D触发器,接下来阐述另外以一种触发器(图4),叫做上升沿D触发器 先让X4=0时,X5=1,所以X2=X1,此时X3不会因为X2的变化而变化 再让X4=1时,X5=0,所以X2的值停留在上次,X4...D是英文Data的意思
之前的文章介绍了RS触发器的内部电路实现,该电路有个缺点,就是需要用R和S两个控制端输入,才能控制Q端的输出,为了减少复杂度,D触发器诞生了,D触发器通过一个输入端,控制一个输出端
回顾一下RS触发器特性
要使Q = 0,S=0,并且R=1;
要使Q = 1,S=1,并且R=0可以发现R和S可以使用非门电路连接,那么该设想的电路图如下,该电路的确能达到上述公式的要求,但是触发器的意义也随之消失了,触发器原本的意义是:S第一次=1之后,Q=1,之后无论S为何值,只要R不=1,Q就应该一直为1,但是现在D=1,Q就=1,而D=0,Q就=0,那我要这触发器有何意义??直接干脆弄一条直线不就可以了吗,所以应该对图1继续改造
如图2所示,增加一个CP位,当CP=0的时候,无论D为何值,S和R都=0,所以Q的值保持不变,之前是什么,就是什么当CP=1时,此时让D=1,则Q=1,当Q=1之后,将CP=0,此时,无论D为何值,Q都=1
如果想让Q=0,则将CP=1,然后让D=0,此时,Q=0,然后再讲CP=0,之后无论D为何值,Q都=0
也就是说,要想改变Q的值,首先将CP=1才可以
D触发器符号如下,图3
结论:
CP=1:D=0时Q=0,D=1时Q=1
CP=0:无论D=0还是1,Q都保持原值不变文章至此一直讲述的都是D触发器,接下来阐述另外以一种触发器(图4),叫做上升沿D触发器
先让X4=0时,X5=1,所以X2=X1,此时X3不会因为X2的变化而变化
再让X4=1时,X5=0,所以X2的值停留在上次,X4=1导致X3=X2现在一切重来,我们断电,然后重新接通
先让X4=1时,X5=0,X2不会因为X1变化而变化,但是X3=X2
再让X4=0时,X5=1,此时X2=X1,但是X3不会有任何变化总结:
(1)X4由0变1之后,X3会取X2在X4=0时候的值
(2)X4由1变0之后,X3没什么改变
因为结论中的(1),所以图4的触发器叫做上升沿触D触发器
上升沿D触发器电路图简化如下
结论:当CP从0变1之后,Q的值为CP=0时候的D的值移位寄存器
接下来要说的是计算机中非常重要的一个内容:串行接口现在将数据U盘中的一个字节,值为1100 1101,通过USB口传送到电脑中,
那么串行接口的方式是先将每个bit位按照顺序,依次,的放到位移寄存器中,然后CPU再从位移寄存器,通过总线,一次性将8个位的bit,都取走通过上述可知:
U盘->位移寄存器,这个过程是串行过程
位移寄存器->CPU,这个过程是并行过程一个位移寄存器的内部电路实现如下,由多个D触发器构成
下面图7中是电路初始的样子,其中绿色圆圈中的初始值是0,然后会将字节1100 1101这个值的每个bit位,从右向左依次往绿色圆圈中放
字节剩余:1100 1101
下面图8是将最右侧的一个1放到绿色圆圈处
字节剩余:1100 110
当按下Vcc旁边的开关键,则移位寄存器中的值如图9,之后开关弹起
字节剩余:1100 11
当再次按下Vcc旁边的开关键,则移位寄存器中的值如图10
字节剩余:1100 1
根据上面的原理依次类推,最终一个字节将按照如下排列
字节剩余:没有剩余
上述的这个过程就是串行过程,然后如果谁用位移寄存器中的值,则谁就将8个bit,一次性取走,如图12这样
注意:为了方便说明,Vcc旁边是个开关,实际中Vcc旁边那个应该是个振荡器 -
VHDL 上升沿触发的D触发器
2009-06-03 13:52:12VHDL 上升沿触发的D触发器,使用VHDL语言 -
双边沿D触发器
2021-04-02 14:46:04问题 遇到一个特别有意思的问题,链接: hdlbits.,其中模块描述如下: module top_module ( ...难道always语句同时在上升沿和下降沿捕捉信号d? verilog module top_module ( input clk, input d, ou问题
遇到一个特别有意思的问题,链接: hdlbits.,其中模块描述如下:
module top_module ( input clk, input d, output q );
要求根据d信号的输入,输出q,但是d信号是在clk信号的双边沿变化,而q需要偏移d的半个周期,并跟随d的值变化。
解决1?
难道always语句同时在上升沿和下降沿捕捉信号d?
verilog
module top_module ( input clk, input d, output q ); reg q_reg; always@(posedge clk,negedge clk)begin q_reg<=d; end assign q= q_reg; endmodule
好家伙直接综合不了。
ERROR: [Synth 8-91] ambiguous clock in event control。//事件控制表达式不明确
意味着always语句是无法同时将上升沿和下降沿设置成敏感延,那要是设置电平敏感呢?,在d高电平时,就输出q高电平,d低电平就输出q低电平。
解决2?
verilog
module top_module ( input clk, input d, output q ); reg q_reg; always@(clk)begin q_reg = d; end assign q= q_reg; endmodule
直接综合成q直接连接d,只是vivado插入了IBUF,OBUF,虽然q确实是随着d变化的,但是它们之间的相位根本无法控制。也就无法完成寄存器用来稳定数据的功能。
rtl
解决3?
verilog
换个思路,虽然always语句无法同时设置两种敏感事件,那要是用一个always对上升沿敏感,一个always对下降沿敏感,并利用clk的电平变化,clk高电平输出always对上升沿敏感捕获的值,clk低电平输出always对下降沿敏感捕获的值,这样交替就可以输出双边沿变化d的信号。
module top_module ( input clk, input d, output q ); reg q1,q2,q_reg; assign q = q_reg; always@(posedge clk)begin q1<=d; end always@(negedge clk)begin q2<=d; end always@(clk)begin if(clk) q_reg = q1; else q_reg = q2; end endmodule
rtl
sim
module tb( ); reg clk; reg switch; reg d1,d2; initial begin clk = 0; switch = 0; d1 = 0; d2 = 0; #1 switch = 1; end always #10 clk = ~clk; wire q; wire d,Q; always @(posedge clk) d1<= $random; always @(negedge clk) d2<= $random; ODDR #( .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1 .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" ) orrt_test ( .Q(Q), // 1-bit DDR output .C(clk), // 1-bit clock input .CE(1'b1), // 1-bit clock enable input .D1(d1), // 1-bit data input (positive edge) .D2(d2), // 1-bit data input (negative edge) .R(1'b0), // 1-bit reset .S(1'b0) // 1-bit set ); assign d = switch?Q:1'b0; top_module test( .clk(clk), .d(d), .q(q) ); endmodule
增加36行的原因,是因为在vivado 仿真的时候,ODDR原语输出Q信号有100ps的不定态,若不加上会导致解法四的仿真top_module输出q信号是x。
36: assign d = switch?Q:1'b0;
其中仿真d信号利用 ODDR原语在clk上下沿输出,可以看到模块输出的q信号确实是寄存了d信号,但是延迟了1个半周期。并不完美切合题目。
解法4
verilog
官方的答案
module top_module( input clk, input d, output q); reg p, n; // A positive-edge triggered flip-flop always @(posedge clk) p <= d ^ n; // A negative-edge triggered flip-flop always @(negedge clk) n <= d ^ p; // Why does this work? // After posedge clk, p changes to d^n. Thus q = (p^n) = (d^n^n) = d. // After negedge clk, n changes to p^n. Thus q = (p^n) = (p^d^p) = d. // At each (positive or negative) clock edge, p and n FFs alternately // load a value that will cancel out the other and cause the new value of d to remain. assign q = p ^ n; endmodule
其中利用
- 异或运算可以随意调换异或项位置并且保持运算后结果不变。
p ⊕ d ⊕ p = d ⊕ p ⊕ p p\oplus d\oplus p = d\oplus p\oplus p p⊕d⊕p=d⊕p⊕p
- 0和任意项异或,依然保持任意项的原值。
0 ⊕ 1 = 1 0 ⊕ 0 = 0 \begin{aligned} 0\oplus1&=1\\ 0\oplus0&=0 \end{aligned} 0⊕10⊕0=1=0
正如它所注释的,在clk上升沿
q = ( p ⊕ n ) = ( d ⊕ n ⊕ n ) = d q = (p\oplus n) = (d\oplus n\oplus n) = d q=(p⊕n)=(d⊕n⊕n)=d
在clk下降沿
q = ( p ⊕ n ) = ( p ⊕ d ⊕ p ) = ( d ⊕ p ⊕ p ) = d q = (p\oplus n) = (p\oplus d\oplus p) =(d\oplus p\oplus p)= d q=(p⊕n)=(p⊕d⊕p)=(d⊕p⊕p)=drtl
因此无论何时,q将始终跟随d信号的值,并延迟相对于d信号半个周期。
sim
由于p,n寄存器未赋初值,同样会导致在vivado里面仿真不了,这和上一个不一样,这里n是x,则p<=d^n也将是x,最终的输出也将是x。故增加一个赋初值的语句。
module top_module ( input rst_n, input clk, input d, output q ); reg p ; reg n ; initial begin p = 0; n = 0; end always @(posedge clk) p <= d ^ n; always @(negedge clk) n <= d ^ p; assign q = p ^ n; endmodule
仿真代码和解法3的一致。
可以看到模块输出的q信号不但寄存了d信号,并且延迟了半个周期,满足题目要求。
-
用proteus实现上升沿D触发器做寄存器
2017-10-21 00:27:46又R-S触发器可以做成D触发器, 由两个D触发器可以做成上升沿D触发器, 由上升沿D触发器可以做成1个bit的寄存器, 来看看: 我们看下输入信号D和输出信号Q, 要把D的值保存到Q, 怎么办呢? 从图可以看出, ...又R-S触发器可以做成D触发器, 由两个D触发器可以做成上升沿D触发器, 由上升沿D触发器可以做成1个bit的寄存器, 来看看:
我们看下输入信号D和输出信号Q, 要把D的值保存到Q, 怎么办呢? 从图可以看出, CLK信号必须从低电平变成高电平才可, 这就是上升沿触发器, 实现了1bit寄存器的功能。
-
D触发器、D上升沿触发器、T触发器
2018-03-25 13:13:162,D上升沿触发器,将D触发器串联,只有当仓库管理员打开门的一瞬间,D才能进去。3,T触发器,将D上升沿触发器的下Q与D串联,形成首位相连。则每次CP触发上升沿,上Q与下Q会1和0切换。可理解为不断递增1。... -
元器件应用中的触发器的相互转换
2020-11-05 13:08:34基本触发器之间是可以互相转换的,JK触发器和D触发器是两种最常用的触发器,别的触发器可以通过这两种触发器转化得来,它们之间也可相互转化。 JK触发器具有两个输入控制端,它转化为别的触发器十分方便。 ... -
CC4013 双上升沿D触发器
2010-02-10 14:29:37CC4013 双上升沿D触发器,是较常用的触发器,这里推荐给大家一起分享。 -
六.用场效应管设计D触发器(高电平触发)(上升沿触发)(层次模块搭建)
2022-02-07 20:52:47这篇文章将用场效应管设计一个D触发器(全电路只用到PMOS和NMOS) 目录 D触发器: ... -
双边沿D触发器(Dual edge D flip flop)
2020-07-24 15:43:59在FPGA中不支持 always @(posedge clk or negedge clk) is not accepted as a legal sensitivity list.想要实现双边沿触发其实很简单,只要两个always块就行always @(posedge clk)和always @(negedge clk) -
JK触发器及D触发器构成计数型触发器
2019-01-14 18:17:29基于Multisim14,绘制的JK触发器及D触发器构成计数型触发器仿真. -
D触发器理解
2021-02-03 16:14:04D触发器在FPGA里用得很多,但我经常无法理解D触发器为什么能对数据延迟一个时钟周期(打一拍)。下面从信号处理的角度来谈一下我的理解。如发现理解有误,烦请留言指正。 D触发器形如: `timescale 1ns/1ps... -
educoder锁存器和触发器设计之主从D触发器设计+门控D锁存器设计
2021-10-01 14:15:17为了避免出现空翻,可以把状态变化时机限定在时钟信号的上升沿或者下降沿,这种类型的器件称为触发器(Trigger/Flipflop)。 下降沿触发的主从D触发器原理图(之一)如下: 其特征方程如下: Q(t+1) = D Clk下降沿... -
Quartus II三种方式实现D触发器
2022-03-15 18:44:03目录一、D触发器原理二、D触发器的设计三、调用D触发器并仿真四、用Verilog语言实现D触发器五、总结六、参考链接 一、D触发器原理 D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序... -
使用 D 触发器的 7 位计数器:使用 D 触发器的 7 位计数器设计-matlab开发
2021-05-30 06:55:24使用 D 触发器的 7 位计数器设计 -
触发器总结(D、T、JK)(高电平触发上升沿触发)
2022-01-20 19:22:04同步上升沿触发的D触发器 异步上升沿触发的D触发器 JK触发器 高电平触发的JK触发器 异步高电平触发的JK触发器 同步上升沿触发的JK触发器 同步下降沿触发的JK触发器 异步上升沿触发的JK触发器 T触发器 同步... -
含有上升沿触发的D触发器
2010-05-04 12:02:36含有上升沿触发的D触发器含有上升沿触发的D触发器含有上升沿触发的D触发器含有上升沿触发的D触发器 -
主从D触发器的电路结构和工作原理
2022-03-23 14:30:01默认D触发器里面数据是0,假如A、B两个数据依次从D端输入,逻辑如下: 第一个时钟 上升沿之前:主锁存器输入D端数据A,从锁存器锁存前一数据0; 上升沿之后:主锁存器锁存D端数据A,从锁存器输出主锁存器中数据A。 ... -
VHDL——D触发器
2021-04-10 15:40:061.端口 2.VHDL语言 ... clk,d:in std_logic; q:out std_logic ); end dff1; architecture behavior of dff1 is signal q1:std_logic; --引进内部节点信号 begin process(clk) --进程语句以及 -
EDA实验:各类D触发器
2021-11-16 09:18:451,基本D触发器 源程序: module dff_20211103(clk,d,q1); //基本D触发器 input clk,d ; output reg q1 ; always @(posedge clk) begin q1<=d; //基本D触发器 end endmodule 激励文件: module smi_dff_... -
为什么单边沿D触发器在双边沿都会触发?有地方错了 但是没解释
2021-04-17 08:56:37用的触发器是SN74LVC1G79DCKR...实际使用是却发现CLK下降沿时Q也会输出D的状态,如下图(黄色CLK,红色D,蓝色Q): 手册如下:SN74LVC1G79D.pdf(431.28 KB ) https://bbs.elecfans.com/jishu_1814976_1_1.html ... -
D触发器、波形、代码(转)
2019-05-20 09:18:00在学习verilog之前,我们先学习一下D触发器以及它的代码。 FPGA的设计基础是数字电路,因此很多同学会认为我们要先学好数字电路之后,才学习FPGA。但是,数字电路教材的内容很多.例如:JK触发器、RS触发器、真值表... -
为什么D触发器需要建立时间与保持时间
2021-05-17 10:20:22为什么D触发器需要建立时间与保持时间 定义 建立时间:时钟有效沿到来之前的某段时间内,数据必须稳定,这段时间称为建立时间,用Tsetup或者Tsu表示。 保持时间:时钟有效沿到来之后的某段时间内,数据必须稳定,这... -
时序逻辑电路,D触发器,JK触发器构成的异步加法器,同步加法器,异步减法器,Multisim仿真电路
2021-05-22 20:39:04时序逻辑电路,D触发器,JK触发器构成的异步加法器,同步加法器,异步减法器。Multisim仿真电路,里面包含三个电路。 -
D触发器
2017-02-05 17:29:381. 一个基本的上升沿D触发器 根据上面的电路符号和功能表不难看出,一个基本的D 触发器的工作原理为:当时钟信号的上升沿到来时,输入端口D 的数据将传递给输出端口Q 和输出端口Q。在此,输出端口Q 和输出... -
用场效应管搭建D触发器 用D触发器制作13进制计数器
2022-01-16 12:50:29用场效应管搭建D触发器 用D触发器制作13进制计数器 层次模型层次带标题 同步高电平D触发器 异步D触发器 同步上升沿D触发器 异步上升沿D触发器的制作 -
如何理解D触发器延迟一拍
2019-07-02 17:04:52D触发器在FPGA里用得很多,但我经常无法理解D触发器为什么能对数据延迟一个时钟周期(打一拍)。下面从信号处理的角度来谈一下我的理解。如发现理解有误,烦请留言指正。 D触发器形如: `timescale 1ns/1ps ...