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