在ISE中的一个工程中如何加入edf和v文件

第3节 基于ISE的开发流程

本节所有的讲解都以例4-3所示的代码为基础展开。

例4-3 ISE开发流程演示代码,将输入的数据加1寄存并输出。

所谓综合,就是将HDL语言、原理图等设计输入翻译成由与、或、非门和RAM、触发器等基本逻辑单元的逻辑连接(网表),并根据目标和要求(约束条件)优化所生成的逻辑连接,生成EDF文件。XST内嵌在ISE 3以后的版本中,并且在不断完善。此外,由于XST是Xilinx公司自己的综合工具,对于部分Xilinx芯片独有的结构具有更好的融合性。


完成了输入、仿真以及管脚分配后就可以进行综合和实现了。在过程管理区双击Synthesize-XST,如图4-24所示,就可以完成综合,并且能够给出初步的资源消耗情况。图4-25给出了模块所占用的资源。

图4-24 设计综合窗口

图4-25 综合结果报告


综合可能有3种结果:如果综合后完全正确,则在Synthesize-XST前面有一个打钩的绿色小圈圈;如果有警告,则出现一个带感叹号的黄色小圆圈,如本例所示;如果有错误,则出现一个带叉的红色小圈圈。综合完成之后,可以通过双击View RTL Schematics来查看RTL级结构图,察看综合结构是否按照设计意图来实现电路。ISE会自动调用原理图编辑器ECS来浏览RTL结构,所得到的RTL结构图如图4-26所示,综合结果符合设计者的意图,调用了加法器和寄存器来完成逻辑。

图4-26 经过综合后的RTL级结构图

一般在使用XST时,所有的属性都采用默认值。其实XST对不同的逻辑设计可提供丰富、灵活的属性配置。下面对ISE9.1中内嵌的XST属性进行说明。打开ISE中的设计工程,在过程管理区选中“Synthesis –XST”并单击右键,弹出界面如图4-27所示。

综合参数配置界面如图4-27所示,包括8个选项,具体如下所列:

【Optimization Goal】:优化的目标。该参数决定了综合工具对设计进行优化时,是以面积还是以速度作为优先原则。面积优先原则可以节省器件内部的逻辑资源,即尽可能地采用串行逻辑结构,但这是以牺牲速度为代价的。而速度优先原则保证了器件的整体工作速度,即尽可能地采用并行逻辑结构,但这样将会浪费器件内部大量的逻辑资源,因此,它是以牺牲逻辑资源为代价的。 Effort】:优化器努力程度。这里有【normal】和【high】两种选择方式。对于【normal】,优化器对逻辑设计仅仅进行普通的优化处理,其结果可能并不是最好的,但是综合和优化流程执行地较快。如果选择【high】,优化器对逻辑设计进行反复的优化处理和分析,并能生成最理想的综合和优化结果,在对高性能和最终的设计通常采用这种模式;当然在综合和优化时,需要的时间较长。
Delay】。该参数仅对FPGA器件有效,可用于选择所设定的寄存器之间、输入引脚到寄存器之间、寄存器到输出引脚之间,或者是输入引脚到输出引脚之间逻辑的优化策略。
【Generate RTL Schematic】:生成寄存器传输级视图文件。该参数用于将综合结果生成RTL视图。
【Write Timing Constraints】:写时序约束。该参数仅对FPGA有效,用来设置是否将HDL源代码中用于控制综合的时序约束传给NGC网表文件,该文件用于布局和布线。

HDL语言选项的配置界面如图4-28所示,包括16个选项,具体如下所列:

图4-28 HDL语言选项的配置界面选项


