题解 | #异步复位的串联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 低电平复位高电平有效?这句话明显有歧义,有效代表信号的功能生效。复位信号有效就代表复位功能开启,你这又是复位又是有效的,不太严谨。
点赞 回复 分享
发布于 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

相关推荐

12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司7个岗位
点赞 评论 收藏
分享
评论
78
7
分享

创作者周榜

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