时间:2025-04-15 来源:FPGA_UCY 关于我们 0
FPGA开发比较复杂,其中的重点是时序设计。关于复杂时序设计,其中重点中的重点就是时序分析,设计状态机。在设计状态机的过程中就将整体的时序在头脑中有一个大概的划分。状态转换,状态内部的时序设计。有个高手讲过一句话,我觉得是很有道理的。时序是设计出来的,不是仿真仿出来的。一个时序逻辑的设计,如果开始没有一个整体的规划。上来就开始写代码,只会陷你于万劫不复之境地。
逻辑时序设计要求你对整个系统有一个大的规划,对每个模块,接口进行科学的定义。整体逻辑模块的划分,将有助于对逻辑的分割。更加详细和细致的理解整个功能模块的设计原理和定义。首先是在稿纸上进行详细的设计,画出整体的框图。
在代码设计阶段,一定要求是根据你的原理设计框图进行代码设计。如果有修改,得在原理图上标明。代码设计阶段主要关注几个点。一个是代码的可综合性,还一个就是综合后寄存器路径是否过长,寄存器的扇入和扇出系数是否超过了器件的最大允许值,这些都将影响整个电路的设计性能。对于一般情况,综合一次对,一次不对,的情况都是因为设计的代码时序约束不过关。线延迟,建立保持时间不够等。这里可以引入一个设计方法,那就是用软件进行静态时序分析。对关键路径通过时序约束文件进行约束。对于时序报告文件中不能满足时序约束条件的关键路径进行电路的从新设计。
对于阻塞和非阻塞赋值是一个比较难理解的点,所谓阻塞赋值,带有延迟的赋值。非阻塞赋值,就是立即赋值。两个在出现结果的情况下面来讲,就是阻塞赋值在时钟沿过来了,是顺序执行的,而非阻塞赋值就是直接全部都并行执行。
在中有两种方式进行位移,其中的第一方式就是""左右移位,但是在实际设计过程中。我使用reg类型的数据变量没法移位,根据静态时序分析得出的结果是寄存器路径过长。后面修改为a={a,1‘b0}在实际工程中通过。说明在工程中位拼接指令能够更好的综合。