【Safe Implementation】:将添加安全模式约束来实现有限状态机,将添加额外的逻辑将状态机从无效状态调转到有效状态,否则只能复位来实现,有【Yes】、【No】两种选择,默认为【No】。
对于这四种选项,区别如下:(1)【None】,XST将保留程序中条件语句的原型,不进行任何处理;(2)【Full】,XST认为条件语句是完整的,避免锁存器的产生;(3)【Parallel】,XST认为在条件语句中不能产生分支,并且不使用优先级编码器;(4)【Full-Parallel】,XST认为条件语句是完整的,并且在内部没有分支,不使用锁存器和优先级编码器。
【RAM Extraction】:存储器扩展。该参数仅对FPGA有效,用于使能和禁止RAM宏接口。默认为允许使用RAM宏接口。

【RAM Style】:RAM实现类型。该参数仅对FPGA有效,用于选择是采用块RAM还是分布式RAM来作为RAM的实现类型。默认为 【Auto】。

【ROM Extraction】:只读存储器扩展。该参数仅对FPGA有效,用于使能和禁止只读存储器ROM宏接口。默认为允许使用ROM宏接口。

【ROM Style】:ROM实现类型。该参数仅对FPGA有效,用于选择是采用块RAM还是分布式RAM来作为ROM的实现和推论类型。默认为【Auto】。

【Mux Extraction】:多路复用器扩展。该参数用于使能和禁止多路复用器的宏接口。根据某些内定的算法,对于每个已识别的多路复用/选择器,XST能够创建一个宏,并进行逻辑的优化。可以选择【Yes】、【No】和【Force】中的任何一种,默认为【Yes】。

【Mux Style】:多路复用实现类型。该参数用于胃宏生成器选择实现和推论多路复用/选择器的宏类型。可以选择【Auto】、【MUXF】和【MUXCY】中的任何一种,默认为【Auto】。

【Decoder Extraction】:译码器扩展。该参数用于使能和禁止译码器宏接口,默认为允许使用该接口。

【Priority Encoder Extraction】:优先级译码器扩展。该参数用于指定是否使用带有优先级的编码器宏单元。

【Shift Register Extraction】:移位寄存器扩展。该参数仅对FPGA有效,用于指定是否使用移位寄存器宏单元。默认为使能。

【Logical Shifter Extraction】:逻辑移位寄存器扩展。该参数仅对FPGA有效,用于指定是否使用逻辑移位寄存器宏单元。默认为使能。

【XOR Collapsing】:异或逻辑合并方式。该参数仅对FPGA有效,用于指定是否将级联的异或逻辑单元合并成一个大的异或宏逻辑结构。默认为使能。

【Resource Sharing】:资源共享。该参数用于指定在XST综合时,是否允许复用一些运算处理模块,如加法器、减法器、加/减法器和乘法器。默认为使能。如果综合工具的选择是以速度为优先原则的,那么就不考虑资源共享。

【Multiplier Style】:乘法器实现类型。该参数仅对FPGA有效,用于指定宏生成器使用乘法器宏单元的方式。选项有【Auto】、Block】、【LUT】和【Pipe_LUT】。默认为【Auto】。选择的乘法器实现类型和所选择的器件有关。

Xilinx特殊选项用于将用户逻辑适配到Xilinx芯片的特殊结构中,不仅能节省资源,还能提高设计的工作频率,其配置界面如图4-29所示,包括10个配置选项,具体如下所列。


