2时序逻辑电路--触发器与锁存器
2.1.1同步复位D触发器
复位信号在所需时钟边沿才有效,复位操作需要同步于时钟故称作同步复位。
代码如下
View Code
1 module d_ff
2 (
3 input clk,
4 input rst_n,
5 input D,
6 output reg Q,
7 output O_n
8 );
9
10 always @(posedge clk)
11 if(!rst_n)Q<=1'b0;
12 else Q<=D;
13
14 assign Q_n=~Q;
15
16 endmodule
RTL级视图
Technology Map Viewer视图如下
2.1.2 异步复位D触发器
将上述语句改为always @(posedge clk or negedge rst_n)即构成异步复位D触发器。只要复位信号有效,输出立即复位。
很多写法中都采取异步复位模式,后面就不在讨论。
2.1.3 T触发器
代码如下
View Code
1 module t_ff
2 (
3 input clk,
4 input rst_n,
5 input T,
6 output reg Q,
7 output Q_n
8 );
9
10 always @ (posedge clk or negedge rst_n)
11 if(!rst_n) Q<=1'b0;
12 else if(T) Q<=~Q;
13
14 assign Q_n=~Q;
15
16 endmodule
Technology Map View如下
testbench如下
View Code
1 `timescale 1ns/1ns
2 module t_ff_tb;
3 reg clk,rst_n,T;
4 wire Q,Q_n;
5 //***************************************
6 //时钟与复位激励
7 parameter CLK_PERIOD=20,
8 RESET_TIME=10;
9 initial clk=0;
10 initial forever #(CLK_PERIOD/2) clk=~clk;
11 initial rst_n=0;
12 initial forever #RESET_TIME rst_n=1;
13 //***************************************
14 initial T=0;
15 initial forever #25 T={$random}%2;
16 initial #200 $stop;
17
18 t_ff t_ff_inst
19 (
20 .clk(clk),
21 .rst_n(rst_n),
22 .Q(Q),
23 .Q_n(Q_n),
24 .T(T)
25 );
26
27 endmodule
{$random}%2表示产生0~2-1之间的随机正整数。
RTL级仿真波形
2.1.4 门控D触发器
当clk为高电平时输出Q才随着输入D变化,clk为低电平时输出保持不变。门控D触发器表现的是组合逻辑电路的特点。
代码如下
View Code
1 module t_ff
2 (
3 input clk,
4 input rst_n,
5 input D,
6 output reg Q,
7 output Q_n
8 );
9
10 always @ (*)
11 if(!rst_n) Q<=1'b0;
12 else if(clk) Q<=D;
13
14 assign Q_n=~Q;
15
16 endmodule
Technology Map Viewer如下
2.1.5 亚稳态
对于D触发器,clk上升沿时输出Q等于输入D,其余时间保持不变。clk上升沿到来前D必须保持稳定的最短时间为触发器建立时间t_su,clk上升沿后D必须保持稳定的最短时间为触发器保持时间t_h。如果设计使得t_su,t_h不满足要求,触发器就会出现不稳定状态,称作亚稳态。Q随D变化而变化所需要的时间称作clk到D得传播延迟t_cQ。
/***万好好-科研论文培训,微信号:wanhaohao258。如转载本博客内容请注明,如果存在知识产权问题请主动联系。***/