本节将使用HLS工具实现两个矩阵的相乘运算,内容包括设计矩阵相乘模型、添加C测试文件、运行和调试C工程、设计综合、查看生成的数据处理图、对设计执行RTL级仿真、设计优化,以及对优化后的设计执行RTL级仿真。
本节将在Vivado HLS中创建一个模型,该模型实现3×3矩阵A和3×3矩阵B的相乘运算操作。在HLS工具中实现两个矩阵运算描述的步骤主要包括:
(1)在Windows 7操作系统中,选择开始->所有程序->Xilinx Design Tools->Vivado 2017.2->Vivado HLS->Vivado HLS 2017.2,打开Vivado HLS设计工具,出现Vivado HLS设计主界面。
注 :读者也可以通过双击桌面上的Vivado HLS 2017.2图标打开Vivado HLS设计工具。
(2)在主界面的主菜单下,选择File->New Project…,进入创建新工程设计向导界面,出现“New Vivado HLS Project-Project Configuration”对话框。
(3)在“New Vivado HLS Project-Project Configuration”对话框内按如下所示设置参数。
① Project name:matrx.prj。
② Location:E:\fpga_dsp_example\hls_basic\matrix.
(4)单击“Next”按钮,出现“New Vivado HLS Project-Add/Remove Files”对话框。
(5)在“New Vivado HLS Project-Add/Remove Files”对话框内按如下所示设置参数。
① 单击“New File…”按钮,按下面步骤操作。
● 出现“另存为”对话框,在该对话框中输入文件名“matrix.c”。
● 单击“保存”按钮。
② 在“Top Function”的右侧输入顶层函数的名字“matrix”。
(6)单击“Next”按钮,出现“Add/Remove Files-Add/remove C-based testbench files(design test)”对话框。
(7)在“Add/Remove Files-Add/remove C-based testbench files(design test)”对话框内不进行任何参数设置,单击“Next”按钮,出现“Solution Configuration-Create Vivado HLS solution for selected technology”对话框。
(8)在“Solution Configuration-Create Vivado HLS solution for selected technology”对话框中,单击 按钮,出现“选择器件”对话框。
(9)在“选择器件”对话框中选择“xc7a75tfgg484-1”。
(10)单击“OK”按钮。
(11)单击“Finish”按钮。
(12)在Vivado HLS主界面左侧的“Explorer”窗口下出现工程设计文件目录列表。展开Source文件夹。在展开项中,选择并双击matrix.c文件名,打开matrix.c文件。
(13)输入C语言描述代码,如代码清单4-4所示,并保存该设计文件。
代码清单4-4 matrix.c文件
(14)添加matrix.h头文件,主要步骤如下所示。
① 在Vivado HLS主界面的主菜单下,选择File->New File…,出现“另存为”对话框。
② 在“另存为”对话框中,输入文件名“matrix.h”。
③ 单击“保存”按钮,HLS工具将自动打开matrix.h文件。
(15)输入代码,如代码清单4-5所示,并保存设计代码。
代码清单4-5 matrix.h文件
本节将添加C仿真文件,步骤主要包括:
(1)在Vivado HLS主界面左侧的“Explorer”窗口下,找到并选择Test Bench文件夹,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择New File…,出现“另存为”对话框。
(2)在“另存为”对话框中,输入文件名“test_matrix.c”。
(3)单击“保存”按钮,HLS工具将自动打开test_matrix.c文件。
(4)添加测试代码,如代码清单4-6所示。
代码清单4-6 test_matrix.c文件
(5)保存该测试文件。
本节将运行和调试C工程。运行和调试C工程的步骤主要包括:
(1)在Vivado HLS主界面的主菜单下,选择Project->Run C Simulation,打开“Co-simulation Dialog”对话框。
(2)在“Co-simulation Dialog”对话框中,按如下所示设置参数。
① Verilog/VHDL Simulator Selection:Vivado Simulator。
② RTL Selection:Verilog。
(3)单击“OK”按钮,Vivado HLS开始对C模型进行仿真和验证。在“Console”窗口中给出了验证信息,如图4.34所示。
图4.34 “Console”窗口中给出的验证信息
(4)单击“test_matrix.c”标签,打开text_matrix.c文件。在该标签页下,分别在标号18和24行前面的空白处双击,可以看到出现两个小蓝点,表示为这两行分别设置了断点,用于对该程序进行调试,如图4.35所示。
图4.35 设置断点
(5)在Vivado HLS右上角的面板中,单击“Debug”按钮,进入“Debug”窗口。
(6)在“Debug”窗口中,单击 按钮,出现“C Simulation Dialog”对话框。
(7)在“C Simulation Dialog”对话框中,单击“OK”按钮。
(8)单击工具栏中的 按钮,使程序运行到第二个断点处(24)。
(9) 在调试器界面右上侧的窗口中,展开 “hw_result”,然后在展开项中分别展开 “hw_result[0]”、“hw_result[1]” 和 “hw_result[2]”,可以看到矩阵相乘的结果如图4.36所示。
图4.36 矩阵相乘的结果
(10)单击停止按钮 ,退出调试器界面。
(11)再次单击“Debug”窗口右上角的 按钮,进入“matrix.c”标签页。
本节将对设计进行综合,将C模型转换成RTL级的描述。实现设计综合的步骤主要包括:
(1)在Vivado HLS主界面的主菜单下,选择Solution->Run C Synthesis->Active Solution,HLS工具开始执行高级综合过程;或者在主界面的工具栏中单击 按钮,执行高级综合的过程。
(2)在“Console”窗口中,出现综合过程的信息。
(3)综合完成后,自动打开综合后的报告matrix_csynth.rpt文件,下面对报告进行分析。
① 性能信息,包括延迟和吞吐量信息,如图4.37 所示。
图4.37 延迟和吞吐量信息
思考与练习4-1 :根据给出的Latency(延迟)和Interval(间隔)值,说明这些值所给出的性能信息。
② 该设计的器件利用率信息如图4.38所示。
图4.38 综合后报告给出的器件利用率信息
思考与练习4-2 :请给出该设计中所消耗的FPGA的逻辑资源个数。
③ 综合后该设计给出的端口如图4.39所示。
图4.39 综合后该设计给出的端口
思考与练习4-3 :请说明除C模型描述的输入和输出端口外,HLS工具又新添加了哪些新的端口?
本节将查看生成的数据处理图,了解HLS工具如何将C模型转换为FPGA上的操作数据流。查看生成的数据处理图的步骤主要包括:
(1)在Vivado HLS主界面的主菜单下,选择Solution->Open Analysis Perspective,或者单击 按钮。
(2)打开数据调度图,如图4.40所示。图4.40中,C0、C1、C2、C3、C4和C5分别表示一个状态。例如,C1状态检查变量“i”是否满足退出条件,且变量“i”递增;C2状态检查变量“j”是否满足退出条件,且变量“j”递增;很明显,加载“a”和“b”需要两个状态C3和C4,也就是两个周期,这是因为要读取存储器的原因;C5状态执行乘法和加法操作。
图4.40 数据调度图
注 :将鼠标光标放置在每个操作上,单击鼠标右键,出现浮动菜单,可以定位到C源代码的某一行上。
思考与练习4-4 :仔细查看数据调度图,理解和掌握数据流图的操作信息。
本节将在Vivado 2017.2环境下对优化前的设计进行仿真,主要步骤包括:
(1)在Windows 7操作系统的主界面下,选择开始->所有程序->Xilinx Design Tools->Vivado 2017.2>Vivado 2017.2,或者在桌面系统上双击Vivado 2014.3图标,打开Vivado集成计工具。
(2)在Vivado主界面的主菜单下,选择File->New Project…,出现“New Project-Create a New Vivado Project”对话框。
(3)在“New Project-Create a New Vivado Project”对话框中,单击“Next”按钮,出现“New Project-Project Name”对话框。
(4)在“New Project-Project Name”对话框中,按如下所示设置参数。
① Project name:project_1.
② Project location:E:\fpga_dsp_example\hls_basic\matrix.
注 :读者可以根据自己的情况确定。
(5)单击“Next”按钮,出现“New Project-Project Type”对话框,在该对话框中不修改任何参数。
(6)单击“Next”按钮,出现“New Project-Default Part”对话框。
(7)在“New Project-Default Part”对话框中,选择xc7a75tfgg484-1器件。
(8)单击“Next”按钮,出现“New Project-New Project Summary”对话框。
(9)在“New Project-New Project Summary”对话框中,单击“Finish”按钮。
(10)在“Project Manager”界面的“Sources”窗口中,找到Design Sources文件夹,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Add Sources…,出现“Add Sources”对话框。
(11)在“Add Sources”对话框中,选择“Add or Create Design Sources”选项。
(12)单击“Next”按钮,出现“Add Sources-Add or Create Design Sources”对话框。
(13)在“Add Sources-Add or Create Design Sources”对话框中,按如下所示步骤操作。
① 单击“Add Files”按钮,出现“Add Source Files”对话框。
②在 “Add Sources Files” 对话框中,将路径定位到E:\fpga_dsp_example\hls_basic\ma-trix\matrix.prj\solution1\syn\veriog\。在该路径下找到并添加matrix.v文件和matrix_mac_mu-laddbkb.v文件。
(14)单击“OK”按钮。
(15)单击“Finsih”按钮。
(16)选择matrix.vhd文件,并在Vivado主界面左侧的“Project Manager”界面下找到并展开“Synthesis”。在展开项中,双击“Run Synthesis”选项,开始综合过程。
(17)综合完成后,自动打开综合后的结果。
(18)在“Project Manager”界面的“Sources”窗口中,找到Simulation Sources文件夹。单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Add Sources…,出现“Add Sources”对话框。
(19)在“Add Sources”对话框中,选择“Add or Create Simulation Sources”选项。
(20)单击“Next”按钮,出现“Add or Create Simulation Sources”对话框。
(21)在“Add or Create Simulation Sources”对话框中,单击 按钮,出现“Create Source File”对话框。
(22)在“Create Source File”对话框中,按如下所示设置参数。
① File Type:Verilog。
② File name:matrixmul1_testbench。
③ File location:Local to Project。
(23)单击“OK”按钮。
(24)返回到添加或者创建仿真文件对话框。在该对话框中,单击“Finish”按钮,出现“Define Module”对话框。
(25)在“Define Module”对话框中单击“OK”按钮。
(26)在“Sources”窗口中,展开“Simulation Sources”选项。在展开项中,找到并展开“sim_1”。在展开项中,找到并双击matrixmul1_testbench.v文件,打开该文件。
(27)在matrixmul1_testbench.v文件中输入测试代码,如代码清单4-7所示。
代码清单4-7 matrixmul1_testbench.v文件
(28)选择matrixmul1_testbench.v文件,并且在Vivado主界面左侧的“Flow Navigator”窗口中选择并展开Simulation文件夹。在展开项中,找到并选择“Run Simulation”选项,出现浮动菜单。在浮动菜单中,选择Run Behavioral Simulation。此时,Vivado开始执行行为仿真过程。
(29)行为仿真结束后,仿真结果如图4.41所示。
图4.41 对设计执行行为仿真的结果
思考与练习4-5 :仔细分析图4.41所示的行为仿真结果,理解和掌握其时序之间的关系。
本节将通过添加指令对综合过程进行人工干预和优化。添加用户指令的步骤主要包括:
(1)在Vivado HLS主界面的主菜单下,选择Project->New Solution…,出现“Solution Wizard”对话框。
(2)在“Solution Wizard”对话框中,按如下所示设置参数。
① 在“Part Selection”标题下,选择器件xc7a75tfgg484-1。
② 其他按默认参数设置。
(3)单击“Finish”按钮。
(4)打开matrix.c文件。
(5)在打开matrix.c文件的右侧窗口内单击“Directive”标签。
(6)在“Directive”标签页中添加用户策略,如图4.42所示。
图4.42 “Directive”标签页
① 选择Product,为其添加UNROLL命令。
② 选择matrix_label0,为其添加UNROLL命令。
③ 选择matrix_label1,为其添加UNROLL命令。
(7)在Vivado HLS主界面的主菜单下,选择Solution->Run C Synthesis->Active Solution,开始综合过程;或者在主界面的工具栏中单击 按钮,启动综合过程。
(8)综合结束后,查看综合后的结果。
① 添加用户策略后的性能信息如图4.43所示。
图4.43 添加用户策略后设计的性能信息
思考与练习4-6 :说明添加用户策略后性能“Latency”和“Interval”的改善情况。
② 设计的资源占用率信息如图4.44所示。
图4.44 添加用户策略后设计的资源占用率
③ 查看设计报告中的生成端口信号,如图4.45所示。
图4.45 添加用户策略后设计的端口变化
思考与练习4-7 :请分析在添加策略后端口有哪些变化。
本节将在Vivado 2017.2环境下对优化后的设计进行仿真,实现步骤主要包括:
(1)在Windows 7操作系统的主界面下,选择开始->所有程序->Xilinx Design Tools->Vivado 2017.2>Vivado 2017.2,或者通过双击桌面上的Vivado 2017.2图标,打开Vivado集成计工具。
(2)在Vivado主界面的主菜单下,选择File->New Project…,出现“New Project-Create a New Vivado Project”对话框。
(3)单击“Next”按钮,出现“New Project-Project Name”对话框。
(4)在“New Project-Project Name”对话框中,按如下所示设置参数。
① Project name:project_2。
② Project location:E:\fpga_dsp_example\hls_basic\matrix.
注 :读者可以根据自己的情况确定。
(5)单击“Next”按钮,出现“New Project-Project Type”对话框,不修改任何参数。
(6)单击“Next”按钮,出现“New Project-Default Part”对话框。
(7)在“New Project-Default Part”对话框中,选择xc7a75tfgg484-1器件。
(8)单击“Next”按钮,出现“New Project-New Project Summary”对话框。
(9)在“New Project-New Project Summary”对话框中,单击“Finish”按钮。
(10)在“Project Manager”界面的“Sources”窗口中,找到并选中“Design Sources”,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Add Sources…,出现“Add Sources”对话框。
(11)在“Add Sources”对话框中,选择“Add or Create Design Sources”选项。
(12)单击“Next”按钮,出现“Add Sources-Add or Create Design Sources”对话框。
(13)在“Add Sources-Add or Create Design Sources”对话框中,按如下所示步骤操作。
① 单击“Add Files”按钮,出现“Add Source Files”对话框。
② 在 “Add Source Files” 对话框中,将路径定位到 E:\fpga_dsp_example\hls_basic\matrix\matrix.prj\solution2\syn\verilog\。在该路径下找到并添加matrix.v文件、matrix_mac_muladdbkb.v文件和matrix_mac_muladdcud.v文件。
(14)单击“OK”按钮。
(15)单击“Finsih”按钮。
(16)选择matrix.v文件,并在Vivado主界面左侧的“Project Manager”界面中找到并展开“Synthesis”。在展开项中,单击“Run Synthesis”选项,开始综合过程。
(17)综合完成后,自动打开综合后的结果。
(18)在“Project Manager”界面的“Sources”窗口中,找到并选中“Simulation Sources”,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Add Sources…,出现“Add Sources”对话框。
(19)在“Add Sources”对话框中,选择“Add or Create Simulation Sources”选项。
(20)单击“Next”按钮,出现“Add or Create Simulation Sources”对话框。
(21)在“Add or Create Simulation Sources”对话框中,单击 按钮,出现“Create Source File”对话框。
(22)在“Create Source File”对话框中,按如下所示设置参数。
① File Type:Verilog。
② File name:test_matrix。
③ File location:Local to Project。
(23)单击“OK”按钮。
(24)返回到添加或者创建仿真文件对话框。在该对话框中,单击“Finish”按钮,出现“Define Module”对话框。
(25)在“Define Module”对话框中,单击“OK”按钮。
(26)在“Sources”窗口中,展开“Simulation Sources”选项。在展开项中,找到并展开“sim_1”。在展开项中,找到并双击test_matrix.v文件,打开该文件。
(27)在打开的文件中,输入设计代码,如代码清单4-8所示。
代码清单4-8 test_matrix.v文件
(28)在Vivado主界面左侧的“Flow Navigator”窗口中,选择并展开“Simulation”。在展开项中,找到并选择“Run Simulation”选项,出现浮动菜单。在浮动菜单中,选择Run Behavioral Simulation,Vivado开始进行行为仿真过程。
(29)行为仿真结束后的仿真结果如图4.46所示。
图4.46 行为仿真结束后的仿真结果