返回首页

FPGA基础-Verilog HDL相关

  1. 功耗优化相关

    • 额外的routing增加布线拥塞以及功耗,解决方法:

      • 调整设置/设定/约束

      • 增加pipeline流水线寄存器,减短长路径

    • 存储资源功耗:

      • 强制使用小块MLAB,避免使用大块M20K,适用于大位宽但深度浅的memory

      • 功耗主要来自于动态时钟,充放电RAM core导致功耗增加,可减少memory器件clocking events来减少功耗

      • 使用clock enable信号使得memory器件在不使用的时候达到几乎为0的功耗消耗(无RAM core充放电)

      • 使用更窄/更深的memory实现,用max_block_depth控制RAM深度,此时编译器会加入额外的decoder和mux逻辑,

    • Pipeline流水线

      • 提升速度,缩短逻辑深度,减少逻辑切换,不改变原有逻辑功能

      • 会增加资源/寄存器使用量,影响延迟和吞吐率,若设计存在glitch可能会增加功耗

    • I/O功耗

      • 功耗公式:

      • 更低的I/O电压消耗功率更低

      • 阻性上拉标准(SSTL/HSTL):输出波动小,高频应用中动态功耗较低,但由于持续驱动静态电阻,静态功耗高

      • 不上拉的标准(LVTTL/LVCMOS):V = Vccio,高频率时高动态功耗,但由于无静态电阻驱动,低静态功耗

  2. 一些基本语法

    • 赋值:assign out = in;

    • 翻转赋值:assign out = ~in;

    • 异或:assign out = a ^ b;

    • 同或:assign out = ~(a ^ b);

    • casez:可在case中引入don't-care位:

    always @(*) begin
    casez (in[3:0])
         4'bzzz1: out = 0;   // in[3:1] can be anything
         4'bzz1z: out = 1;
         4'bz1zz: out = 2;
         4'b1zzz: out = 3;
         default: out = 0;
     endcase
     end
    
  3. FPGA设计流程:

    Intel官方FPGA设计流程相关文档,相当详细且带在线学习课程。

  4. 竞争和冒险:

    **竞争:**在组合逻辑电路中,信号经过多条路径到达输出端,每条路径经过的逻辑门不同存在时差,在信号变化的瞬间存在先后顺序。这种现象叫竞争。

    **冒险:**由于竞争而引起电路输出信号中出现了非预期信号,产生瞬间错误的现象称为冒险。表现为输出端出现了原设计中没有的窄脉冲,即毛刺。

    常见的逻辑代数法判断是否有竞争冒险存在:只要输出逻辑表达式中含有某个信号的原变量A和反变量/A之间的“与”或者“或”关系,且A和/A经过不同的传播路径,则存在竞争。解决办法一是修改逻辑表达式避免以上情况,二是采样时序逻辑,仅在时钟边沿采样,三是在芯片外部并联电容消除窄脉冲。

    原文链接

  5. 亚稳态产生原因及消除方式

    在异步系统中,寄存器建立保持时间不满足,引起亚稳态。典型的场合为数据跨时钟域传输和异步复位电路。在异步传输过程中,通过单比特信号双寄存器同步,多比特信号FIFO桥接的方式消除亚稳态(实际上异步信号同步方式即为异步传输过程中亚稳态的消除方式)。通过异步复位,同步释放可消除异步复位引起的亚稳态。

  6. 锁存器(latch)和触发器(flip-flop)区别

    电平敏感的存储器件称为锁存器。可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。
    有交叉耦合的门构成的双稳态的存储原件称为触发器。分为上升沿触发和下降沿触发。可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器则决定了保持时间。

    SR Latch,使用NOR门构建,Set/Rest为1时Q为1 ~SR Latch,与上面相反,使用NAND门构建,输入输出和SR Latch相反

    D触发器,CLK上升沿Q跟随D输入,其他情况保持

  7. FPGA芯片内有哪两种存储器资源

    FPGA芯片内有两种存储器资源:一种叫BLOCK RAM,另一种是由LUT配置成的内部存储器(也就是分布式RAM)。BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。