概述
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;
else
data_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/1ns
module 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;
end
end
always @ (posedge clk or negedge rst)
begin
if(!rst) begin
q <= 1'b0;
end
else begin
if( q1 )
q <= ~q;
else
q <= q;
end
end
endmodule
最后
以上就是老迟到黑裤为你收集整理的FPGA数字IC的Verilog刷题解析基础版02——T触发器(异步复位和同步复位)的全部内容,希望文章能够帮你解决FPGA数字IC的Verilog刷题解析基础版02——T触发器(异步复位和同步复位)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复