首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

触发器与锁存器,Verilog(2)

触发器与锁存器,Verilog(2)

3 门控D锁存器
图3.1 D-latch的符号
门控D锁存器只有在clk为高电平时,输出Q才随着输入D变化;当clk为低电平的时,锁存器的状态将被冻结,输出Q保持不变,直到clk恢复为高电平为止。
代码3.1 门控D锁存器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module d_latch(
  input      CLK,
  input      RST_n,
  input      D,
  output reg Q
);

always@*
  if (!RST_n)
    Q <= 1'b0;
  else if (CLK == 1'b)
    Q <= D;

endmodule




图3.2 门控D锁存器的Technology Mapping Viewer
代码3.2 门控D锁存器的testbench
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
`timescale 1ns/1ns
module d_latch_tb;
reg clk, rst_n;
reg d;
wire q;

//++++++++++++++++++++++++++++++++++++++
// 时钟与复位激励  可重复调用
parameter CLK_PERIOD = 20,
          RESET_TIME = 10;
initial clk = 0;
initial forever #(CLK_PERIOD/2) clk = ~clk;
initial rst_n = 0;
initial #RESET_TIME rst_n = 1;
//--------------------------------------

initial begin
  d = 0;
  repeat(10) #11 d = ~d;
  #10 $stop;
end

d_latch d_latch_inst(
  .CLK(clk),
  .RST_n(rst_n),  
  .D(d),
  .Q(q)
);

endmodule



注意第19行,repeat(n)表示连续执行下面的一块(begin-end内)语句n次。此处为10次。
1
repeat(10) #11 d = ~d;




图3.3 门控D锁存器的RTL级仿真波形
如图所示,当时钟为高电平是,Q随D变化而变化;而当时钟为高电平时,Q值保持不变。
图3.4所示为门控D触发器基本时序参数模型。在clk下降沿到来之前,D必须保持稳定的最短时间叫做锁存器的建立时间t_su,在clk的下降沿之后,D必须保持稳定的最短时间叫做锁存器的保持时间t_h

图3.4 门控D触发器基本时序参数
4 亚稳态
图4.1 异步复位的D-ff

图4.2 触发器的时序参数
如图4.2所示,在clk的上升沿到来之前,D必须保持稳定的最短时间为触发器的建立时间t_su;在clk的上升沿到来之后,D必须保持稳定的最短时间为触发器的保持时间t_h。如果t_su或t_h不能严格达到电路的要求,那么触发器就会进入不稳定状态,即亚稳态。从clk的上升沿起,Q随D变化而变化所需要的时间为clk到Q的传播延迟t_cQ
继承事业,薪火相传
返回列表