Verilog基础学习四

本文详细介绍了时序逻辑的基础知识,包括触发器与锁存器的类型和工作原理,如SR、JK、T、D触发器。接着,通过Verilog代码展示了如何实现D触发器及其各种变体,如带同步/异步复位和使能信号的D触发器。此外,还探讨了计数器的设计,如二进制、十进制计数器,以及12小时时钟的实现。文章总结时强调了时序逻辑的复杂性和理解难点。
摘要由CSDN通过智能技术生成

时序逻辑(一)



一、触发器与锁存器基础

1.什么是触发器?

能够记忆1位二进制信号的基本单元电路

特点:

  • 有两个能自行保持的状态,用来表示0和1;
  • 根据输入信号可以置成0或1

分类:

  • 按触发方式:电平、脉冲、边沿
  • 按逻辑功能:SR、JK、T、D

2.SR锁存器

两个与非门接成反馈,引出输入端用来置0,1
在这里插入图片描述
在这里插入图片描述
RD SD = 0 是正常锁存器的约束条件

总的来说,在正常情况下,就是RD为1时,不管Q是个啥,都会把它置为0并保存下来。SD为1时,不管Q是个啥,都会把它置为0并保存下来。
在这里插入图片描述
P.S:与非门的两个输入端是低有效

3.SR触发器

特性方程:
Q∗=S+R′Q
SR=0
在这里插入图片描述在这里插入图片描述

4.JK触发器

在这里插入图片描述

5.T触发器

T是一个翻转信号。如果为1,则翻转Q。

在这里插入图片描述

6.D触发器

D信号为0时,会把输出状态设为0;D信号为1时,会把输出状态设为1.

在这里插入图片描述

二、Verilog中实现触发器与锁存器

1.D触发器

D 触发器是一个电路,存储 1bit 数据,并定期地根据触发器的输入(d)更新这 1 bit 数据,更新通常发生在时钟上升沿(clk)。存储的数据会通过输出管脚(q)输出

  • 复位动作需要与clk同步才能完成!

在这里插入图片描述
D 触发器可以认为是一个触发器和一段最简单的组合逻辑块的组合。其中组合逻辑块仅仅是一段 wire。(q 直接输出了触发器的存储值)

module top_module (
    input clk,    // Clocks are used in sequential circuits
    input d,
    output reg q );//

    // Use a clocked always block
    //   copy d to q at every positive edge of clk
    //   Clocked always blocks should use non-blocking assignments
    always@(posedge clk) begin
        q <= d;
    end
endmodule

2.D触发器(带同步复位信号)

同步复位:当时钟上升沿到来时,如果同步复位端有效(本题中复位高电平有效,即 reset),那么任凭你触发器此前输出或者输入的是 0,是 1,输出一律变为 0。

8 个 D 触发器基础上,给触发器配上同步复位端口。

module top_module (
    input clk,
    input reset,            // Synchronous reset
    input [7:0] d,
    output [7:0] q
);
    always @(posedge clk) begin
        if(reset)
            q <= 8'b0;
        else
            q <= d ;
    end
endmodule

若复位后的值需设为1,这种信号成为置位信号

  q <= 8'h34;

3.D触发器(带异步复位信号)

异步复位:使用信号reset的上升(下降)沿事件,作为always的触发,这样,无论时钟clk处于何种状态,都会对输出q进行置位操作

同步与异步区别:
对于同步复位系统来说,当同步复位事件发生时,等到下一个时钟上升沿才会得到响应,响应的速度比较慢。
与之相对的异步复位的响应就很快,因为在异步复位有效的时刻,复位响应就会发生,好像戳破气球一般。

module top_module (
    input clk,
    input areset,   // active high asynchronous reset
    input [7:0] d,
    output [7:0] q
);
    always@(posedge clk or posedge areset) begin  //将异步复位加入 always 块的敏感列表当中 
        if(areset)
            q <= 8'b0;
        else
    	    q <= d;
    end
endmodule

4.D触发器(带使能ena信号)

本题中需要创建一个 16 路 D触发器。部分情况下,只需要多路触发器中的一部分触发器工作,此时可以通过 ena 使能端进行控制。使能端 ena 信号有效时,触发器在时钟上升沿工作。

byteena 使能信号以 byte 为单位管理 8 路触发器在时钟边沿触发与否。byteena [1] 作为 d[15:8] 高位字节的使能端,byteena [0] 则控制 d 的低位字节
resetn 为同步,低电平有效复位信号。
所有的触发器在时钟上升沿被触发。

module top_module (
    input clk,
    input resetn,
    input [1:0] byteena,
    input [15:0] d,
    output reg [15:0] q
);

    always @(posedge clk) begin
        if(~resetn)   //先判断复位信号,低电平有效 
           q <= 16'd0;
        else if(byteena[0] || byteena[1]) begin   //判断使能信号
            if(byteena[1])  
                q[15:8] <= d[15:8];           
            if(byteena[0])  
                q[7:0] <= d[7:0];
        end
    end
endmodule

5.D锁存器

在这里插入图片描述
同 D触发器相比,这个元件没有 clk 端口,取而代之的是 ena 端口,所以这是一个锁存器。
锁存器的特征在于,相较于 D触发器的触发事件发生于 clk 时钟的边沿,锁存器锁存的触发事件发生于使能端 ena电平

always@(*)begin
        if(ena)
            q<=d;
    end

6.MUX and DDF

在这里插入图片描述

实现 n-bit 移位寄存器

module top_module (
    input clk,
    input w, R, E
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值