精华内容
下载资源
问答
  • 同步D触发器时序原理

    2020-10-18 14:45:54
    为了避免同步RS触发器的输入信号同时为1,可以在S和R之间接一个“非门”,信号只从S端输入,并将S端改称为数据输入端D,如图15-8所示。这种单输入的触发器称为同步D触发器,也称D锁存器。
  • 触发器是由各种基础门电路单元组成,广泛应用于数字电路和计算机中。它具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。触发器具有两个稳定状态,即0...

    3352dc2a63cdcb4113e5ef258ecc84a7.gif

    电工之家:www.dgzj.com   QQ群:2179090

    关注电工之家官方微信公众号“电工之家”,收获更多经验知识。

    触发器是由各种基础门电路单元组成,广泛应用于数字电路和计算机中。它具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。

    触发器具有两个稳定状态,即0和1,在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。触发器有集成触发器和门电路组成的触发器二种。触发方式有电平触发和边沿触发二种。触发器应用很广,可用做数字信号的寄存,移位寄存,分频和波形发生器等例如RS触发器;它是将两个与非门或者或非门的G1 G2的输入、输出端相互交叉连接而成。它用逻辑图和逻辑符号表示,有效高电平、低电平

    触发器按逻辑功能分类它主要有以下四种:

    ①RS触发器:即在时钟脉冲作用下,根据输入信号R,S取值不同,凡具有置0,置1和保持功能的电路,都称为RS型时钟触发器,简称为RS触发器。

    ②JK触发器:即在时钟脉冲作用下,根据输入信号J,K取值的不同,凡具有保持,置0,置1,翻转功能的电路,都称为JK型时钟触发器,简称为JK触发器。

    ③D触发器:即在时钟脉冲作用下,凡具有置0,置1功能的电路,都叫做D型时钟触发器,简称为D触发器。

    ④T触发器:即在时钟脉冲作用下,根据输入信号T取值的不同,凡具有保持和翻转功能的电路,即当T=0时能保持状态不变,T=1时一定翻转的电路,都称为T型时钟触发器,简称为T触发器。

    下面就时基555集成块构成的单稳态触发器来述一下其简单工作原理。所谓单稳态触发器它只有一个稳定状态,一个暂稳态。它在电路外加脉冲信号的作用下,可以从一个稳态转换到另一个暂稳态状态。在电路中由RC延时充放电的作用,该暂稳态保持一段时间后又回到原来的初始状态,暂稳态维持时间由RC的阻值和电容量来决定。 3426508c057bf4d5da2c8c798d2b395f.png
    电路组成如上图所示,图中R、C为单稳态触发器的定时元件,它们的连接点Vc与定时器的阈值输入端(6脚)及输出端Vo'(7脚)相连。单稳态触发器输出脉冲宽度tpo=1.1RC。Ri Ci构成输入回路的微分环节,用以使输入信号Vi的负脉冲宽度tpi限制在允许的范围内,一般tpi>5RiCi,通过微分环节,可使Vi'的尖脉冲宽度小于单稳态触发器的输出脉冲宽度tpo。若是输入信号的负脉冲宽度tpi本来就小于tpo,则微分环节可忽略。定时器的复位输入端(4脚)接高电平,控制输入端Vm通过0.01uF接地,定时器输出端Vo(3脚)作为单稳态触发器的单稳信号输出端。工作原理;当输入Vi为高电平时,Ci相当于断开。输入Vi'由于Ri的存在而为高电平Vcc。这时,①若定时器原始状态为0,则集成块(7)输出导通接地,使电容C快速放电、Vc=0,即输入6脚的信号低于2/3电源电压Vcc,此时定时器维持0不变。②若定时器原始状态为1,则集成块(7)输出对地为断开状态,这时Vcc经R向C充电,使Vc电位升高,待Vc值高于2/3电源电压Vcc时,定时器翻转到0状态。综合上述可知,单稳态触发器正常工作时,输入端未加负脉冲,Ⅴi维持高电平,则输出的Vo一定为低电平。单稳态触发器的工作过程分为下面三个阶段来分析,图为其工作波形图:924958355e98f16a6a52fbdaf5dd69ba.png

    1、触发翻转阶段:输入负脉冲Vi到来时,下降沿经RiCi微分环节在Vi'端产生下跳负向尖脉冲,其值低于负向阀值(1/3Vcc)。由于稳态时Vc低于正向阀值(2/3Vcc),固定时器翻转为1,输出Vo为高电平,集电极输出对地断开,此时单稳态触发器进入暂稳状态。

    2、暂态维持阶段:由于集电极开路输出端(7)对地断开,Vcc通过R向C充电,Vc按指数规律上升并趋向于Vcc。从暂稳态开始到Vc值到达正向阀值(2/3Vcc)之前的这段时间就是暂态维持时间tpo 。

    3、返回恢复阶段:当C充电使Vc值高于正向阀值(2/3Vcc)时,由于Vi'端负向尖脉冲已消失 ,Vi'值高于负向阀值(1/3Vcc),定时器翻转为0,输出低电平,集电极输出端(7脚)对地导通,暂态阶段结束。C通过7脚放电,使Vc值低于正向阀值(2/3Vcc),使单稳态触发器恢复稳态。

    未完,请点击左下角“阅读原文”继续阅读

    展开全文
  • 双边沿触发器

    千次阅读 2019-05-30 18:22:03
    双边沿触发器在时钟的每个上升沿和下降沿都会触发。但是在FPGA中没有双边沿触发器,并且像always @(posedge clk or negedge clk)这样的描述方式并不合法。 建立如下一个类似双边沿触发器的的电路: Hint: 在...

    双边沿触发器在时钟的每个上升沿和下降沿都会触发。但是在FPGA中没有双边沿触发器,并且像always @(posedge clk or negedge clk)这样的描述方式并不合法。

    建立如下一个类似双边沿触发器的的电路:

    Hint:

    • 在FPGA中不能创造双边沿触发器,但是我们可以把上升沿触发器和下降沿触发器都创造出来。
    • 这个题是一个中等难度的电路设计题,但是只需要基础的Verilog语言知识。(这是一个电路设计题,而不是一个编码题。)在编码前手画一个电路草图可能会有帮助。

    https://hdlbits.01xz.net/wiki/Dualedge


    想要对时钟进行双边沿触发主要有三种方法。

    一种就是像楼上所说,使用电平敏感触发,能够实现时钟的双边沿触发,但是一般不推荐这种方法触发,这种方法虽然在逻辑上是可行的,但verilog终归不是C一样的高级语言,它的每段代码都需经过综合布线实现的,因此在用verilog实现算法的时候还需考虑代码书写风格的合理性,而对时钟信号使用电平触发,很有可能在某些情况下就不能满足时序。

    第二种就是就是将上升沿和下降沿分成两个always快来写,这样子写的缺点就是不能在两个always块中对同一个reg变量做操作,同时这样写总觉得会很蛋疼。

    第三种就是利用pll将时钟信号延迟或者滞后180°,分别对上升沿触发,或者干脆将时钟倍频,这样子就不需要考虑太多了。

    另外,对于频率不是很快的时钟信号或者是一些异步信号建议采用脉冲形式同步,也就是在一个足够快的时钟下(如50M),可以实时监测输入信号的电平,当两次相邻电平异或之后为1,就表示有上升沿或者下降沿(01表示有上升沿,10表示有下降沿),这样子的好处就是,你的所有模块都可以在同一个工作时钟下工作,而不会因为一些其他时钟信号或异步信号而将电路变成异步电路。

    (以上有些是参考网上资料,有些是我实际操作的经验,还望采纳)http://www.openedv.com/posts/list/55917.htm

     使用电平敏感触发方式和将时钟信号翻转或滞后180°,这两种方式都可以正确的实现电路功能,但是编译后会出现不满足时序的要求,可能是因为编译器将这两种方式都认为是组合逻辑电路。

    如上图所示,没有产生always过程块在时钟周期结束后才进行赋值的一个周期延时。因此我们把目光放在写两个always过程块这种方法上,一个上升沿触发,一个下降沿触发。

    笔者分别手画出了d在上升沿和下降沿产生的q1q2两个信号,在仔细观察后发现这两个信号和原信号d没有任何关系(其实是因为这里第一步就进入了错误思路)。通过观察手画的信号图,发现可以在时钟为正电平时将q1信号赋值给q,在时钟为负电平时,将q2赋值给q,这样就解决了如何将q1q2变为q的问题,也就是将一个信号通过时钟上升沿和下降沿分解后再还原成为原本的信号。跳过了双边沿触发,也满足了时序。

    module top_module (
        input clk,
        input d,
        output q
    );
        reg q1,q2;
        always@(posedge clk)
            q1 <= d;
        always@(negedge clk)
            q2 <= d ;
        
        always@(clk)
            if(clk)
                q <= q1;
       	else 
                q <= q2;
    
    endmodule

     上面的第三个always块也可以用组合逻辑来描述:assign q = clk ? q1:q2;

    上面的主要思路是使用别的方法跳过双边沿触发器这个模块,也就是将d信号包装成两个不同的信号,再将这两个信号还原成d信号。这种思想其实可以用一个很简单的的电路来表达。那就是异或“^”。

    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 d^p. 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;
        
        
    	// Can't synthesis this.
    	/*always @(posedge clk, negedge clk) begin
    		q <= d;
    	end*/
        
        
    endmodule
    

    正如上述代码所示,直接用异或的特性,d^n^n=d。把p和n当做中间量载体,改变了d信号但又很容易就可以还原,甚至p和n的初始值都没有设定,因为实际上都没有用到p和n的值。

    展开全文
  • D触发器74LS74组成的移位寄存器实验电路multisim源文件,multisim10及以上版本可以正常打开仿真,是教材上的电路,可以直接仿真,方便大家学习。
  • 管脚介绍 真值表 不会看的 会用就行
    • 管脚介绍
      在这里插入图片描述
    • 真值表
      在这里插入图片描述
    • 不会看的
      在这里插入图片描述
    • 会用就行
      在这里插入图片描述
    展开全文
  • 四位数据选择器与D触发器、移位寄存器原理详解及功能验证一、数据选择器1...工作原理四、D触发器功能验证1、Verilog实现简易D触发器2、步骤略解(详细步骤雷同数据选择器)3、逻辑分析4、功能验证五、移位寄存器1、基本...

    一、数据选择器

    1、原理详解

    • 什么是数据选择器?
      数据选择器根据给定的输入地址代码,从一组输入信号中选出指定的一个送至输出端的组合逻辑电路。有时候也叫做多路选择器或者多路调制器

    • 数据选择器基本定义
      在多路数据传输过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器。
      在这里插入图片描述

    • 逻辑功能
      数据选择器的逻辑功能是在地址选择信号控制下,从多路数据中选择一路数据作为输出信号。

    • 分类
      2选1,4选1、8选1和16选1等类型的数据选择器。

    2、工作方式

    结合上图,给A1A0一组信号 比如1 0 那么就相当于给了他一个2进制数字2 也就相当于选通了D2这个输入端这个时候 输出Y 输出的就是D2的信号D2是什么 Y就输出什么。

    控制选择的输出源
    A1A0Y
    00D0
    01D1
    10D2
    11D3

    二、四位数据选择器功能验证

    1、Verilog实现四位选择器

    用Verilog编写一个简单的四位选择器

    module multiplexer_s(
    
           input         clk      ,
           input         rst_n    ,
    
           input         din_a    ,
           input         din_b    ,
           input         din_c    ,
           input         din_d    ,
    
           input  [1:0]  sel      ,
    
           output        dout     
    );
        
        //信号定义
        reg          data_dout;
        
        always @(posedge clk or negedge rst_n) begin
            if(!rst_n)begin
              data_dout <= 2'b00;
            end
            else begin
              case(sel)
                  2'b00:  data_dout <= din_a ;
                  2'b01:  data_dout <= din_b ;
                  2'b10:  data_dout <= din_c ;
                  2'b11:  data_dout <= din_d ;
                  default:data_dout <= 2'b00 ;
              endcase
            end
        end
    
        assign dout = data_dout;
    
    
    endmodule
    

    顶层模块

    module multiplexer(
    
        input             clk    ,
        input             rst_n  ,
    
        output            dout
    );
    
        wire             din_a  ;
        wire             din_b  ;
        wire             din_c  ;
        wire             din_d  ;   
    
        wire   [1:0]     sel    ;
    
        //模块例化
        multiplexer_s    u_multiplexer
        (
           .din_a        (din_a    ) ,
           .din_b        (din_b    ) ,
           .din_c        (din_c    ) ,
           .din_d        (din_d    ) ,
           .sel          (sel      ) ,
           .dout         (dout     ) ,
           .rst_n        (rst_n    ) ,
           .clk          (clk      )
        );
        
    endmodule
    

    2、创建工程

    对于工程创建的详细步骤,可参考此篇文章:
    数码管实现秒表计数
    工程创建完成后,将四位数据选择器源码导入工程
    在这里插入图片描述
    将导入项目文件进行全编译
    在这里插入图片描述
    查看RTL电路图
    在这里插入图片描述

    3、更改系统内源和探针

    点击quartus右上角IP Catalog或者【Tools】→【IP Catalog】
    在这里插入图片描述
    更改ip
    在这里插入图片描述
    将小窗展开,点击OK
    在这里插入图片描述
    配置source和probes的值,然后点击generate HDl…
    在这里插入图片描述
    再点击generate
    在这里插入图片描述
    生成完成后,点击close
    在这里插入图片描述
    可以在prj文件夹下看到生成的issp文件
    在这里插入图片描述
    在文件目录下找到issp.v文件
    在这里插入图片描述
    打开文件,将此文件中的该部分例化到四位选择器中

    module issp (
    		input  wire [31:0] probe,  //  probes.probe
    		output wire [31:0] source  // sources.source
    	);
    

    例化后各部分代码
    ①multiplexer.v

    module multiplexer(
    
        input             clk    ,
        input             rst_n  ,
    
        output            dout
    );
    
        wire             din_a  ;
        wire             din_b  ;
        wire             din_c  ;
        wire             din_d  ;   
    
        wire   [1:0]     sel    ;
    
        //模块例化
        multiplexer_s    u_multiplexer
        (
           .din_a        (din_a    ) ,
           .din_b        (din_b    ) ,
           .din_c        (din_c    ) ,
           .din_d        (din_d    ) ,
           .sel          (sel      ) ,
           .dout         (dout     ) ,
           .rst_n        (rst_n    ) ,
           .clk          (clk      )
        );
        wire        [31:0]  probe   ;
    
        issp u_issp
        (
            .probe          (probe ),
            .source          ({sel,din_a,din_b,din_c,din_d})
        );
    endmodule
    

    将设置的issp实体加入工程文件中
    在这里插入图片描述
    对整个工程进行全编译
    在这里插入图片描述

    4、逻辑分析

    【Tools】→【Signal Tap Logic Analyzer】
    在这里插入图片描述
    连接到开发板,先进行烧录,确保驱动无异常
    在这里插入图片描述
    选择所使用的驱动以及下载文件,设置好采样时钟与深度
    在这里插入图片描述
    下载文件
    在这里插入图片描述
    设置时钟,点击Clock后面的三个小点,出现如示界面
    在这里插入图片描述
    选中Filter下拉框中的Design Entry(all names)。再点击list
    在这里插入图片描述
    再出现的界面中选择采样时钟
    在这里插入图片描述
    将.sof文件进行下载
    在这里插入图片描述
    选择【Tools】→【In_System Source and Probes Editor】
    在这里插入图片描述
    将.sof文件下载进去
    在这里插入图片描述
    出现如示界面,将source展开赋值,可以看到输出变化
    在这里插入图片描述
    点击运行图标,可看到【Signal Tap Logic Analyzer】中出现如下波形
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/c570b9f8dbab459db28de3b44260200c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSp5Lya5pm05bCx5Lya5pqX,size_20,color_FFFFFF,t_70,g_se,x_16
    点击红色方框图标,进行自往返分析
    在这里插入图片描述
    通过对source进行相应的赋值,可以观察到波形的变化。

    5、功能验证

    片选信号示意图
    在这里插入图片描述

    {sel,din_a,din_b,din_c,din_d}中{}方式是由高到低的,拼接不允许出现未指明位宽的变量。

    根据此段代码块,验证其逻辑功能:

     case(sel)
                  2'b00:  data_dout <= din_a ;
                  2'b01:  data_dout <= din_b ;
                  2'b10:  data_dout <= din_c ;
                  2'b11:  data_dout <= din_d ;
                  default:data_dout <= 1'b0  ;
              endcase
    

    当片选信号sel为00时,data_out输出din_a
    在这里插入图片描述
    当片选信号sel为01时,data_out输出din_b
    在这里插入图片描述
    当片选信号sel为10时,data_out输出din_c
    在这里插入图片描述
    当片选信号sel为11时,data_out输出din_d
    在这里插入图片描述

    三、D触发器

    1、基本概念

    • D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。
    • D触发器在时钟脉冲CP的前沿(正跳变0→1)发生翻转,触发器的次态取决于CP的脉冲上升沿到来之前D端的状态,即次态=D。因此,它具有置0、置1两种功能。由于在CP=1期间电路具有维持阻塞作用,所以在CP=1期间,D端的数据状态变化,不会影响触发器的输出状态。
      在这里插入图片描述

    2、工作原理

    SD 和RD 接至基本RS 触发器的输入端,分别是预置和清零端,低电平有效。当SD=0且RD=1时,不论输入端D为何种状态,都会使Q=1,Q=0,即触发器置1;当SD=1且RD=0时,触发器的状态为0,SD和RD通常又称为直接置1和置0端。

    工作流程

    • CP=0时,与非门G3和G4封锁,其输出Q3=Q4=1,触发器的状态不变。同时,由于Q3至Q5和Q4至Q6的反馈信号将这两个门打开,因此可接收输入信号D,Q5=D,Q6=Q5非=D非;
    • 当CP由0变1时触发器翻转。这时G3和G4打开,它们的输入Q3和Q4的状态由G5和G6的输出状态决定。Q3=Q5非=D非,Q4=Q6非=D。由基本RS触发器的逻辑功能可知,Q=Q3非=D;

    四、D触发器功能验证

    1、Verilog实现简易D触发器

    D触发器模块
    data_flip_flop.v

    module data_flip_flop(
    
        input               clk      ,//系统时钟
        input               rst_n    ,//复位信号
        input               en       ,//使能信号(cp)
        input               d        ,//D触发器输入       
         
        output              q        ,//输出q
        output              q_n       //输出非q
    );
        
    
        //信号定义
        reg            dout_q  ;//输出定义
    
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n)begin
              dout_q <= 0;
            end
            else if(en) begin
              dout_q <= d;
            end
            else begin
              dout_q <= 0;
            end
        end
    
        assign q   =  dout_q ;
        assign q_n = ~dout_q ;
    endmodule
    

    顶层模块
    data_flip_flop_top.v

    module data_flip_flop_top(
    
        input       clk    ,
        
        output      q      ,
        output      q_n
    );
    
       //信号定义
       wire         d     ;
       wire         en    ;
       wire         rst_n ;
       
    
       //模块例化
       data_flip_flop     u_data_flip_flop
       (
        .clk      ( clk  ),
        .rst_n    ( rst_n),
        .en       (  en  ), 
        .d        (   d  ),        
       
        .q        ( q    ),   
        .q_n      ( q_n  )  
       );
    endmodule
    

    查看有Verilog生成的RTL原理图
    在这里插入图片描述
    点击+展开,查看组成电路的结构
    在这里插入图片描述

    2、步骤略解(详细步骤雷同数据选择器)

    配置ip,改名并保存在ip(知识产权)目录下
    在这里插入图片描述
    更改系统内源与探针
    在这里插入图片描述
    将生成的issp文件添加到工程中
    在这里插入图片描述
    添加后如示
    在这里插入图片描述
    将此部分代码例化到顶层模块

    module issp (
    		input  wire [7:0] probe,  //  probes.probe
    		output wire [7:0] source  // sources.source
    	);
    

    例化后的顶层模块源码

    module data_flip_flop_top(
    
        input       clk    ,
        
        output      q      ,
        output      q_n
    );
    
       //信号定义
       wire         d     ;
       wire         en    ;
       wire         rst_n ;
    
       wire   [7:0] probe ;
       
    
       //模块例化
       data_flip_flop     u_data_flip_flop
       (
        .clk      ( clk  ),
        .rst_n    ( rst_n),
        .en       (  en  ), 
        .d        (   d  ),        
       
        .q        ( q    ),   
        .q_n      ( q_n  )  
       );
    
       issp  u_issp
       (
          	.source    ( {rst_n,en,d} ) ,
          	.probe     (   probe      ) 
       );
    endmodule
    

    3、逻辑分析

    出GIF动图,给大家看看步骤
    在这里插入图片描述
    双击界面空白,添加信号
    在这里插入图片描述
    出现红色则代表出错,所添加的为wire型信号,需要更改
    在这里插入图片描述
    鼠标右键单击【select all】,再次鼠标右键点击【delete】
    在这里插入图片描述
    再次双击空白,添加信号
    在这里插入图片描述
    添加信号如图所示
    在这里插入图片描述
    在内源探针编辑器中,将.sof文件下载进去
    在这里插入图片描述
    在【Tap】界面,按照图示箭头一次操作
    在这里插入图片描述
    最后出现如示界面
    在这里插入图片描述
    下面,我们通过赋值验证D触发器的功能

    4、功能验证

    信号示意图
    在这里插入图片描述
    结果如示
    在这里插入图片描述

    五、移位寄存器

    移位 寄存器可以用来寄存代码,还可以用来实现数据的串行—并行转换、数值的运算以及数据的处理等。

    1、基本概念

    • 移位寄存器(外文名:shift register)在数字电路中,是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。
    • 移位寄存器可分为一维和多维移位寄存器。多维移位寄存器的输入、输出的数据本身就是一些列位。
      在这里插入图片描述

    2、原理介绍

    四位移位寄存器的原理图如图所示。F 0、F 1、F 2、F 3是四个边沿触发的D触发器,每个触发器的输出端Q接到右边一个触发器的输入端D。因为从时钟信号CP的上升沿加到触发器上开始到输出端新状态稳定地建立起来有一段延迟时间,所以当时钟信号同时加到四个触发器上时,每个触发器接收的都是左边一个触发器中原来的数据(F 0接收的输入数据D 1)。寄存器中的数据依次右移一位。

    3、寄存器分类

    • 根据移位方向,常把它分成左移寄存器、右移寄存器和双向移位寄存器三种。
    • 根据移位数据的输入-输出方式,又可将它分为串行输入-串行输出、串行输入-并行输出、并行输入-串行输出和并行输入-并行输出四种电路结构。
    • 此外,有些移位寄存器还具有预置数功能,可以把数据并行地置入寄存器中。
    • 利用移位寄存器能进行数据运算、数据处理,实现数据的串行—并行互相转换,还可接成各种移位寄存器式计数器,如环形计数器、扭环形计数器等。

    六、移位寄存器功能验证

    1、Verilog实现移位寄存器

    shift_reg.v

    module shift_reg (
       
       input           clk     ,
       input           rst_n   ,
       input   [3:0]   din     ,  
       input           dsr     ,
       input           en      ,
       input   [1:0]   mode    ,
    
       output  [3:0]   dout    ,
       output          one_out 
    );
    
        //信号定义
        reg        [3:0]      dout_r    ;
        reg                   one_out_r ;
    
        //输出
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n)begin
              dout_r <= 0;
              one_out_r <= 0;
            end
            else if(en)begin
              case({mode,dsr})
                  3'b000:begin
                  dout_r <= dout_r;
                  one_out_r <= 0;
                  end
                  3'b001:begin
                  dout_r <= dout_r;
                  one_out_r <= 0;
                  end
                  3'b010:begin
                  dout_r <= {dsr,dout_r[3:1]};
                  one_out_r <= dout_r[0];
                  end
                  3'b011:begin
                  dout_r <= {dsr,dout_r[3:1]};
                  one_out_r <= dout_r[0];
                  end
                  3'b100:begin
                  dout_r <= {dout_r[2:0],dsr};
                  one_out_r <= dout_r[3];
                  end
                  3'b101:begin
                  dout_r <= {dout_r[2:0],dsr};
                  one_out_r <= dout_r[3];
                  end
                  3'b110:begin
                  dout_r <= din;
                  one_out_r <= 0;
                  end
                   3'b111:begin
                  dout_r <= din;
                  one_out_r <= 0;
                  end
                  default:begin
                  dout_r <= dout_r;
                  one_out_r <= 0;
                  end
                endcase
        end
    
        else begin
          dout_r <= 0;
          one_out_r <= 0;
        end
        end
        assign dout = dout_r;
        assign one_out = one_out_r;
        
    endmodule
    

    shift_reg_top.v

    module shift_reg_top (
       
       input clk,
       input rst_n,
    
       output [3:0] dout,
       output       one_out
    );
    
       //信号定义
       wire    en;
       wire  [3:0] din;
       wire        dsr;
       wire        mode;
    
       //模块例化
       shift_reg   u_shift_reg
       (
          .clk     (clk),
          .rst_n   (rst_n),
          .din     (din),
          .dsr     (dsr),
          .en      (en),
          .mode    (mode),
          .dout    (dout),
          .one_out (one_out)
       );
        
    endmodule
    

    查看RTL图
    在这里插入图片描述
    创建issp,并对内源以及探针进行例化

    module shift_reg_top (
       
       input clk,
       input rst_n,
    
       output [3:0] dout,
       output       one_out
    );
    
       //信号定义
       wire    en;
       wire  [3:0] din;
       wire        dsr;
       wire        mode;
    
       wire [12:0] probe;
    
       //模块例化
       shift_reg   u_shift_reg
       (
          .clk     (clk),
          .rst_n   (rst_n),
          .din     (din),
          .dsr     (dsr),
          .en      (en),
          .mode    (mode),
          .dout    (dout),
          .one_out (one_out)
       );
    
       issp u_issp
       (
           .source({en,din,dsr,mode}),
           .probe(probe)
       )
        
    endmodule
    

    2、功能验证


    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 主从D触发器的实现及建立保持时间详解 1. 稳态电路 稳态电路原理图如下图所示,可以用来构成存储单元(锁存器,触发器),SRAM等。 2. RS锁存器 电路结构及真值表如下图所示: 3. 带时钟信号的D锁存器 4. 基于...
  • 触发器详解——(一)D触发器

    万次阅读 多人点赞 2020-02-16 08:49:30
    触发器是时序逻辑电路的基本单元,用来存储1位2进制信息,具有记忆和...触发器的种类很多,由D触发器,J-K触发器,T触发器等。并且根据运用场景的不同,触发器还会有置位,复位,使能和选择等功能。 1、D触发器 ...
  • 2、熟悉集成的D触发器、JK触发器的功能; 3、初步应用D触发器和JK触发器实现简单功能电路。 二、实验内容及步骤 (一)构建一个由与非门构成的基本RS触发器,如图1所示。用该电路进行仿真: 1、在Rd和Sd端分别加入...
  • 1.2 基本RS触发器原理

    千次阅读 2020-10-23 16:35:34
    以下几幅图解释了触发器的4种工作原理。 当SD和RD都为0时,输出均为1,破坏了输出的互补关系。 当SD和RD从0变为1时,从Q或者~Q入手分析得到的结果不同,依赖于Q和 ~Q谁先反馈回去。基于以上两点,00的组合不...
  • 1.三态门 下面是程序、等效图和仿真结果。 上图为三态门的verilog程序;可以看出有一个变量是inout格式; 同时通过赋值 条件语句对dio赋值; 上图就是该三态门的...2.D触发器 下面三张分别为程序、等效图...
  • 在做HDLBits发现有一道双边沿触发器的题目,如下: You’re familiar with flip-flops that are triggered on the positive edge of the clock, or negative edge of the clock. A dual-edge triggered flip-flop ...
  • 1.HDB3编码解码原理 HDB3码:三阶高密度极性码。 HDB3码与二进制序列的关系: (1)二进制信号序列中的“0”码在HDB3码中仍编为“0”码,二进制信号中“1”码,在HDB3码中应交替地成+1和-1码,但序列中出现四个连...
  • 真的是书到用时方恨少!几个月前,毕业的时候大把的书被按斤卖掉,现在想找...工作原理: S‘=0,R’=1:无论bai触发器du原来处于何种状态,由于S=0,则Q=1,Q非=0,触发器处于“1”态(或称置zhi位状态)。触发器的状
  • 边沿触发器 || D触发器 || JK触发器 || 逻辑功能转换 || 脉冲工作特性 || 重难点 || 数电1.触发器基础前面介绍了门控锁存器。对于门控锁存器,在控制信号C有效期间,输入信号的任何变化都将直接引起锁存器输出状态的...
  • 常用的触发器有D触发器和J—K触发器。 3.3 编码器和译码器 能够把数字、字母变换成二进制数码的电路称为编码器。反过来能把二进制数码还原成数字、字母的电路就称为译码器。 3.4 寄存器 能够把二进制数码存贮起来的...
  • 实验仪器Multisim电路仿真逻辑分析仪函数发生器单刀掷开关74LS73 J-K触发器 3片 74LS175 四D触发器 1片74LS160 十进制计数器 1片74LS08 二输入端与门 1片 74LS00 二输入端与非门 2片74LS04 二输入端或非门 1片...
  • 稳态控制电路的工作原理如图。这里举一个多地控制开关的例子,可供参考。
  • D触发器、D上升沿触发器、T触发器

    万次阅读 2018-03-25 13:13:16
    1,D触发器,安装一个控制器(比喻为仓库管理员),只有当仓库管理员打开门时,D(data)才能进去。2,D上升沿触发器,将D触发器串联,只有当仓库管理员打开门的一瞬间,D才能进去。3,T触发器,将D上升沿触发器的下Q...
  • 目录 前言 硬件语言描述 测试文件 仿真图 综合工具综合后的原理图 综合介绍D触发器 ...8位的D触发器 ...D触发器虽然基础,但很重要,扎实地掌握对于硬件电路学习者必不可少,传统地认识D触发...
  • 时序逻辑电路的特点以及与组合电路的区别 基本稳态电路 用或非门构成的SR锁存器 其实就是讲稳态电路的两个非门都换成或非门 用与非门构成的SR锁存器 ...
  • 此博客为个人博客,不涉及商业用途,仅提供学习参考,内容均来自个人...verilog不支持同时触发上边沿和下边沿,因为FPGA中只有单边沿触发器,没有双边沿触发器这种器件。 所以,posedge clk or negedge clk是无法综合
  • 目的是实现一个带双边沿检测的触发器。我们知道,FPGA上是没有带双边沿检测的触发器的,即不存在这样的写法: always @(posedge clk or negedge clk) 哪怕写了,没有这样的资源也实现不了,无法综合。那么我们怎么...
  • 2009-02-25 边沿D 触发器: 负跳沿触发的主从触发器工作时,必须在正跳沿前加入输入信号。...边沿D触发器也称为维持-阻塞边沿D触发器。 电路结构: 该触发器由6个与非门组成,其中G1和G2构成基本R
  • 计算机组成原理

    万次阅读 多人点赞 2019-06-02 14:13:55
    计算机组成原理 1.第一台电子计算机何时何地诞生?英文全称? 1946年2月14日 美国宾夕法尼亚大学 ENIAC:电子数字积分计算机 Electronic(电子的) Numerical(数字的) Integrator(综合者) And Calculator...
  •  用D触发器和中规模集成电路芯片74153(4选1数据选择器)实现电路原理图如下示:  本例设计的核心是根据题目要求绘制出状态表, 读者应对此部分加以推敲.  在完成本例的设计后, 我们可以直观地理解寄存器的...
  • 数电之SR锁存器与D触发器(转载)

    千次阅读 2019-08-29 14:25:34
    来聊聊锁存器跟触发器吧,下面是这次博文要介绍的主要内容: ·稳态器件 ·锁存器常见结构 ·锁存器的应用 ·触发器 ·触发器的建立时间和保持时间 1、稳态器件 稳态器件是指稳定状态有两种,一种是0,一种是1...
  • 0x00 触发器概述 组合逻辑电路:当前的输出只和当前的输入有关,只要知道当前的输出和输入的对应表(真值表),就可以写出逻辑函数表达式,进而将电路设计出来 时序逻辑电路: 输出不仅和当前的输入有关,还和...
  • D触发器

    千次阅读 2010-10-27 21:37:00
    D触发器简介   边沿D 触发器 电平触发的主从触发器工作时,必须在正跳沿前加入输入信号。如果在CP 高电平期间输入端出现干扰信号,那么就有可能使触发器的状态出错。而边沿触发器允许在CP 触发沿来到前一...
  • D触发器、同步与异步复位、脉冲边沿检测 HDLBits链接 D触发器 定义: D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,触发器具有两个稳定状态,即"0"和"1",在一定的外界信号作用下,可以从一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,318
精华内容 2,927
关键字:

双d触发器工作原理