【Add I/O Buffers】:插入I/O缓冲器。该参数用于控制对所综合的模块是否自动插入I/O缓冲器。默认为自动插入。
【Max Fanout】:最大扇出数。该参数用于指定信号和网线的最大扇出数。这里扇出数的选择与设计的性能有直接的关系,需要用户合理选择。
【Register Duplication】:寄存器复制。该参数用于控制是否允许寄存器的复制。对于高扇出和时序不能满足要求的寄存器进行复制,可以减少缓冲器输出的数目以及逻辑级数,改变时序的某些特性,提高设计的工作频率。默认为允许寄存器复制。
【Equivalent Register Removal】:等效寄存器删除。该参数用于指定是否把寄存器传输级功能等效的寄存器删除,这样可以减少寄存器资源的使用。如果某个寄存器是用Xilinx的硬件原语指定的,那么就不会被删除。默认为使能。
【Register Balancing】:寄存器配平。该参数仅对FPGA有效,用于指定是否允许平衡寄存器。可选项有【No】、【Yes】、 【Forward】和【Backward】。采用寄存器配平技术,可以改善某些设计的时序条件。其中,【Forward】为前移寄存器配平,【Backward】为后移寄存器配平。采用寄存器配平后,所用到的寄存器数就会相应地增减。默认为寄存器不配平。
【Move First Flip-Flop Stage】:移动前级寄存器。该参数仅对FPGA有效,用于控制在进行寄存器配平时,是否允许移动前级寄存器。如果【Register Balancing】的设置为【No】,那么该参数的设置无效。
【Move Last Flip-Flop Stage】:移动后级寄存器。该参数仅对FPGA有效,用于控制在进行寄存器配平时,是否允许移动后级寄存器。如果【Register Balancing】的设置为【No】,那么该参数的设置无效。
IOBs】:I/O寄存器置于输入输出块。该参数仅对FPGA有效,用于控制是否将逻辑设计中的寄存器用IOB内部寄存器实现。在Xilinx系列FPGA的IOB中分别有输入和输出寄存器。如果将设计中的第一级寄存器或最后一级寄存器用IOB内部寄存器实现,那么就可以缩短IO引脚到寄存器之间的路径,这通常可以缩短大约1~2ns的传输时延。默认为【Auto】。
【Slice Packing】:优化Slice结构。该参数仅对FPGA有效,用于控制是否将关键路径的查找表逻辑尽量配置在同一个Slice或者CLB模块中,由此来缩短LUT之间的布线。这一功能对于提高设计的工作频率、改善时序特性是非常有用的。 默认为允许优化Slice结构。
【Optimize Instantiated Primitives】:优化已例化的原语。该参数控制是否需要优化在HDL代码中已例化的原语。默认为不优化。

在代码编写完毕后,需要借助于测试平台来验证所设计的模块是否满足要求。ISE提供了两种测试平台的建立方法,一种是使用HDL Bencher的图形化波形编辑功能编写,另一种就是利用HDL语言。由于后者使用简单、功能强大,所以本节主要介绍基于Verolog语言的测试平台建立方法。

在ISE中创建testbench波形,可通过HDL Bencher修改,再将其和仿真器连接起来,再验证设计功能是否正确。首先在工程管理区将Sources for设置为Behavioral Simulation,然后在任意位置单击鼠标右键,在弹出的菜单中选择“New Source”命令,然后选中“Test Bench WaveForm”类型,输入文件名为“test_bench”,点击Next进入下一页。这时,工程中所有Verilog Module的名称都会显示出来,设计人员需要选择要进行测试的模块。由于本工程只有一个模块,所以只列出了test,如图4-30所示。

图4-30 选择待测模块对话框

用鼠标选中test,点击“Next”后进入下一页,直接点击“Finish”按键。此时HDL Bencher程序自动启动,等待用户输入所需的时序要求,如图4-31所示。


时钟高电平时间和时钟低电平时间一起定义了设计操作必须达到的时钟周期,输入建立时间定义了输入在什么时候必须有效,输出有效延时定义了有效时钟延时到达后多久必须输出有效数据。默认的初始化时间设置如下:

单击“OK”按钮,接受默认的时间设定。测试矢量波形显示如图4-32所示。

图4-32 测试矢量波形


接下来,初始化输入(注:灰色的部分不允许用户修改),修改的方法为:选中信号,在其波形上单击,从该点击所在周期开始,在往后所有的时间单元内该信号电平反相。点击din信号前面的“+”号,在din[7]的第2个时钟周期内单击,使其变高;在din[6]的第3个时钟周期内单击,使其变高;同样的方法修改din[5]~din[0]信号,使其如图4-33所示。

