FPGA中触发器和锁存器总结

发布于:2022-11-06 ⋅ 阅读:(574) ⋅ 点赞:(0)

总结

1,FPGA中触发器和锁存器类型有6种,存储元件可转换为以下任何一种。

      ⊙FDCE:异步复位触发器

      ⊙FDPE:异步置位触发器

      ⊙FDRE:同步复位触发器

      ⊙FDSE:同步置位触发器

       ⊙LDCE:异步清零锁存器

       ⊙LDPE:异步置位锁存器

2,组合逻辑中当输出条件没完全列出,剩下没列出的条件编译器默认输出值是不变的,这种情况就会产生锁存器。时序逻辑不会产生锁存器。因为触发器CE使能端口相当于锁存器的G端口,可以使输出保持不变。

3,FPGA中使用触发器并不会比使用触发器多资源,在ultrascale系列中,一个CLB中包含16 存储单元,所有存储单元都可以配置为寄存器或锁存器。8个存储单元为一组,要么配置为锁存器要么配置为触发器。

4,不建议使用锁存器原因:锁存器对毛刺敏感,不能异步复位,因此在上电后处于不确定的状态。锁存器不利于静态时序分析。

5,FPGA保留锁存器功能并不会增加FPGA资源(寄存器和锁存器可相互转化),保留锁存器可实现FPGA灵活性,锁存器虽然在FPGA中不怎么被使用,但在CPU中却很常见,因为锁存器比Flip-Flop快很多。

 

实例

用个简单实例来看看代码到综合网表再到底层基本元件映射关系:

代码中data_buf[0]会被映射为触发器,data_buf[1]会被映射为锁存器。综合后网表见下图

由原理图可见触发器CE端跟锁存器G端是等效的。触发器比锁存器多了时钟同步。

值得注意的是锁存器的G端口映射为底层元件存储器的clk端口。见红色高亮的net。锁存器的GE端口映射为存储器的CE端口。

触发器和锁存器place整体图

触发器和锁存器映射再同一个SLICEL里面,并不是相邻两个寄存器,一个是place在AFF2,一个place在EFF2,由此可见在ultrascale系列中, 8个存储单元为一组控制集。

    

不同模型代码

  FDCE:异步复位触发器

always @(posedge i_clk or posedge i_rst)
    begin
    if(i_rst)
        data<=1'b0
    else if(enable)
        data<=di;
    end

  FDPE:异步置位触发器

always @(posedge i_clk or posedge i_rst)
    begin
    if(i_rst)
        data<=1'b1
    else if(enable)
        data<=di;
    end

  FDRE:同步复位触发器

always @(posedge i_clk)
    begin
    if(i_rst)
        data<=1'b0
    else if(enable)
        data<=di;
    end

  FDSE:同步置位触发器

always @(posedge i_clk)
    begin
    if(i_rst)
        data<=1'b1
    else if(enable)
        data<=di;
    end

  LDCE:异步清零锁存器

目录

总结:

实例

不同模型代码


  LDPE:异步置位锁存器

always @(*)
    begin
    if(i_rst)
        data<=1'b1
    else if(enable)
        data<=di;
    end

参考文档:

,1,大家一致避免使用的锁存器为什么依然存在于FPGA中?我们对锁存器有什么误解? | 电子创新网赛灵思社区

2,从底层结构开始学习FPGA(3)----存储单元之触发器、寄存器与锁存器_孤独的单刀的博客-CSDN博客_fpga寄存器是什么

3,关于锁存器的后仿真_zhouyiiii11111的博客-CSDN博客_simulink 锁存器


网站公告

今日签到

点亮在社区的每一天
去签到