5. 状态机和流水线

目录
1.时序约束
冒险和竞争
建立时间/保持时间
2. 异步复位,同步释放
3. AXI总线
4. 低功耗问题(优化资源利用率)
5. 状态机和流水线
1.时序约束
主要参考此文章:时序约束
在课题中,出现的错误情况,在学习了引脚约束之后,初步考虑可能是没有设置引脚的时序约束 。
对于整体时序,有如下定义:
延迟约束语法主要有一下四种 、、、 ,分别用于input端口和端口,其时钟源可以是时钟输入管脚,也可以是虚拟时钟 。
参考此篇文章:冒险和竞争
在组合电路中,某一输入变量经过不同途径传输后,到达电路中某一汇合点的时间有先有后,这种现象称竞争;由于竞争而使电路输出发生瞬时错误(尖峰脉冲)的现象叫做冒险 。或者说由于竞争产生的毛刺叫做冒险 。
1型,0型区分
提出了4种判断冒险竞争的方法:
1. 代数法
2.卡诺图法
3. 观察法
4. 实验法(扯淡)
消除办法:
1. 滤波电容(但是其有限)
2. 引入选通脉冲,避开毛刺
3. 修改逻辑设计,增加冗余项消除逻辑冒险
4. 格雷码
建立时间(setup time):触发器在时钟上升沿到来之前,其数据输入端的数据保持不变的最小时间 。
保持时间(hold time): 触发器在时钟上升沿到来之后,其数据输入端的数据保持不变的最小时间 。
建立时间保持时间时序图
建立时间和保持时间是由器件的特性决定的,当决定使用那款芯片时,就意味着建立时间和保持时间也就确定了 。
亚稳态:
亚稳态与跨时钟域 - 知乎
另一篇也不错:亚稳态通俗讲解
亚稳态是一个老生常谈的话题,我想今天彻底弄明白亚稳态,主要参考上述文章 。
2. 异步复位,同步释放
区分异步复位和同步复位:异步复位和同步复位
异步复位会导致亚稳态:因为复位信号的撤销时刻不确定,撤销时刻触发器不能判断当前rst信号是0还是1
异步复位存在恢复的时刻,因为恢复时刻的不确定,从而导致亚稳态的存在
其中定义为:
感觉和建立时间保持时间类似 。
同步释放:
module rst_crtl(inputclk,inputrst_n,outputreset);regrst_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;endendassign reset = rst_n1;
避免亚稳态,其本质处理方式还是通过多级触发器串联来控制 。
3. AXI总线
主要参考以下文章:axi
分为AXI-FULL AXI-lite 和 AXI-
写数据流程:
其中时序图为:
握手信号,相关信号需要再理解 。
读数据流程:
其中时序图为:
其中握手过程为,不同的等待时延,握手位置不同:
不同的接口,写地址,写数据,相应接口,有不同的valid和ready信号线 。
axi等待补充:更详细的解释
具体请参考:lite,简介
AXI-lite与full的区别是brust为1,一次只传送一组数据,因此取消了last,lenth等信号 。
读写数据的时序都精简了不少 。
参考:axi-
取消了写addr的过程,别的有些许改动 。
4. 低功耗问题(优化资源利用率)
fpga上的功耗主要分为:1. 芯片静态功耗;2. 设计静态功耗;3. 设计动态功耗
静态功耗的改善方式,主要是从工艺上进行修改和完善
其中设计动态功耗是我们能在算法上面解决的 。
数字IC打工人提供的思路,一二还是在硬件层面进行修改,三四是在程序层面进行修改,但是感觉显然十分浅显,对于具体的功耗,在里面,可以通过配置和调整不同结构的性能设定,从而修改功耗,参考:低功耗设计