图4-33 初始化输入


然后将testbench文件存盘,则ISE会自动将其加入到仿真的分层结构中,在代码管理区会列出刚生成的测试文件test_bench.tbw,如图4-34所示。

图4-34 测试文件列表


选中test_bench.tbw文件,然后双击过程管理区的“Simulate Behavioral Model”,即可完成功能仿真。同样,可在“Simulate Behavioral Model”选项上单击右键,设置仿真时间等。例4-3的仿真结果如图4-35所示。从中,可以看出,dout信号等于din信号加1,功能正确。

图4-35 功能仿真结果

下面介绍基于Verilog语言建立测试平台的方法。首先在工程管理区将“Sources for”设置为Behavioral Simulation,在任意位置单击鼠标右键,并在弹出的菜单中选择“New Source”命令,然后选中“Verilog Test Fixture”类型,输入文件名为“test_test”,再点击“Next”进入下一页。这时,工程中所有Verilog Module的名称都会显示出来,设计人员需要选择要进行测试的模块。

用鼠标选中test,点击“Next”后进入下一页,直接点击“Finish”按键,ISE会在源代码编辑区自动显示测试模块的代码:

由此可见,ISE自动生成了测试平台的完整架构,包括所需信号、端口声明以及模块调用的完成。所需的工作就是在initial…end模块中的“// Add stimulus here”后面添加测试向量生成代码。添加的测试代码如下:

完成测试平台后。在工程管理区将“Sources for”选项设置为Behavioral Simulation,这时在过程管理区会显示与仿真有关的进程,如图4-36所示。

图4-36 选择待测模块对话框

图4-37 仿真过程示意图

仿真参数设置完后,就可以进行仿真了,直接双击ISE Simulator软件中的Simulate Behavioral Model,则ISE会自动启动ISE Simulator软件,并得到如图4-38所示的仿真结果,从中可以看到设计达到了预计目标。

所谓实现(Implement)是将综合输出的逻辑网表翻译成所选器件的底层模块与硬件原语,将设计映射到器件结构上,进行布局布线,达到在选定器件上实现设计的目的。实现主要分为3个步骤:翻译(Translate)逻辑网表,映射(Map)到器件单元与布局布线(Place & Route)。翻译的主要作用是将综合输出的逻辑网表翻译为Xilinx特定器件的底层结构和硬件原语(具体的原语详见第3章中的原语介绍)。映射的主要作用是将设计映射到具体型号的器件上(LUT、FF、Carry等)。布局布线步骤调用Xilinx布局布线器,根据用户约束和物理约束,对设计模块进行实际的布局,并根据设计连接,对布局后的模块进行布线,产生FPGA/CPLD配置文件。

在翻译过程中,设计文件和约束文件将被合并生成NGD(原始类型数据库)输出文件和BLD文件,其中NGD文件包含了当前设计的全部逻辑描述,BLD文件是转换的运行和结果报告。实现工具可以导入EDN、EDF、EDIF、SEDIF格式的设计文件,以及UCF(用户约束文件)、NCF(网表约束文件)、NMC(物理宏库文件)、NGC(含有约束信息的网表)格式的约束文件。翻译项目包括3个命令:

在映射过程中,由转换流程生成的NGD文件将被映射为目标器件的特定物理逻辑单元,并保存在NCD(展开的物理设计数据库)文件中。映射的输入文件包括NGD、NMC、NCD和MFP(映射布局规划器)文件,输出文件包括NCD、PCF(物理约束文件)、NGM和MRP(映射报告)文件。其中MRP文件是通过Floorplanner生成的布局约束文件,NCD文件包含当前设计的物理映射信息,PCF文件包含当前设计的物理约束信息,NGM文件与当前设计的静态时序分析有关,MRP文件是映射的运行报告,主要包括映射的命令行参数、目标设计占用的逻辑资源、映射过程中出现的错误和告警、优化过程中删除的逻辑等内容。映射项目包括如下命令:

