FPGA基础:触发器和锁存器

锁存器(Latch)

module latch(D, clk, Q);
    input D, clk;
    output reg Q;

    always@(D, clk)
       if (clk) 
          Q = D;
endmodule

D触发器(Flip-Flop)

module flipflop(D, clk, Q);
    input D, clk;
    output reg Q;

    always@(posedge clk)
       Q <= D;

endmodule

最基本时序电路

On positive edge of clk, Q <= D(在上升沿时被采样)

D Flip Flop

module dff (
input clk,
input rst,
input D,
output reg Q
alwaysd(posedge clk or posedge rst)begin
  if(rst==1)
    0<=0;
  else
    Q<=D;
end
endmodule

时序块(Sequential blocks):

在时钟上升边缘触发(Will trigger at rising edge of clk):always@(posedge(clk))
在时钟下降边缘触发(Triggers at falling edge of clk):always@(negedge(clk))
使用异步复位(Using an asynchronous reset):always@(posedge(clk) or (posedge(rst))

同步与异步

同步与异步

同步控制信号是指该信号有效的时候必须在有时钟边沿到来的情况下才能对电路起作用。异步控制信号是指该信号在任何时刻只要有效,就会对电路起作用,而不必等时钟边沿信号。在verilog HDL中,异步控制信号用关键字posedge和negedge表示是高有效或者低有效。

触发器概念

(1)有两个稳定状态(简称稳态),正好用来表示逻辑 0 和 1。
(2)在输入信号作用下,触发器的两个稳定状态可相互转换(称为状态的翻转)。输入信号消失后,新状态可长期保持下来,因此具有记忆功能,可存储二进制信息。
(3)一个触发器可存储 1 位二进制数码。
(4)触发器有记忆功能,由它构成的电路在某时刻的输出不仅取决于该时刻的输入,还与电路原来状态有关。而门电路无记忆功能,由它构成的电路在某时刻的输出完全取决于该时刻的输入,与电路原来状态无关。
(5)触发器和门电路是构成数字电路的基本单元。

触发器分类

  1. 上升沿触发的触发器
  2. 带异步复位、上升沿触发的触发器
  3. 带异步复位和置位、上升沿触发的触发器
  4. 带异步复位和同步使能、上升沿触发的触发器
  5. 带同步复位、上升沿触发的触发器

触发器的Verilog实现

1. 上升沿触发的触发器

module dff(d,clk,q,qn);
  input    d, clk;
  output  q, qn;
  reg	q, qn;
  always@(posedge clk)
  begin	
 {q, qn}<={d, ~d};
  end
endmodule

只列出了上升沿触发的时钟clk,而没有将输入d列写进去,是因为输入d要想起作用,必须要有时钟边沿信号的触发。

上升沿触发的触发器

2. 带异步复位、上升沿触发的触发器

module dff_asynrst(data,rst,clk,q);
  input	data,rst,clk;
  output	q;
  reg	q;
always@(posedge clk , posedge rst)
begin	
  if(rst==1’b1)		
    q<=1’b0;	
  else	
    q<=data;
end
endmodule 

3. 带异步复位和置位、上升沿触发的触发器

module dff_asynrst(data,rst,set,clk,q);
   input    data,rst,set,clk;
   output  reg q;
   always@(posedge clk , posedge rst , posedge set)
   begin	
   	if(rst==1’b1)		
		q<=1’b0;
    else if(set==1’b1)
		q<=1’b1;	
	else	
    q<=data;
   end
endmodule 

4.带异步复位和同步使能、上升沿触发的触发器

module dff_asynrst(data,rst,en,clk,q);
   input	data,rst,en,clk;
   output	q;
   reg	q;
always@(posedge clk , posedge rst) begin	
   	if(rst==1’b1)		
      q<=1’b0;
    else if(en==1’b1)
      q<=data;	
end
endmodule 

5.带同步复位、上升沿触发的触发器

module dff_synrst(data,rst,clk,q);
   input	data,rst,clk;
   output	q;
   reg	q;
always@(posedge clk)
begin	
  if(rst==1’b1)		
    q<=1’b0;
  else
    q<=data;	
end
endmodule 


关注微信公众号获取更多资讯:​​​​在这里插入图片描述

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值