FPGA数字IC的Verilog刷题解析基础版02——T触发器(异步复位和同步复位)

1. 题目

  用verilog实现两个串联的异步低电平复位的T触发器的逻辑。这个题目的重点是要关注异步低电平复位

不得不读的 FPGA 设计白皮书——Xilinx FPGA 复位策略白皮书翻译(WP272)【FPGA探索者】

联发科数字IC简答题(9)——异步复位同步释放问题

2. 解析

2.1 T触发器

边沿T触发器:输入为1时下个时钟触发沿输出翻转;输入为0时下个时钟触发沿输出保持。

边沿D触发器,输入为1时下个时钟触发沿输出为1,输入为0时下个时钟触发沿输出为0。

所以关于T触发器:

if(data_in == 1’b1)data_out <= ~data_out;elsedata_out <= data_out;

2.2 异步复位

异步复位,说明复位是异步的,和时钟触发边沿无关,复位信号一旦来临就使得寄存器进行复位操作,复位信号出现在always块的敏感列表里。

对于异步的低电平复位,以下降沿作为触发边沿(高电平变为低电平的时刻),并且触发后判断复位是否为低电平,即:

always @ (posedge clk or negedge rst)

begin

    if( ~rst )

        ...;

    else

        ...;

end

对于异步的高电平复位,以上升沿作为触发边沿(低电平变为高电平的时刻),并且触发后判断复位是否为高电平,即:

always @ (posedge clk or posedge rst)

begin

    if( rst )

        ...;

    else

        ...;

end

2.3 同步复位

同步复位时,复位与时钟触发沿有关,所以在always的敏感变量中,只有时钟触发边沿,然后根据高电平或者低电平再判断复位电平。

同步低电平复位:

always @ (posedge clk)

begin

    if( ~rst )

        ...;

    else

        ...;

end

同步高电平复位:

always @ (posedge clk)

begin

    if( rst )

        ...;

    else

        ...;

end

2.4 同步复位和异步复位的优缺点

异步复位:反应快,复位电平可以小于一个时钟周期,有些触发器只有异步复位端口;

同步复位:稳定,不易受毛刺干扰,有些模块只有同步复位端口;

  

3. 代码​​​​​​​

`timescale 1ns/1nsmodule Tff_2 (input wire data, clk, rst,output reg q  );// 1. 复位//2. T触发器,D触发器reg q1;always @ (posedge clk or negedge rst)begin    if(!rst) begin        q1 <= 1'b0;    end    else begin        if( data )            q1 <= ~q1;        else            q1 <= q1;    endend
always @ (posedge clk or negedge rst)begin    if(!rst) begin        q <= 1'b0;    end    else begin        if( q1 )            q <= ~q;        else            q <= q;    endendendmodule

猜你喜欢

转载自blog.csdn.net/DengFengLai123/article/details/124784509