本文介绍了如何利用工具提高效率,应用程度因人而异。
情况:在FPGA设计的初始系统规划中,需要划分模块,定义模块接口。通常,我们一开始会在纸上设计,到了某个阶段,最终版本可能会输入到Visio等工具中,以方便团队内部的沟通和评审。虽然我们可以随便在纸上写字,但是用纸画画的不便之处在于,如果我们要做一些改动或者重画一个模块,往往会因为剩余的备用纸不够而用新的白纸重新画一遍,浪费时间。对于电子Visio来说,方便修改是有好处的,但不是专门为设计FPGA系统而设计的。添加输入输出端口就没那么方便了,也不会根据定义的模块自动生成HDL文件。
HDL问题:我们可以使用更好的软件进行系统规划吗?
解决方法:答案是肯定的。以下是ISE 10.1的一个示例:
1)绘制一个空模块,只定义端口-新建原理图,选择工具-符号向导,在这里可以定义符号名称和端口属性。完成后生成sym格式符号。如果端口是总线,它可以是A(4:0)的形式。
2)将符号添加到原理图中-在原理图的符号页面上,选择Categories作为项目文件夹,在符号列表中可以看到新创建的符号。将其添加到示意图中。
3)重复步骤1-2,建立所有符号并连接端口。如果需要修改连接的名称或模块的别名,可以选择需要修改名称的组件,然后右键单击-------------------------------------------------对象属性----------------并在Name/InstName窗格中填写所需的名称。
4)如果需要修改符号,可以直接在sym文件中修改——可以通过右键-添加-Pin来添加,也可以复制已有的Pin,然后更改PinName。但是ISE10.1的符号编辑器有一些Add Pin的bug。因此,在UltraEditor中打开这个sym文件并在其中进行修改可能是一个更好的方法。Sym文件格式很好理解。更改符号端口后需要UpdateSchematic。点击原理图后会自动弹出更新对话框。5)生成与原理图相对应的HDL文件-点击“项目中的源”列表中的sch文件,并在“流程”窗口中选择“查看HDL功能模型”。这样会自动生成对应原理图的HDL文件,实例化上述模块。要更改HDL文件类型,您可以在项目属性中更改“生成的模拟语言”属性。
6)生成对应于符号的HDL文件-当打开一个sym文件时,选择工具-从符号生成HDL模板。此时,您可以选择生成VHDL或Verilog文件。
至此,我们已经生成了顶层文件和要开发的子模块文件,可以在此基础上进行开发了。在开发过程中,我们可能会遇到这些问题:
1.我想打印设计——除了ISE的打印功能,你还可以用Synplify Pro或者PlanAhead打印出漂亮的图纸。因为以上过程生成的代码都是可以合成的,带有端口信息的HDL会被合成工具认为是一个黑盒包装器,所以我们可以用ISE或者Synplify来合成这些代码,合成工具会生成一个漂亮的RTL原理图。除了用ISE和Synplify打开这些集成网表生成RTL原理图外,还可以用PlanAhead打开集成网表,其原理图显示功能更强大。
2.我想修改一些模块的端口并添加连接。我还需要编辑和修改原始原理图上的模块端口吗?这是一个见仁见智的问题。个人比较喜欢用端口信息生成HDL后,修改HDL -合成-在PlanAhead中生成需要的连接图-打印-继续思考在打印稿上书写划线-继续修改HDL。
5.3.综合和模拟技能
作者:田芸/云创工作室
5.3.1综合工具XST的使用
所谓综合,就是将HDL语言、原理图等设计输入翻译成and、OR、NOT门、ram、触发器等基本逻辑单元的逻辑连接(网表),并根据目标和要求(约束)对生成的逻辑连接进行优化,生成EDF文件。XST被嵌入到ISE 3的更高版本中,并且在不断改进。另外,由于XST是Xilinx自带的综合工具,与Xilinx部分芯片的独特结构有更好的集成。
输入、仿真、管脚分配完成后,就可以综合实现了。在流程管理区双击合成-XST,如图5-1所示,即可完成合成,并给出初步的资源消耗。图5-2显示了模块占用的资源。
图5-1设计集成窗口
图5-2综合结果报告
合成有三种可能的结果:如果合成完全正确,合成前面有一个带勾的绿色小圆圈——XST;如果有警告,会出现一个带感叹号的黄色小圆圈;如果有错误,会出现一个带叉的红色小圆圈。综合完成后,可以双击查看RTL原理图,查看RTL级结构图,看综合结构是否按照设计意图实现电路。ISE将自动调用原理图编辑器ECS来浏览RTL结构。对于一个计数器,其RTL结构图如图5-3所示,综合结果符合设计者的意图。加法器和寄存器被调用来完成逻辑。
图5-3合成后的RTL层级结构图
2.综合参数设置
通常,使用XST时,所有属性都采用默认值。事实上,XST可以为不同的逻辑设计提供丰富灵活的属性配置。ISE9.1中嵌入的XST属性描述如下。在ISE中打开设计项目,在过程管理区选择“合成-XST”,右键打开如图5-4所示的界面。
图5-4综合选项
从图5-4可以看出,XST配置页面分为三类:综合选项、HDL选项和Xilinx特定选项,用于设置全面的全局目标和整体策略、HDL硬件语法规则和Xilinx特定的结构属性。
1)综合选项参数
综合参数配置界面如图5-4所示,包括八个选项,如下所示:
【优化目标】:优化的目标。该参数决定了综合工具优化设计时是面积优先还是速度优先的原则。区域优先原则可以节省器件内部的逻辑资源,即尽可能采用串行逻辑结构,但这是以牺牲速度为代价的。速度优先原则保证了器件的整体工作速度,即尽可能采用并行逻辑结构,但这样会浪费器件内部大量的逻辑资源,所以是以牺牲逻辑资源为代价的。
[优化工作]:优化程序的工作。有两个选项:[正常]和[高]。对于[普通],优化器只对逻辑设计进行普通的优化,结果可能不是最好的,但综合优化过程执行得更快。如果选择【高】,优化器会反复优化分析逻辑设计,并能生成最理想的综合优化结果。这种模式通常用于高性能和最终设计。当然,这需要很长时间的综合和优化。
[使用合成约束文件]:使用综合约束文件。如果选择了此选项,则综合约束文件XCF有效。
【综合约束文件】:综合约束文件。该选项用于指定XST综合约束文件XCF的路径。
【全局优化目标】:全局优化目标。可选择的属性包括[所有时钟线]、[输入输出线]、[之前报价]、[之后报价]和[最大延迟]。该参数仅对FPGA器件有效,可用于选择设置寄存器之间、输入引脚与寄存器之间、寄存器与输出引脚之间或输入引脚与输出引脚之间的逻辑优化策略。
[生成RTL原理图]:生成寄存器传输级视图文件。该参数用于从综合结果中生成RTL视图。
【写时序约束】:写时序约束。该参数仅对FPGA有效,用于设置是否将HDL源代码中用于控制合成的时序约束转移到NGC网表文件,该文件用于布局布线。
[Verilog 2001]:选择是否支持Verilog 2001版本。
HDL语言选项
HDL语言选项的配置界面如图5-5所示,包括16个选项,如下所示:
图5-5 HDL语言选项的配置界面选项
【FSM编码算法】:有限状态机编码算法。此参数用于指定有限状态机的编码方法。选项包括自动、一键、紧凑、顺序、灰色、约翰逊、用户、速度1和无,默认为自动。
【安全实现】:有限状态机将通过增加安全模式约束来实现,增加额外的逻辑将状态机从无效状态切换到有效状态,否则只能通过复位来实现。有两个选项:是和否,默认为否.
【案例实现系统butterfly】:条件语句的实现类型。该参数用于控制XST综合工具来解释和推断Verilog的条件语句。选项包括无、完全、平行和完全平行,默认为无。对于这四个选项,区别如下:(1)【无】,XST会在程序中保留条件语句的原型,不做任何处理;(2)【完整】,XST认为条件语句是完整的,避免了锁存器的产生;(3)【并行】,XST认为条件语句中不能生成分支,没有使用优先级编码器;(4)【全并行】,XST认为条件语句是完整的,内部没有分支,没有使用锁存器和优先级编码器。
【RAM抽取】:内存扩展。该参数仅对FPGA有效,用于启用和禁用RAM宏接口。默认情况下,允许使用RAM宏接口。
[ramstyle]: RAM实现类型。该参数仅对FPGA有效,用于选择使用块RAM还是分布式RAM作为RAM的实现类型。默认值为[自动]。
[ROM提取]:只读存储器扩展。该参数仅对FPGA有效,用于启用和禁用ROM宏接口。默认情况下,允许ROM宏接口。
【rom风格】:ROM实现类型。该参数仅对FPGA有效,用于选择使用块RAM还是分布式RAM作为ROM的实现和推理类型。默认值为[自动]。
[Mux提取]:多路复用器扩展。该参数用于启用和禁用多路复用器的宏接口。根据一些预设的算法,XST可以为每个识别的多路复用器/选择器创建一个宏,并优化逻辑。您可以选择[是]、[否]和[强制]中的任意一个,默认为[是]。
[Mux Style]:复用实现类型。该参数用于选择胃宏发生器的实现,并推断多路复用器/选择器的宏类型。您可以选择[自动]、[MUXF]和[MUXCY]中的任意一个,默认为[自动]。
【解码器提取】:解码器扩展。此参数用于启用和禁用解码器的宏接口,默认情况下是允许的。
[优先编码器提取]:优先解码器扩展。此参数用于指定是否优先使用编码器宏单元。
【移位寄存器提取】:移位寄存器扩展。该参数仅对FPGA有效,用于指定是否使用移位寄存器宏单元。默认启用。
[逻辑移位器提取]:逻辑移位寄存器扩展。该参数仅对FPGA有效,用于指定是否使用逻辑移位寄存器宏单元。默认启用。
【异或折叠】:异或逻辑合并模式。该参数仅对FPGA有效,用于指定是否将级联的XOR逻辑单元合并成一个大的XOR宏逻辑结构。默认启用。
【资源共享】:资源共享。该参数用于指定在XST合成时,是否允许复用一些运算处理模块,如加法器、减法器、加减器、乘法器等。默认启用。如果综合工具的选择是基于速度第一的原则,那么就不考虑资源共享。
【乘法器样式】:乘法器实现类型。该参数仅对FPGA有效,用于指定宏生成器如何使用乘法器宏单元。选项有[自动]、[阻塞]、[LUT]和[管道_LUT]。默认值为[自动]。所选乘法器实现类型与所选设备相关。
2) Xilinx特殊选项
Xilinx special option用于使用户逻辑适应Xilinx芯片的特殊结构,不仅可以节省资源,还可以提高设计的工作频率。其配置界面如图5-6所示,包括10个配置选项,如下所示。
图5-6 Xilinx指定的选项
[添加I/O缓冲器]:插入一个I/O缓冲器。该参数用于控制集成模块是否自动插入I/O缓冲器。默认为自动插入。
[最大扇出]:扇出的最大数量。此参数用于指定信号和网络电缆的最大扇出数。这里,扇出数的选择直接关系到设计的性能,需要用户合理选择。
【寄存器复制】:寄存器复制。该参数用于控制是否允许复制寄存器。复制扇出高、时序不理想的寄存器,可以减少缓冲器输出和逻辑级数,改变时序的某些特性,提高设计的工作频率。默认情况下允许寄存器复制。
【等效寄存器删除】:删除等效寄存器。该参数用于指定在寄存器传输阶段是否删除功能等同的寄存器,可以减少寄存器资源的使用。如果Xilinx的硬件原语指定了一个寄存器,它将不会被删除。默认启用。
【寄存器平衡】:寄存器平衡。该参数仅对FPGA有效,用于指定是否允许平衡寄存器。选项有[否]、[是]、[向前]和[向后]。使用寄存器平衡技术可以改善某些设计的时序条件。其中[Forward]是前向寄存器平衡,[Backward]是后向寄存器平衡。寄存器平衡后,使用的寄存器数量会相应增加或减少。默认情况下,寄存器不平衡。
[移动第一个触发器级]:移动前一个寄存器。该参数仅对FPGA有效,用于控制寄存器匹配期间是否允许移动前一个寄存器。如果[套准平衡]设置为[否],则该参数的设置无效。
[移动最后一个触发器级]:移动后级寄存器。该参数仅对FPGA有效,用于控制寄存器匹配期间是否允许移动后一个寄存器。如果[套准平衡]设置为[否],则该参数的设置无效。
[将I/O寄存器打包到iob]:I/O寄存器放在输入和输出模块中。该参数仅对FPGA有效,用于控制逻辑设计中的寄存器是否用IOB内部寄存器实现。Xilinx系列FPGA的IOB中有输入和输出寄存器。如果用IOB内部寄存器实现设计中的一级寄存器或末级寄存器,可以缩短IO引脚到寄存器的路径,通常可以缩短传输延迟约1~2ns。默认值为[自动]。
【切片包装】:优化切片结构。该参数仅对FPGA有效,用于控制是否将关键路径的查找表逻辑尽量配置在同一个片或CLB模块中,以缩短lut之间的布线。该功能对于改善设计的工作频率和时序特性非常有用。默认值是允许优化切片结构。
[优化实例化图元]:优化实例化图元。该参数控制HDL代码中实例化的原语是否需要优化。默认情况下没有优化。
代码写好之后,需要使用测试平台来验证设计的模块是否符合要求。ISE提供了两种搭建测试平台的方法,一种是使用HDL Bencher的图形波形编辑功能,另一种是使用HDL语言,比前者更简单,功能更强大。下面介绍基于Verilog语言建立测试平台的方法。
首先在项目管理区将“Sources for”设置为Behavioral Simulation,右击任意位置,在弹出菜单中选择“New Source”,然后选择“Verilog Test Fixture”类型,输入文件名为“test_test”,然后点击“下一步”进入下一页。此时会显示项目中所有Verilog模块的名称,设计人员需要选择要测试的模块。
用鼠标选择测试,点击“下一步”进入下一页。直接点击“完成”,ISE会自动在源代码编辑区显示测试模块的代码:
`时间刻度1 ns/1ps模块test _ test _ v;//Inputsreg clk;reg[7:0]din;//outputs wire[7:0]dout;//实例化被测单元(UUT)test uut(。clk(时钟),din(德国工业标准)。dout(dout));initial begin//Initialize inputs clk=0;din=0;//等待100 ns全局复位完成# 100;//添加刺激hereendendmodule
因此,ISE自动生成了测试平台的完整架构,包括所需的信号、端口声明和模块调用的完成。所需工作是在initial…end模块中的“//Add Simulus Here”之后添加测试向量生成代码。添加的测试代码如下:
永远开始# 5;clk=!clkif(clk==1)din=din 1;elsedin=din结束
完成测试平台后。在项目管理区将“来源”选项设置为行为模拟,与模拟相关的流程将显示在流程管理区,如图5-7所示。
图5-7模拟过程示意图
在图5-7中选择Xilinx ISE模拟器下的模拟行为模型项,单击鼠标右键,在弹出的菜单中选择属性项,弹出如图5-8所示的属性设置对话框。最后一行的模拟运行时间是模拟时间的设置,可以修改为任意长度。本例中采用默认值。
图5-8模拟属性设置对话框
设定好模拟参数后,就可以进行模拟了。直接双击ISE模拟器软件中的模拟行为模型,ISE会自动启动ISE模拟器软件,得到如图5-9所示的模拟结果,从中可以看出设计达到了预期目标。
审计彭静
标签:参数模块图