【Map Report】用以显示映射步骤的报告;


【Manually Place & Route (FPGA Editor)】用以启动FPGA底层编辑器进行手动布局布线,指导Xilinx自动布局布线器,解决布局布线异常,提高布局布线效率;
【Generate Post-Map Simulation Model】用以产生映射步 骤后仿真模型,由于该仿真模型不包含实际布线时延,所以有时也省略此仿真步骤。

Route):通过读取当前设计的NCD文件,布局布线将映射后生成的物理逻辑单元在目标系统中放置和连线,并提取相应的时间参数。布局布线的输入文件包括NCD和PCF模板文件,输出文件包括NCD、DLY(延时文件)、PAD和PAR文件。在布局布线的输出文件中,NCD包含当前设计的全部物理实现信息,DLY文件包含当前设计的网络延时信息,PAD文件包含当前设计的输入输出(I/O)管脚配置信息,PAR文件主要包括布局布线的命令行参数、布局布线中出现的错误和告警、目标占用的资源、未布线网络、网络时序信息等内容。布局布线步骤的命令与工具非常多:

经过综合后,在过程管理区双击“Implement Design”选项,就可以完成实现,如图4-39所示。经过实现后能够得到精确的资源占用情况,如图4-40所示。

图4-39设计实现窗口

图4-40实现后的资源统计结果

一般在综合时,所有的属性都采用默认值。实际上ISE提供了丰富的实现属性设置。下面对ISE9.1中内嵌的XST属性进行说明。打开ISE中的设计工程,在过程管理区选中“Implement Design”并单击右键,弹出界面如图4-41所示,包括翻译、映射、布局布线以及后仿时序参数等。

图4-41 实现属性设置窗口

1. 翻译参数设置窗口

【Macro Search Path】:宏查找路径。用于提供宏的存放路径。


【Allow Unexpanded Blocks】:允许未展开的逻辑块。用来说明当遇到不能展开NGD原语的块时,NGDBuild工具是否继续运行。如果在设计中没有较低级的模块,该参数允许NGDBuild运行结束而不出现错误。默认值为【False】。

2. 映射参数设置窗口

图4-42 映射参数设置窗口


【Trim Unconnected Signals】:整理未连接的信号。该参数用于控制在映射之前,是否整理未连接的逻辑单元和连线。该参数有助于评估设计中的逻辑资源,并获得部分设计的时序信息。默认值为需要整理。
【Generate Detailed MAP Report】:生成详细的映射报告。该参数用来选择是否需要生成详细的映射报告。详细的映射报告将提示在映射时去掉的多余逻辑块和信号,以及提示展开的逻辑,交叉引用的信号、符号等。默认值为不产生详细的映射报告。
【Pack I/O Registers/Latches into IOBs】:选择输入输出块中的寄存器/锁存器。该参数用来控制是否将器件内部的输入/输出寄存器用IOBs中的寄存器/锁存器来取代。可以选择:①【For Inputs and Outputs】,尽可能将设计中输入/输出寄存器放入IOBs;②【For Inputs Only】,仅考虑把输入寄存器放入IOBs;③【For Outputs Only】,仅考虑把输出寄存器放入IOBs;④【Off】,采用用户的设计要求进行处理,不考虑自动选择方式。

3. 布局布线参数设置窗口

图4-43 布局布线参数设置窗口

