Menu Close

Verilog 时钟的使用及触发器模型

在Verilog时序电路的设计中时钟是最关键的要素,尤其在可综合的时序设计中只能利用时钟边沿进行处理。 在always过程中利用时钟边沿(posedge 或negedge)驱动的寄存器类型变量可以综合成触发器(flip-flop)模型,如D触发器(D Flip-flop),JK触发器等模型,最常用的模型是D触发器模型。

  1. D触发器模型

最简单的D触发器有三个端子,分别为clock 端,D端,Q端

  • 上升沿的D触发器模型如图1,在时钟上升沿时刻,触发器的Q端的值更新为D端的值,其它时间保持不变。

%title插图%num 图1

  • 下降沿的模型如图2.在时钟下降沿时刻,触发器的Q端的值更新为D端的值,其它时间保持不变。

%title插图%num 图2

2.触发器的级联

在FPGA设计中一般都是采用同步时序电路设计,因此各个触发器按照分组的方式组成同步时序电路,在一个always过程中由于只使用一个时钟,因此在该过程的各个寄存器被赋值的寄存器都用同一个时钟边沿,因此它们的行为是同步的。也就是所有的触发器在时钟的边沿的驱动下,在同一时刻将触发器的Q端的值更新为对应的各自触发器的D端的值,这就是所谓的同步时序电路。级联及同步如图3所示。

%title插图%num 图3

3.触发器的反馈

触发器反馈电路设计,是将触发器的Q输出端经过组合逻辑电路运算后反馈到输入端。该电路在计数器,分频器,累加器等的时序电路设计中应用比较广泛。

%title插图%num

图3

 

例1 :Verilog描述D触发器模型

module dff
(
    input      clk,
    input      d,
    output reg q
);
 
always@(posedge clk)
    q<=d;
 
endmodule

 

%title插图%num

图4

例2:带异步load端的D触发器模型。

module dffl_async
(
    input      clk,
    input      ld,
    input      a,
    input      d,
 
    output reg q
);
 
 
always@(posedge clk or posedge ld)
if(ld)
    q <= a;
else
    q <= d;
 
 
endmodule

 

例3:带同步load端的D触发器模型。

module dffl_sync
(
    input      clk,
    input      ld,
    input      a,
    input      d,
 
    output reg q
);
 
always@(posedge clk)
if(ld)
    q <= a;
else
    q <= d;
 
endmodule

 

带异步复位D触发器模型

例4:

module dffr
(
    input      clk,
    input      r,
    input      d,
 
    output reg q
);
 
always@(posedge clk or posedge r)
if(r)
    q <= 1'b0;
else
    q <= d;
 
endmodule

 

例5:带异步置位端的D触发器模型

module dffls
(
    input      clk,
    input      s,
    input      d,
 
    output reg q
);
 
always@(posedge clk or posedge s)
if(s)
    q <= 1'b1;
else
    q <= d;
 
endmodule

 

例6:带反馈的D触发器模型

module counter
(
    input      clk,

 
    output reg [3:0] q = 0
);
 
wire [3:0] d;
assign     d = q+1;
 
always@(posedge clk)

    q <= d ;

endmodule

 

根据以上实例设计,还可以得到它们之间的各种组合,这里就不一一举例。

注意:在always的敏感表中不支持边沿和电平混合模式,如:

always@(posedge clk or s) 这种写法是错误的,应改成:

always@(posedge clk or posedge s)

 

Posted in IC

发表评论

相关链接