Do you recognize that feeling when you think you knew something, until somebody asks you to explain it?
Well, that was what happened to me when I tried to explain what “Analysis and Elaboration” is. I used it in FPGA tools many times, and I had a certain “knowledge” of what it was, but, what are those processes EXACTLY? And, while we are at it, we will also describe what Synthesis is.
Let’s see:
Analysis is the process where the design files are checked for syntactic and semantic errors. The syntactic rules are dictated by the language. On VHDL, if you write IF but forget to include the THEN clause, that is a violation of the syntax, the set of rules of the VHDL language.
Semantics are the meaning of the language. A sentence describing an addition is tagged as incorrect if the operands are of incompatible types and the VHDL compiler cannot resolve the meaning of that sentence.
analysis:analysis就是分析语法语义错误。
语法错误:比如一个case,你没有endcase就是语法错误。
语义错误:这里的语义错误只能检查最简单的语义错误,比如你直接在assign给reg类型信号赋值。
Synthesis
During Synthesis, the design is mapped from RTL generic constructs to gate-level components. On an FPGA the building blocks are the device primitives: LUTs, flip-flops, memories, PLLs, input-output pins, etc.
synthesis就是将寄存器传输级电路转化为门级电路。
VHDL designs are hierarchic by nature. The top entity instantiates signals, components and processes. Each component instantiates additional signals, components and processes. The compiler explores the top-down design hierarchy and builds an interconnection table until it reaches the building blocks of the design. At this step the building blocks are still generic RTL constructs: Logic gates, registers, memories, etc.
Elaboration:就是将工程中各个模块的互相调用关系详尽地描述出来,使之成为一个整体的系统。
比如说,你系统中调用了一个模块,而你工程中没有这个模块。前面的语法语义检查不会报错,而这里才会报错。(虽然analysis 和 elaboration经常是放在一个步骤里)
目的是使用增量编译。
将整个工程分成多个“逻辑区域”,然后每次编译中通过设定各个区域的网表类型来决定本次编译是否对该区域重新执行,“增量编译”是针对整个工程在设计过程中后一次编译与前一次编译的一个“增量”过程,其实Altera的官方名称应该叫——“渐进式编译模式”。
将整个工程手动分成N个模块,我们就要用到Quartus提供的两个高级工具——Design Partitions和LogicLock Regions。
可参考:https://blog.csdn.net/moxu0915/article/details/79264161
Quartus II Design Assistant 依据一组设计规则,检查设计的可靠性。在将设 计移植到 HardCopy™ 器件之前,检查设计的可靠性时,Design Assistant 非 常有用。Settings 对话框 (Assignments 菜单 ) 的 Design Assistant 页面用于指 定检查设计时所使用的设计可靠性准则.
IO管脚分配检查
早期时序估计
由于预先布局尚未执行时序驱动的布局和布线工作,也没有读入引脚位置等约束信息,这时的网表不包含布线信息,而且布局结果也会在P&R后发生变化,所以不能获得准确的时序分析结果。在这一步进行的时序分析是Early Timing Estimate,只是根据Cell本身的时序信息和由预布局结果得来的Cell之间的位置关系进行的“估计”。
比如说器件允许最高频率50M,你设计的运行频率是1000M.那么不用布局布线也知道这个设计是不行的。
During Synthesis, the design is mapped from RTL generic constructs to gate-level components. On an FPGA the building blocks are the device primitives: LUTs, flip-flops, memories, PLLs, input-output pins, etc.
synthesis就是将寄存器传输级电路转化为门级电路。
代码---->基本门、多路器、寄存器
Fitter 使用由 Analysis & Synthesis 建立的数据库,将工程的逻辑和时序要求与器件的可用资源相匹配。它将每个逻辑功能 分配给最佳逻辑单元位置,进行布线和时序分析,并选定相应的互连路径和 引脚分配。 图1 所示为布局布线设计流程
如果在设计中进行了资源分配, Fitter 试图将这些资源分配与器件上的资源 相匹配,努力满足您已设置的任何其它约束条件,然后试图优化设计中的其 余逻辑。如果尚未对设计设置任何约束条件,Fitter 将自动优化设计。如果 适配不成功, Fitter 会终止编译,并给出错误信息。
Quartus II Design Assistant 根据一组设计规则检查设计的可靠性,确定是否 存在可能影响适配或设计优化的任何问题
Assembler 自动将 Fitter 的器件、逻辑单元和引脚分配转换为器件的编程镜 像,其形式是目标器件的一个或多个 Programmer Object Files (.pof) 或者 SRAM Object Files (.sof) 。
到这里就完成了最基本的全编译。
进行时序约束
生成与其它 EDA 工具配合使用的网表文件和其它输出 文件。根据使用的选项,在运行 EDA Netlist Writer 之 前,必须成功运行 Analysis & Synthesis、Fitter 或者 Timing Analyzer
Quartus II 软件的 EDA Netlist Writer 模块生成用于功能或时序仿真的 VHDL Output 文件 (.vho) 和 Verilog Output 文件 (.vo),以及使用 EDA 仿真工具进 行时序仿真时所需的 Standard Delay Format Output 文件 (.sdo) 。Quartus II 软件生成 Standard Delay Format 2.1 版的 SDF 输出文件。EDA Netlist Writer 将仿真输出文件放在当前工程目录下的特定工具目录中。