【Place And Route Mode】:布局布线方式。该参数用来指定采用哪种方式来进行布局布线处理。可以选择:①【Normal Place and Route】,一般的布局布线处理,该方式为默认值;②【Place Only】,运行所选择的布局布线努力程度,但不运行布线器,当选择该参数后,布局布线器至少运行一次;③【Route Only】, 运行所选择的布局布线努力程度,但不运行布局器,当选择该参数后,布局布线器至少运行一次;④【Reentrant Route】, 重复布线,保持布局布线方式,布线器用当前的路由再一次布线。该布线器由努力程度来控制。
(Overall)】:全局的布局布线努力程度。该参数控制布局布线流程的努力程度和运行次数。根据需要可以选择【Standard】、【Medium】和【High】。如果选择【Standard】,将会有最快的运行时间,但不会有好的布局布线效果,不适合于复杂的逻辑设计;如果选择【High】,将会对逻辑设计进行反复的布局布线处理,并生成最理想的布局布线结果,对高性能、复杂和最终的设计通常采用这种模式,但比较费时。默认值为【Standard】。
【Use Timing Constraints】:使用时序约束。在布局布线期间,需使用UCF和PCF文件中时序约束条件。默认值为使用时序约束。
【Use Bonded I/Os】: 使用绑定的I/Os。该参数用来选择是否允许布局布线器将内部的输入输出逻辑放到I/Os脚未使用的用于绑定I/Os的位置。该参数也允许布线资源穿过用于绑定I/Os的位置。默认值为该参数无效。
【Generate Asynchronous Delay Report】:生成异步延迟报告。该参数用来选择是否在布局布线运行时生成异步延迟报告。该报告列出了设计中所有的网线和网络上所有负载的延迟。通过执行【Asynchronous Delay Report Process】,可以打开该报告。默认值为不生成异步延迟报告。

4.映射后静态时序报告参数设置窗口

图4-44 映射后静态时序报告参数设置窗口

5.布局布线后静态时序报告参数设置窗口

图4-45 布局布线后静态时序报告参数设置窗口

6.仿真模型参数设置窗口

图4-46仿真模型参数设置窗口

4.3.4 基于ISE的硬件编程 本节简要介绍ISE软件中的硬件编程流程,详细的配置电路原理以及软件配置参数将在第5章讲解。生成二进制编程文件并下载到芯片中,也就是所谓的硬件编程和下载,是FPGA设计的最后一步。生成编程文件在ISE中的操作非常简单,在过程管理区中双击Generate Programming File选项即可完成,完成后则该选项前面会出现一个打钩的圆圈,如图4-36所示。生成的编程文件放在ISE工程目录下,是一个扩展名为.bit的位流文件。

图4-48 生成编程文件的窗口


到此,只剩下完成设计的最后一步——下载。双击过程管理区的Generate Programming File选项下面的Configure Device(iMPACT)项,然后在弹出的Configure Device对话框中选取合适的下载方式,ISE会自动连接FPGA设备。成功检测到设备后,会出现如图4-37所示的iMPACT的主界面。


在主界面的中间区域内单击鼠标右键,并选择菜单的“Initialize Chain”选项,如果FPGA配置电路JTAG测试正确,则会将JTAG链上扫描到的所有芯片在iMPACT主界面上列出来,如图4-35(a)所示;如果JTAG链检测失败,其弹出的对话框如图4-35(b)所示。

(a) JTAG链扫描正确后的窗口界面 (b) JTAG链扫描正确后的窗口界面


JTAG链检测正确后,在期望FPGA芯片上点击右键,在弹出的菜单中选择“Assign New Configuration File”,会弹出图4-36的窗口,让用户选择期望后缀为.bit的二进制比特流文件。

图4-51选择位流文件


选中下载文件后,单击“打开”按键,在iMPACT的主界面会出现一个芯片模型以及位流文件的标志,在此标志上单击鼠标右键,在弹出的对话框中选择Program选项,就可以对FPGA设备进行编程,如图4-37所示

图4-52对FPGA设备进行编程示意图

配置成功后,会弹出配置成功的界面,如图4-53所示。


至此,就完成了一个完整的FPGA设计流程。当然,ISE的功能十分强大,以上介绍只是其中最基本的操作,更多的内容和操作需要读者通过阅读ISE在线帮助来了解,在大量的实际实践中来熟悉。

}

我要回帖

更多关于 edf 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信