这里想说一下我对综合选项的设置。设置的依据是ISE的帮助,网上的资料,以及自己的理解。请大家能为我指正设置得不合理的地方。没有提及的选项采用缺省设置。采用的EDA软件是ISE 13.2,综合器为XST。
【Synthesis Options】
Use Synthesis Constraints File & Synthesis Constraints File:
一般来说,会在implement之前,采用UCF文件对设计进行时序约束。实际上,在synthesis之前,可以先采用XCF文件对设计进行时序约束,以使XST针对时序约束进行synthesis,在synthesis时产生更好的网表。按照网上的说法,XCF中的时序约束应当要比实际需求更紧一些。
XCF文件的实际效果嘛。我谈一下自己使用XST的情况吧。XST完成综合(synthesis)后,会产生一个估计的最大工作频率。某一次综合后,我使用XCF文件将最大工作频率约束的比XST的估值大一些,再重新进行综合后,XST给出的估值确实增大了少许。大部分时候,在重新综合后是看不到效果的。至于对最终结果的影响,就不得而知了。
XCF文件的语法与UCF文件完全一致。与UCF不同,ISE没有为XCF提供编辑的工具,只能自己用文本编辑器编辑。
Keep Hierarchy:
这个选项是设置是否在synthesis与implement中打破设计的层次结构。选项【yes】和【no】很容易理解。选项【soft】的意思则是在综合时不打破层次结构,而在之后打破层次结构。
个人理解。打破层次结构后,有些信号就变了,不利于分析与约束。而打破层次结构,更有利于电路的优化。
【HDL Options】
FSM Encoding Algorithm:
有限状态机的编码方式。我采用了【One-Hot】(独热码)。其优缺点相信大家都非常清楚,不再赘述了。
Case Implementation Style:
case语句的实现方式。使用verilog时,缺省状态下XST不会把case语句综合成你想象的结构。这点,大家可以自己写一段简单的代码试试。
以一个独热码状态机为例:
以下是代码片段: reg [2:0] sta; case(1'b1) sta[2]: ...; sta[1]: ...; sta[0]: ...; endcase |
首先,综合出来的电路不止判断一个比特。XST不知道sta只会出现3'b100、3'b010、3'b001三种可能,它会把诸如3'b101这样的状态也考虑在内,大概把电路综合成如下的样子:
以下是代码片段: reg [2:0] sta; case (sta) 3'b001: ...; 3'b010: ...; 3'b100: ...; default: ...; endcase |
这样,采用独热码似乎没有什么意义。而且因为采用独热码时,sta的比特数比采用格雷码时更多,复杂度反而还增加了。
另外,XST也可能没有把case语句转换为并行结构,而是有优先级的结构。
【Case Implementation Style】中有三个选项:【Full】、【Parallel】与【Full-Parallel】。其中,【Full】针对上述的第一点,向XST说明有些状态是不可能出现的,让XST不要考虑太多;【Parallel】让XST将case语句综合为并行的电路结构;【Full-Parallel】则是两者的结合。
对于状态机,这项设置的影响很大。器件为xc6vlx240t-1ff1156时,同样代码的8状态独热码状态机,缺省设置时占用11个寄存器、6个查找表,只能工作在575 MHz时钟频率下;改为【Full-Parallel】设置后,占用11个寄存器、3个查找表,可以工作在900 MHz时钟频率下。
【Xilinx Sepcific Options】
文章评论(0条评论)
登录后参与讨论