这是一个在逻辑规划中注意事项列表,由此引起的过错常使得规划不牢靠或速度较慢,为了进步规划功用和进步速度的牢靠性,有必要确认规划经过一切的这些检查。
牢靠性
1. 为时钟信号选用大局时钟缓冲器BUFG!
不选用大局时钟缓冲器的时钟将会引进误差。
2. 只用一个时钟沿来存放数据
运用时钟的两个沿是不牢靠的,由于时钟的某沿或许两个沿会漂移。假如时钟有漂移并且你只运用了时钟的一个沿,你就下降了时钟边缘漂移的危险。这个问题能够这样来处理:便是答应CLKDLL主动纠正时钟的占空比,以达百分之五十的占空比。不然强烈主张只运用一个时钟沿。
3. 除了用CLKDLL或DCM发生的时钟外不要在内部发生时钟
这包含发生门控时钟和分频时钟。作为代替,能够树立时钟使能或运用CLKDLL或DCM来发生不同的时钟信号。关于一个纯同步规划,主张在任何或许的情况下只运用一个时钟。
4. 不要在内部发生异步的操控信号(例如复位信号或许置位信号)
内部发生的异步操控信号会发生毛刺,作为代替,能够发生一个同步的复位/置位信号。要比需求效果的时刻提早一个时钟周期进行这个异步信号的同步。
5. 不要运用没有相位联系的多个时钟
或许并不总能防止这个条件,在这些情况下确认已运用了恰当的同步电路来跨过时钟域,并已恰当地束缚了跨过时钟域的途径。
6. 不要运用内部锁存器
内部锁存器会混杂时序,并且常常会引进别的的时钟信号。内部锁存器在通明门翻开时能够被看成是组合逻辑,但在门被锁存时能够被看成是同步元件,这将会混杂时序剖析。内部锁存器常常会引进门控时钟,门控时钟会发生毛刺使得规划变得不牢靠。
功用
1. 逻辑级的时延不要超越时序预算的百分之五十
每个途径逻辑级时延能够在逻辑级时序陈述或布局后时序陈述中找到,详细剖析了每个途径之后,时序剖析器将生成每个途径时延的统计量,检查一下一共的逻辑级时延,保证不超越时序预算的百分之五十。
2. IOB 存放器
IOB存放器供给了最快的时钟到输出和输入到时钟的时延。首要,有一些束缚。
关于输入存放器在从管脚到存放器间不能有组合逻辑存在。关于输出存放器,在存放器和管脚之间也不能有组合逻辑存在。关于三态输出,在IOB中的一切的存放器有必要运用同一个时钟信号和复位信号,并且IOB三态存放器有必要低电平有用才干放到IOB中(三态缓冲器低电平有用,所以在存放器和三态缓冲器之间不需求一个反相器)。
有必要使软件能够选用IOB存放器,能够设置大局完成选项:为输入、输出或输入输出挑选IOB存放器。缺省值为关 off。
你也可在归纳东西或在用户束缚文件UCF中设定,使得能够运用IOB存放器。句法为: INST IOB = TRUE;
3. 关于要害的输出挑选快速转化速率
可认为LVCMOS和LVTTL电平挑选转化速率,快速的转化速率会下降输出时延,但会添加地弹,所以有必要在细心考虑的根底之上挑选快速转化速率。
4. 流水逻辑
假如你的规划答应添加推迟,对组合逻辑选用流水操作能够进步功用。在Xilinx的FPGA中有很多的存放器,对每一个四输入LUT有一个对应的存放器,在献身推迟的情况下,运用这些存放器能够添加数据吞吐量。
5. 为四输入的LUT结构进行代码优化
记住每一个查找表能够树立一个四输入的组合逻辑函数。假如需求更大的功用,可根据“四输入组合逻辑”这个特性,剖析、优化完成该功用所需的查找表的数目。
6. 运用Case句子而不是if-then-else句子
杂乱的if-then-else句子一般会生成优先级译码逻辑,这将会添加这些途径上的组合时延(现在大部分归纳东西,能够把if-else的优先级逻辑层次打平)。用来发生杂乱逻辑的Case句子一般会生成不会有太多时延的并行逻辑。关于Verilog,能够运用束缚parallel_case。
7. 多用Xilinx自带Core generate
Core generate针对 Xilinx的结构进行了优化,许多块都能够答应用户装备,包含巨细、宽度和流水推迟。检查规划中的要害途径,是否能够在核生成器中发生一个核来进步要害途径功用。防止由代码来揣度,又费事,又不牢靠。
8. FSM的规划束缚在一个层次中
为了答应归纳东西彻底优化FSM,它有必要在它自己的块中优化。假如不是这样的话,这将使得归纳东西将FSM逻辑和它周围的逻辑一同优化。FSM不能包含任何的算术逻辑、数据通路逻辑或许其它与状况机不相关的组合逻辑。
9. 运用两个进程或always块的有限状况机
下一个状况和输出译码逻辑有必要放在独立的进程或always块中,这将不答应归纳东西在输出和下一个状况译码逻辑之间共享资源。便于代码保护。
10. 运用一位有用编码(one-hot、gray)FSM
一位有用编码一般会在富含存放器的FPGA中供给最高功用的状况机。
11. 为每一个叶级(leaf-level)块供给存放输出
叶级块是能够推论的逻辑块,而结构级(structural-level)的块仅例化较底层的块,这样就树立了层次。假如叶级块是存放输出,则可使归纳东西保存层次。这可使剖析这些代码的静态时序变得比较简单。对module与module之间的鸿沟信号(用时钟同步)进行存放输出,能够使得各个块之间有确认的同步时序联系。
12. 不同的计数器风格
二进制计数器是十分慢的。假如二进制计数器是要害途径,能够考虑运用不同风格的计数器LFSR、Pre-scalar或Johnson。
13. 规划有必要被层次化的分红不同的功用块
首要是较顶层的功用块,然后是较底层的块,也应该包含特定技能的块。规划层次化使得规划更可读、更易调试、更易复用。
14. 高扇出网络需求仿制存放器
能够经过XST或许synplify pro等归纳东西的归纳选项来进行操控。
15. 运用四种大局束缚来对规划进行大局的束缚
周期(对每个时钟),输入偏移、输出偏移、管脚到管脚的时刻。或许会有针对多周期途径、失利途径和要害途径的其它束缚,可是有必要从这四个大局束缚开端。