23 / 01 / 03
功耗优化相关
额外的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,高频率时高动态功耗,但由于无静态电阻驱动,低静态功耗
一些基本语法
赋值: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
FPGA设计流程:
Intel官方FPGA设计流程相关文档,相当详细且带在线学习课程。
竞争和冒险:
**竞争:**在组合逻辑电路中,信号经过多条路径到达输出端,每条路径经过的逻辑门不同存在时差,在信号变化的瞬间存在先后顺序。这种现象叫竞争。
**冒险:**由于竞争而引起电路输出信号中出现了非预期信号,产生瞬间错误的现象称为冒险。表现为输出端出现了原设计中没有的窄脉冲,即毛刺。
常见的逻辑代数法判断是否有竞争冒险存在:只要输出逻辑表达式中含有某个信号的原变量A和反变量/A之间的“与”或者“或”关系,且A和/A经过不同的传播路径,则存在竞争。解决办法一是修改逻辑表达式避免以上情况,二是采样时序逻辑,仅在时钟边沿采样,三是在芯片外部并联电容消除窄脉冲。
亚稳态产生原因及消除方式
在异步系统中,寄存器建立保持时间不满足,引起亚稳态。典型的场合为数据跨时钟域传输和异步复位电路。在异步传输过程中,通过单比特信号双寄存器同步,多比特信号FIFO桥接的方式消除亚稳态(实际上异步信号同步方式即为异步传输过程中亚稳态的消除方式)。通过异步复位,同步释放可消除异步复位引起的亚稳态。
锁存器(latch)和触发器(flip-flop)区别
电平敏感的存储器件称为锁存器。可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。
有交叉耦合的门构成的双稳态的存储原件称为触发器。分为上升沿触发和下降沿触发。可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器则决定了保持时间。
SR Latch,使用NOR门构建,Set/Rest为1时Q为1
~SR Latch,与上面相反,使用NAND门构建,输入输出和SR Latch相反
D触发器,CLK上升沿Q跟随D输入,其他情况保持
FPGA芯片内有哪两种存储器资源
FPGA芯片内有两种存储器资源:一种叫BLOCK RAM,另一种是由LUT配置成的内部存储器(也就是分布式RAM)。BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。
发