目录
1.时序约束
冒险和竞争
建立时间/保持时间
2. 异步复位,同步释放
3. AXI总线
4. 低功耗问题(优化资源利用率)
5. 状态机和流水线
1.时序约束
主要参考此文章:时序约束
-
引脚约束
在课题中,出现mmc5983的错误情况,在学习了引脚约束之后,初步考虑可能是没有设置引脚的时序约束。
对于整体时序,有如下定义:
延迟约束语法主要有一下四种set_input_delay 、set_output_delay、set_max_delay、set_min_delay ,分别用于input端口和output端口,其时钟源可以是时钟输入管脚,也可以是虚拟时钟。
-
冒险和竞争
参考此篇文章:冒险和竞争
在组合电路中,某一输入变量经过不同途径传输后,到达电路中某一汇合点的时间有先有后,这种现象称竞争;由于竞争而使电路输出发生瞬时错误(尖峰脉冲)的现象叫做冒险。 或者说由于竞争产生的毛刺叫做冒险。
1型,0型区分
提出了4种判断冒险竞争的方法:
1. 代数法
2.卡诺图法
3. 观察法
4. 实验法(扯淡)
消除办法:
1. 滤波电容(但是其有限)
2. 引入选通脉冲,避开毛刺
3. 修改逻辑设计,增加冗余项消除逻辑冒险
4. 格雷码
-
建立时间/保持时间
建立时间(setup time):触发器在时钟上升沿到来之前,其数据输入端的数据保持不变的最小时间。
保持时间(hold time): 触发器在时钟上升沿到来之后,其数据输入端的数据保持不变的最小时间。
建立时间保持时间时序图
建立时间和保持时间是由器件的特性决定的,当决定使用那款芯片时,就意味着建立时间和保持时间也就确定了。
亚稳态:
亚稳态与跨时钟域 - 知乎
另一篇也不错:亚稳态通俗讲解
亚稳态是一个老生常谈的话题,我想今天彻底弄明白亚稳态,主要参考上述文章。
- 亚稳态本质就是信号来的时候,可能在建立时间之内,或者保持时间之内改变,时钟采样无法判断此时的状态,从而导致亚稳态。
- 随着时钟频率的增加,发生亚稳态的概率也会增加,因为tsu和th的时间占比更大了。
- 解决亚稳态的方法:
- 用3级D触发器进行同步
- 用FIFO进行数据缓冲
- 使用异步复位,同步释放
2. 异步复位,同步释放
区分异步复位和同步复位:异步复位和同步复位
异步复位会导致亚稳态:因为复位信号的撤销时刻不确定,撤销时刻触发器不能判断当前rst信号是0还是1
异步复位存在恢复的时刻,因为恢复时刻的不确定,从而导致亚稳态的存在
其中定义为:
- 恢复时间(recovery time)原本有效的复位信号释放后,与紧跟其后的第一个时钟上升沿之间的最小时间。
- 清除时间/移除时间(removal time)时钟信号的上升沿,与紧跟其后异步复位信号从有效到无效的最小时间。
感觉和建立时间保持时间类似。
同步释放:
module rst_crtl(input clk,input rst_n,output reset
);reg rst_n0,rst_n1;
always@(posedge clk or negedge rst_n)
beginif(!rst_n)beginrst_n0 <= 0;rst_n1 <= 0;endelsebeginrst_n0 <= rst_n;rst_n1 <= rst_n0;end
endassign reset = rst_n1;
避免亚稳态,其本质处理方式还是通过多级触发器串联来控制。
3. AXI总线
主要参考以下文章:axi
分为AXI-FULL AXI-lite 和 AXI-stream
- AXI-FULL接口
写数据流程:
其中时序图为:
握手信号,相关信号需要再理解。
读数据流程:
其中时序图为:
其中握手过程为,不同的等待时延,握手位置不同:
不同的接口, 写地址,写数据,相应接口,有不同的valid和ready信号线。
axi等待补充:更详细的解释
- AXI-lite接口
具体请参考:lite,简介
AXI-lite与full的区别是brust为1,一次只传送一组数据,因此取消了last,lenth等信号。
读写数据的时序都精简了不少。
- axi-stream
参考:axi-stream
取消了写addr的过程,别的有些许改动。
4. 低功耗问题(优化资源利用率)
fpga上的功耗主要分为:1. 芯片静态功耗;2. 设计静态功耗;3. 设计动态功耗
静态功耗的改善方式,主要是从工艺上进行修改和完善
其中设计动态功耗是我们能在算法上面解决的。
数字IC打工人提供的思路,一二还是在硬件层面进行修改,三四是在程序层面进行修改,但是感觉显然十分浅显,对于具体的功耗,在vivado里面,可以通过配置和调整不同结构的性能设定,从而修改功耗,参考:低功耗设计
主要通过优化资源利用率:
- FPGA动态功耗主要体现为存储器、内部逻辑、时钟、I/O消耗的功耗。因此可以调整设计来改善功耗问题。
- 对于声学定位项目,功耗如下:
可见,占功耗最多的是PS7,arm端的程序。
降低功耗的方法:门级电路降低功耗
- 状态机的编码和解码
- 二进制数表示方法
- 门控时钟
- 独热码多路器:独热码值每个码元值只有一位是'1',其他位都是'0'
- 除掉多余的转换
- 使用行波加法器
对于低功耗问题,还有相关的题目总结:低功耗题目妈的真多。
chatGPT说流水线设计能够降低功耗,半信半疑,其资源占用率会很大。
5. 状态机和流水线
参考此文章:状态机和流水线
从状态机的类型上来看,状态机可以分为moore型和mealy型;
从状态机的代码实现上来看,状态机可以是一段式、二段式或三段式;
流水线是用面积换时间。
能够最大程度利用硬件资源,降低功耗。