综合

Vivado常用综合选项的设置

-flatten_hierarchy
full:综合时将原始设计打平,只保留顶层层次,执行边界优化
none:综合时完全保留原始设计层次,不执行边界优化
rebuilt:综合时将原始设计打平,执行边界优化,综合后将网表文件按照原始层次显示,故与原始层次相似。

当-flatten_hierarchy为none时消耗的寄存器最多,建议其设定为默认值rebuilt。

-fsm_extraction
用于设定状态机的编码方式,默认值为auto。
-fsm_encoding
功能同上,优先级高于-fsm_extraction,但如果代码本身已经定义了编码方式,该设定将无效。
one-hot:任意状态只有一个比特位置一。

-keep_equivalent_registers
equivalent registers,等效寄存器,即共享输入数据的寄存器。
勾选时,等效寄存器不合并;
不勾选时,等效寄存器合并。
等效寄存器可以有效的降低扇出,可以通过综合属性keep避免其被合并。

-resource_sharing
其目的是对算术运算通过资源共享优化设计资源
auto
on
off

Vivado中无关的更改也会造成综合Out-of-Date

在项目流程中,Vivado会跟踪各个流程的依赖关系。当你执行某个操作时,Vivado会保证已经成功完成上一步的操作。例如,如果您想执行implementation,Vivado将会检查synthesis是否已经执行。同时,这种依赖关系管理也会检查目前已完成的各项操作是否是依赖最新的输入而完成的。这样可以确保上一步的输出都是有效地。例如,假设已经执行了综合,之后又修改了一个RTL文件,虽然综合已经完成,由于输入在综合之后被修改过,所以它已经过时了。在Vivado环境下,这种情况被称作“Out of Date”。

有的时候,即使所做的更改看起来似乎并不影响综合,但也会造成综合或其他步骤的Out of Date。例如,在综合完成后又添加一个“pblock”约束,这个操作是不会影响综合的,但是,综合还是会显示Out of Date,原因就在于Vivado跟踪依赖关系的间隔度过小。

综合依赖于输入的HDL,XDC和其他多种因素。当XDC出现变化,如添加了pblock,由于输入成分发生改变,所以综合会Out of Date。它并不跟踪XDC的单个命令来检查它们是否影响综合。

Vivado套件相比于以往的ISE套件的提升,不仅仅在于表面上看起来更加美观的GUI,更重要的是在于其内部算法的全新设计。例如综合和布局布线技术,需要把我们的设计,例如一个HDL文件,转换为网表,映射为RTL级别的加法器、触发器等,最后布局到FPGA的实际硬件中,变成SLICE中的LUT、MUX等的组合,然后要把这些基本组合连接起来。这就设计到了很复杂的综合和布局算法,需要在看似数不尽的组合中尽量选择出最优化的组合来,最后归结为一个很复杂的极值优化问题,于是我们偶尔会听到的遗传算法、退火算法什么的都出来了。因为7系列和其以后的FPGA/AP SOC都将更加复杂,传统的综合算法不能实现一个综合和布局布线的更优化效果,所以Xilinx建议我们在设计中针对7系列及以后的更新的器件使用Vivado进行开发,因为Vivado使用了更加先进的处理算法。         对于我们使用者来说,能体会到的显著效果就是复杂设计中效率的提升了,再配合上Vivado套件中优化的设计流程,能够让我们更方便的进行开发、调试和分享。下面是一个简单的例子。

在超大规模数字集成电路的设计中,我们使用逻辑综合工具来完成从RTL设计到门级网表的转化。我们希望它综合出的门级网表与我们的RTL设计在逻辑和时序上完全一致。但是某些书写风格和设计思路却会造成两者不一致的情况,降低我们的工作效率。本文列举了三种RTL设计与综合后网表不一致的情况,并给出了解决方法.我们以Design Compiler为例,来说明设计RTL时应该注意的问题。在仿真和调试时,我们使用了NC-Verilog和Debussy。
1.不完整的敏感量列表在下面的例子中,有一个always语句,它描述了一个或门,其中它的敏感量列表包含IN1和IN2。

用了几年DSP之后,从TI的定点、16位、40MHz的TMS320F2407A到定点、32位、150MHz的TMS320F2812,再到带有FPU、32位、150MHz的TMS320F28335,感觉其虽然使用简单,在普通应用中,如简单的变频调速等领域完全可以胜任,但其成本因素又显得尤为突出;而在高性能的电机调速系统中又存在其他一些不足,比如其语句采用软件、串行执行,在需要大规模并行处理的时候就十分困难了;TMS320F28335的通用I/O数量虽然高达88个,但是在外扩较多设备时,如外扩A/D、D/A、液晶时,又因地址线、数据线不足、驱动能力不够而捉襟见肘。

Verilog学习心得(转载)

因为Verilog是一种硬件描述语言,所以在写Verilog语言时,首先要有所要写的module在硬件上如何实现的概念,而不是去想编译器如何去解释这个module. 比如在决定是否使用reg定义时,要问问自己物理上是不是真正存在这个register, 如果是,它的clock是什么? D端是什么?Q端是什么?有没有清零和置位?同步还是异步?再比如上面讨论的三态输出问题,首先想到的应该是在register的输出后面加一个三态门,而不是如何才能让编译器知道要“赋值”给一个信号为三态。同样,Verilog中没有“编译”的概念,而只有综合的概念。

说说做好FPGA设计的五项基本功

在我看来,成为一名说得过去的FPGA设计者,需要练好5项基本功:仿真、综合、时序分析、调试、验证。
需要强调的一点是,以上基本功是针对FPGA设计者来说的,不是针对IC设计者的。对于IC设计,我不懂,所以不敢妄言。

同步内容