很明显,读者会发现,在本章前面一节介绍浮点数运算的HDL描述方法时,使用的是VHDL提供的浮点运算库。在使用Quartus Prime Pro 2019.4集成开发环境对设计执行完Analysis Synthesis后,然后通过Technology Map Viewer(Post-Mapping)查看综合后的网表结构,你会看到浮点运算使用了Intel FPGA内大量的逻辑设计资源。很明显,这会降低浮点运算的整体性能,设计在“性能”和“面积”方面都很难满足设计要求。
Intel FPGA的一个显著优势就是在其FPGA内集成了可以直接实现浮点数字信号处理的DSP阵列,配合Intel提供的Floating Point Functions Intel FPGA IP核,可以实现高性能的浮点运算,并且不会使用FPGA内的逻辑设计资源,很好地实现了“面积”和“性能”的权衡。
Floating Point Functions Intel FPGA IP核的主要特性包括:
(1)支持浮点格式;
(2)输入支持不是一个数(not-a-number,NaN)、无穷大、零和普通的数;
(3)可选的异步输入端口,包括异步清除(aclr)和时钟使能(clk_en);
(4)支持舍入到最近的舍入模式;
(5)根据IEEE-754标准,计算任何数学运算的结果,最后一位(u.l.p)的误差最大为1个单位。该假设适用于除复杂矩阵乘法和逆运算(如ALTFP_MATRIX_MULTI和ALFP_MATRIX_INV)之外的所有浮点IP核,其中由于数学运算器件的误差累积,导致误差略有增加;
(6)浮点IP核不支持非正常的数字输入。如果输入为非正常值,则IP核会在执行任何操作之间将其强制为零并将该值看作零。
本小节将介绍如何建立新的设计工程,其主要步骤如下所示。
(1)打开Quartus Prime Pro 2019.4(以下简称Quartus Prime)集成开发环境。
(2)在Quartus Prime集成开发环境主界面的主菜单下,选择File→New Project Wizard…,出现“New Project Wizard-Introduction”对话框。
(3)在“New Project Wizard-Introduction”对话框中,单击“Next”按钮,出现“New Project Wizard-Directory,Name,Top-Level Entity”对话框。
(4)在“New Project Wizard-Directory,Name,Top-Level Entity”对话框中,按如下设置参数。
① What is the working directory for this project?:f:\intel_dsp_example\example_3_41.
② what is the name of this project?:top。
(5)单击“Next”按钮出现“Quartus Prime”对话框。
(6 )在 “Quartus Prime”对话框中提示信息 “Directory “e:\intel_dsp_example\example_3_41”does not exist.Do you want to create it?”。
(7)单击“Yes”按钮,出现“New Project Wizard-Project Type”对话框。
(8)在“New Project Wizard-Project Type”对话框中,默认勾选“Empty project”前面的复选框。
(9)单击“Next”按钮,出现“New Project Wizard-Add Files”对话框。
(10 )单击 “Next”按钮,出现 “New Project Wizard-Family,Device&Board Settings”对话框。
(11 )在 “New Project Wizard-Family,Device&Board Settings”对话框中,选择FPGA器件的具体型号为 “10CX085YU484E6G”。
(12)单击“Next”按钮,出现“New Project Wizard-EDA Tool Settings”对话框。
(13)在“New Project Wizard-EDA Tool Settings”对话框中,按如下设置参数。
① Design Entity/Synthesis:Synplify;
② Simulation:ModelSim-Intel FPGA:Verilog HDL;
③ Board-Level:Signal Integrity:IBIS。
(14)单击“Next”按钮,出现“New Project Wizard-Summary”对话框。
(15)单击“Finish”按钮。
本小节将介绍如何生成一个浮点IP核的实例,其主要步骤如下所示。
(1)在Quartus Prime右侧“IP Catalog”窗口的搜索框中输入关键字“float”,在窗口下面则会给出与float相关的IP核列表。在Library→Basic Functions→Arithmetic下,找到并用鼠标双击“Float Point Functions Intel FPGA IP”,弹出“New IP Variant”对话框。
(2)在“New IP Variant”对话框文件名右侧的文本框中输入“float_math”。
(3)单击“Create”按钮,弹出“IP Parameter Editor Pro”界面,如图3.44所示。
图3.44 “IP Parameter Editor Pro”界面
(4)在“IP Parameter Editor Pro”界面中,按如下设置参数。
① Family:Arithmetic;
② Name:Multiply;
③ Format:Single。
(5)单击图3.44右下角的“Generate HDL…”按钮,弹出“Generation”界面,如图3.45所示。
图3.45 “Generation”界面
(6)在“Generation”界面中,按如下设置参数。
① Create HDL design files for synthesis:Verilog;
② 勾选“Create block symbol file(.bsf)”前面的复选框;
③ 勾选“Generate IP Core Documentation”前面的复选框;
④ Create simulation model:Verilog;
⑤ 其余按默认参数设置。
(7)单击“Generate”按钮,退出“Generation”界面,弹出“Save changes before refresh?”对话框。
(8)在“Save changes before refresh?”对话框中,提示信息“Save?Changes to unsaved systems will be lost on refresh”。
(9)单击“是(Y)”按钮,退出“Save changes before refresh?”对话框,弹出“Generate”界面。
(10)在“Generate”界面中,显示出了生成过程中的信息。
(11)生成过程结束后,弹出“Generate Completed”对话框。
(12)单击“Close”按钮,退出“Generate Completed”对话框。
(13)单击图3.44右上角的按钮×,退出“IP Parameter Editor Pro”界面。
本小节将介绍如何生成顶层Verilog HDL文件和在该文件中如何例化IP核实例,其主要步骤如下所示。
(1)在Quartus Prime主界面的主菜单下,选择File→New,弹出“New”对话框。
(2)在“New”对话框中的Design Files下面找到并选择Verilog HDL File。
(3)单击“OK”按钮,退出“New”对话框,弹出名字为“Verilog1.v”的空白设计窗口。
(4)在弹出的窗口中,输入如代码清单3-29所示的设计代码。
代码清单3-29 top.v文件
(5)按“Ctrl+S”组合键,将该文件保存为“top.v”。
(6 )单击 “Compilation Dashboard”标签。在该标签页中,单击 “Analysis&Synthesis”前面的 按钮,Quartus P rime 集成开发环境开始执行分析和综合过程,等待该过程的结束。
(7)在Quartus Prime左侧的“Tasks”窗口中,在“Analysis”标题下找到并用鼠标单击“Technology Map Viewer(Post-Mapping)”按钮,出现“Technology Map Viewer-Post-Mapping”界面。
(8)在“Technology Map Viewer-Post-Mapping”界面中,给出了映射后的网表结构,如图3.46所示。
思考与练习3-34 :双击图3.46中名字为“Inst_float_math”的元器件符号,查看其内部结构(提示:使用了FPGA内集成的DSP阵列,不再使用FPGA内的逻辑设计资源实现)。
图3.46 “Technology Map Viewer-Post-Mapping”界面
本小节将介绍如何为设计生成测试平台文件,其主要步骤如下所示。
(1)在Quartus Prime集成开发环境主界面的主菜单下,选择File→New…,出现“New”对话框。
(2)在“New”对话框中的Design Files下面找到并选择Verilog HDL File。
(3)单击“OK”按钮,退出“New”对话框,出现名字为“Verilog2.v”的空白设计界面。
(4)在设计界面中,输入如代码清单3-30所示的设计代码。
代码清单3-30 test.v文件
(5)按“Ctrl+S”组合键,将该文件保存为“test.v”。
本小节将介绍如何使用ModelSim仿真工具对设计进行仿真,其主要步骤如下所示。
(1)在Windows 10操作系统的左下角选择开始→Intel FPGA 19.4.0.64 Pro Edition→ModelSim-Intel FPGA Starter Edition 2019.2(Quartus Prime Pro 19.4)。
(2)单击鼠标右键,出现浮动菜单。在浮动菜单内,选择更多→以管理员身份运行,弹出“用户账户控制”对话框。
(3)在“用户账户控制”对话框中,提示信息“你要允许此应用对你的设备进行更改吗?”
(4)单击“是”按钮,启动ModelSim-INTEL FPGA STARTER EDITION 2019.2(以下简称ModelSim)仿真工具。
(5)在ModelSim主界面的主菜单下,选择File→Change Directory…,出现“选择文件夹”对话框。
(6 )在 “选择文件夹”对话框中,将路径定位到e:\intel_dsp_example\example_3_41。
(7)单击“选择文件夹”按钮。
(8)在ModelSim主界面的主菜单下,选择Compile→Compile…,出现“Compile Source Files”对话框。
(9)在“Compile Source Files”对话框中,同时选择test.v文件和top.v文件。
(10)单击“Compile”按钮,弹出“Create Library”对话框。
(11)在“Create Library”对话框中提示信息“The library ‘work ’does not exist.Do you want to create this library?”
(12)单击“Yes”按钮。
(13)在“Compile Source Files”对话框中,展开子目录float_math。在展开项中,展开sim子目录。在展开项中,找到并选择float_math.v文件。
(14)单击“Compile”按钮。
(15)在“Compile Source Files”对话框中,退出sim子目录,进入上一级目录float_math。在该目录下,展开altera_fp_functions_191子目录。在展开项中,展开sim子目录。在展开项中,同时选择dspba_library.vhd、dspba_library_package.vhd和float_math_altera_fp_functions_191_h7gb7uy.vhd文件。
(16)单击“Compile”按钮。
(17)单击“Compile Source Files”对话框中的“Done”按钮,退出该对话框。
(18)在Quartus Prime主界面的主菜单下,选择Simulate→Start Simulation,弹出“Start Simulation”对话框。
(19)在“Start Simulation”对话框中,单击“Design”标签。
(20)在“Design”标签页中,找到并展开work文件夹。在该文件夹中,找到并选择test.v文件。
(21)单击“OK”按钮,退出“Start Simulation”对话框。同时,自动弹出“Objects”窗口和“Wave-Default”窗口。
(22)在“Objects”窗口中,同时选中信号clk、rst、a、b和res信号,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Add Wave,这些信号将被自动添加到“Wave-Default”窗口中。
(23)在“Wave-Default”窗口中,同时选中信号/test/a、/test/b和/test/res,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Radix→float32,将这些信号的显示方式修改成单精度浮点格式。
(24)在ModelSim主界面底部的“Transcript”窗口内,在“VSIM 16>”提示符后面输入命令“run 100ns”,该命令表示仿真的时间为100ns。
(25)通过单击“Zoom Out”按钮 几次,将仿真波形调整到“Wave”窗口内,其仿真结果如图3.47所示。
(26)关闭ModelSim仿真工具。
思考与练习3-35 :观察图3.47给出的仿真结果,评估仿真的结果是否正确?
思考与练习3-36 :观察图3.47给出的仿真结果,说明从数据输入到浮点结果输出的时间延迟。
图3.47 调用浮点IP核后的仿真波形界面