题解 | #异步复位的串联T触发器#

异步复位的串联T触发器

http://www.nowcoder.com/practice/9c8cb743919d405b9dac28eadecddfb5

题意整理

1、T触发器是进入的值为1的时候,寄存的值发生翻转
2、注意异步复位
3、需要注意寄存器翻转的逻辑,第二寄存器是否翻转取决于第一个寄存器是否为1,前者输出情况有三种:在data输入控制为1下从0到1到0不断翻转,data为0锁在1,data为0锁在0
ps: 考虑rst为1且完成了初始化,rst  低电平复位高电平有效

题解主体

T触发器的特性方程
Qn+1 = T Qn ' +T ' Qn = T⊕Qn
(其中Qn为现态,Qn+1为次态)
T触发器的特性表
T    Q    Q*
0    0    0
0    1    1
1    0    1
1    1    0

T触发器的结构为:

 
根据题目给出的结构图:

 
可以得到状态转换:

 

Q过程为第一个触发器的输出(即下面的q1),Q输出为第二个触发器的输出
设n为时钟沿,Q过程取决于n-1的T, Q输出取决于n-1的Q过程
因此有输出:

n

T

Q过程

Q输出

0

0

0

0

1

1

0

0

2

1

1

0

3

1

0

1

4

1

1

1

5

1

0

0

6

0

1

0

7

0

1

1

8

0

1

0

9

0

1

1

将电路转换成Verilog代码描述如下:
reg q1;//q1为q过程
always @ ( posedge clk or negedge rst)
if (~rst) begin
  q1 <= 1'b0;
  q <= 1'b0;
end 
else begin
    if (data) begin
          q1 <= !q1;
    end
    if (q1) begin
          q <= !q;
    end
end

因此实现方式为如下的电路,综合得到:

 





参考答案

`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q  
);

reg q1;

always @ ( posedge clk or negedge rst)

if (~rst) begin
  q1 <= 1'b0;
  q <= 1'b0;
end 
else begin
    if (data) begin
  		q1 <= !q1;
	end
	if (q1) begin
  		q <= !q;
    end
end

    
    
    
    
endmodule 



全部评论
你那个分析流程能对吗?
1 回复 分享
发布于 2022-03-29 10:42
谁能告诉我,为什么我每次写Verilog都是运行超时,把你们的题解复制进去也是运行超时,哪个大哥可以告诉我吗
1 回复 分享
发布于 2022-03-27 21:40
rst 低电平复位高电平有效?这句话明显有歧义,有效代表信号的功能生效。复位信号有效就代表复位功能开启,你这又是复位又是有效的,不太严谨。
点赞 回复 分享
发布于 2025-02-12 16:13 四川
樓上那個combinational電路才會有latch
点赞 回复 分享
发布于 2023-04-30 08:03 台湾
if else语句不写全,会综合出latch吧
点赞 回复 分享
发布于 2023-03-18 17:25 广东
always换成always_ff会报错,请问为什么?
点赞 回复 分享
发布于 2022-11-17 00:11 湖南
这写的还不好吗,跟书上完全一样的步骤,这样才好理解吧
点赞 回复 分享
发布于 2022-07-04 11:50

相关推荐

2025-12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
79
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务