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。

posted on 2011-08-02 12:03  万好好  阅读(1844)  评论(0编辑  收藏  举报

导航