赛灵思高层次综合工具加速FPGA设计
VIVADO设计流程介绍

VIVADO设计流程介绍Vivado是赛灵思公司(Xilinx)开发的一款EDA设计工具套件,用于硬件描述语言(HDL)设计的综合、实现和验证。
Vivado提供了一个全面的设计环境,可用于FPGA和SoC设计,具有先进的综合和实现算法,以及直观的用户界面。
Vivado的设计流程涉及以下几个主要步骤:设计规划、设计实现、验证和调试以及比特流生成。
下面将对每个步骤进行详细说明。
设计规划是设计流程的第一步,用于确定设计的目标和约束。
在此阶段,需要定义设计的输入和输出接口,选择正确的器件和FPGA平台,以及设置设计的时序约束。
设计规划阶段还包括分析设计的资源利用情况,如查看资源使用情况报告、时钟频率估计和功耗估计。
设计实现是设计流程的核心步骤,涉及将设计描述转化为可执行的硬件。
在此阶段,首先需要进行综合,将设计描述语言(如VHDL或Verilog)转化为门级网表。
综合后,需要进行布局布线,将逻辑网表映射到FPGA的资源上,并通过连接器将其连接起来。
此外,此阶段还包括时序优化、器件配置和引脚映射等步骤。
验证和调试是设计流程中不可或缺的一步,用于验证设计是否正确并进行必要的调试。
在此阶段,可以使用模拟器来验证设计的功能,并通过仿真波形查看信号的正确性。
此外,还可以使用调试工具对设计进行调试,如对时序约束进行分析、时钟域分析和信号探查等。
比特流生成是设计流程的最后一步,用于生成比特流文件,以便将设计加载到目标FPGA设备中。
在此阶段,需要对设计进行位流生成和配置文件生成。
生成比特流文件后,可以使用编程器将其加载到FPGA设备中,并进行性能和功能验证。
除了以上主要步骤外,Vivado还提供了其他一些功能和工具,如IP集成、时序分析、系统集成和快速设计连接等。
IP集成允许用户将现有的IP模块集成到设计中,以加速设计的开发。
时序分析工具可以帮助用户分析设计的时序路径,并进行时序优化。
系统集成和快速设计连接工具可用于将FPGA设计与其他系统级模块(如处理器和外设)进行集成。
FPGA开发全攻略——FPGA发展以及赛灵思系列产品

FPGA开发全攻略——FPGA发展以及赛灵思系列产品原⽂链接:可编程逻辑器件的发展历史可编程逻辑器件的发展可以划分为4个阶段,即从20世纪70年代初到70年代中为第1段,20世纪70年代中到80年代中为第2阶段,20世纪80年代到90年代末为第3阶段,20世纪90年代末到⽬前为第4阶段。
第1阶段的可编程器件只有简单的可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦只读存储器(EEPROM)3种,由于结构的限制,它们只能完成简单的数字逻辑功能。
第2阶段出现了结构上稍微复杂的可编程阵列逻辑(PAL)和通⽤阵列逻辑(GAL)器件,正式被称为PLD,能够完成各种逻辑运算功能。
典型的PLD由“与”、“⾮”阵列组成,⽤“与或”表达式来实现任意组合逻辑,所以PLD能以乘积和形式完成⼤量的逻辑组合。
第3阶段赛灵思和Altera分别推出了与标准门阵列类似的FPGA和类似于PAL结构的扩展性CPLD,提⾼了逻辑运算的速度,具有体系结构和逻辑单元灵活、集成度⾼以及适⽤范围宽等特点,兼容了PLD和通⽤门阵列的优点,能够实现超⼤规模的电路,编程⽅式也很灵活,成为产品原型设计和中⼩规模(⼀般⼩于10000)产品⽣产的⾸选。
这⼀阶段,CPLD、FPGA器件在制造⼯艺和产品性能都获得长⾜的发展,达到了0.18 ⼯艺和系数门数百万门的规模。
第4阶段出现了SOPC和SOC技术,是PLD和ASIC技术融合的结果,涵盖了实时化数字信号处理技术、⾼速数据收发器、复杂计算以及嵌⼊式系统设计技术的全部内容。
赛灵思和Altera也推出了相应SOCFPGA产品,制造⼯艺达到65nm ,系统门数也超过百万门。
并且,这⼀阶段的逻辑器件内嵌了硬核⾼速乘法器、Gbits差分串⾏接⼝、时钟频率⾼达500MHz的PowerPC™微处理器、软核MicroBlaze、Picoblaze、Nios以及NiosII,不仅实现了软件需求和硬件设计的完美结合,还实现了⾼速与灵活性的完美结合,使其已超越了ASIC器件的性能和规模,也超越了传统意义上FPGA的概念,使PLD的应⽤范围从单⽚扩展到系统级。
xilinx驱动方案

xilinx驱动方案Xilinx是一家全球领先的可编程逻辑器件(FPGA)和深度学习处理器(ACAP)供应商。
作为一家创新型的半导体公司,Xilinx致力于为客户提供高性能、低功耗和高适应性的解决方案。
在这篇文章中,我们将探讨Xilinx的驱动方案以及其在不同领域的应用。
一、什么是Xilinx驱动方案Xilinx驱动方案是基于Xilinx平台的硬件和软件集成开发环境,为开发人员提供丰富的工具和资源,以便设计、构建和部署高性能的应用解决方案。
这些方案主要包括:1. Vivado开发套件:Vivado是一套完整的设计环境,支持FPGA的设计、仿真和综合。
它提供了直观而强大的界面,使设计人员能够快速创建和调试复杂的电路。
2. PetaLinux嵌入式开发套件:PetaLinux是一个基于Linux的嵌入式开发工具,专为基于Xilinx器件的嵌入式系统设计而开发。
它提供了完整的Linux源码、驱动程序和工具链,方便开发人员进行软件开发和系统集成。
3. SDSoC开发环境:SDSoC是一个面向系统设计者的开发环境,可以将C/C++代码转化为高性能的硬件加速器。
它通过自动化的编译和优化过程,使开发人员能够更轻松地使用FPGA来加速应用程序的运行。
4. SDAccel开发环境:SDAccel是一个面向开发者的加速应用程序开发环境,结合了软件编程模型和硬件加速技术。
它支持OpenCL编程模型,使开发人员能够使用高级语言进行开发,并在FPGA上实现高性能计算加速。
二、Xilinx驱动方案的应用Xilinx驱动方案广泛应用于各个领域,下面将介绍其中几个典型的应用案例:1. 通信与网络:Xilinx驱动方案在通信与网络领域中发挥着重要的作用。
例如,在5G通信中,Xilinx的FPGA可以通过高速数据传输和实时处理来提供更高的带宽和低延迟。
此外,Xilinx还提供了各种网络接口协议的IP核,如Ethernet、PCIe等,用于实现高性能的数据传输。
vivado implementation策略

Vivado Implementation 策略Vivado 是由赛灵思公司(Xilinx)推出的一款集成电路开发工具,专门用于 FPGA/CPLD 的设计、仿真、调试和实现。
Vivado Implementation 策略指的是在使用 Vivado 进行 FPGA 设计时,针对不同的项目需求和目标硬件评台,制定合适的实现策略,以优化设计的性能、功耗和资源利用率。
下面我们来探讨一些常见的 Vivado Implementation 策略。
一、时序约束优化在 FPGA 设计中,时序约束的准确性对于设计的性能至关重要。
通过合理地设置时序约束,可以确保设计在目标时钟频率下能够正常工作,并且最大化地利用 FPGA 资源。
时序约束还可以帮助 Vivado 在实现过程中更好地优化逻辑综合和布局布线,进而提高设计的时序稳定性和抗干扰能力。
在进行 Vivado Implementation 时,需要仔细分析设计中的关键路径,准确设置时序约束,并根据需要进行时序优化,以达到设计的性能指标。
二、资源利用率优化在 FPGA 设计中,资源利用率优化是指在实现过程中最大化地利用FPGA 提供的逻辑单元、存储单元和 DSP 资源,以及减少设计对资源的竞争和冲突。
为此,在进行 Vivado Implementation 时,可以采取一些策略来优化资源利用率,例如合并逻辑、减少冗余逻辑、优化存储器结构、合理分配 DSP 资源等。
通过合理的资源利用率优化,可以有效降低设计的成本和功耗,提高设计的可靠性和稳定性。
三、功耗优化随着移动设备、物联网、人工智能等应用的不断发展,对于 FPGA 设计的功耗要求也越来越高。
在 Vivado Implementation 过程中,需要采取一些策略来优化设计的功耗。
可以通过减少逻辑单元、优化时钟管理、采用低功耗 IP 核等方式来降低设计的功耗。
还可以利用Vivado 提供的功耗分析工具来评估设计的功耗情况,进一步优化设计的功耗性能。
赛灵思Versal ACAP产品说明书

白皮书:Versal ACAPWP505 (v1.0) 2018 年 10 月 2日Versal:首款自适应计算加速平台 (ACAP)正式推出 Versal ACAP ,一个完全支持软件编程的异构计算平台,将标量引擎、自适应引擎和智能引擎相结合,实现显著的性能提升,其速度超过当前最高速的 FPGA 20 倍、比当今最快的 CPU 实现快 100 倍,该平台面向数据中心、有线网络、5G 无线和汽车驾驶辅助应用。
© Copyright 2018 年赛灵思公司版权所有。
Xilinx 、赛灵思标识、Artix 、ISE 、Kintex 、Spartan 、Virtex 、Vivado 、Zynq 及本文提到的其它指定品牌均为赛灵思在美国及其它国家的商标。
“PCI ”、“PCIe ”和“PCI Express ”均为 PCI-SIG 拥有的商标,且经授权使用。
AMBA 、AMBA Designer 、ARM 、ARM1176JZ-S 、CoreSight 、Cortex 、PrimeCell 均属于 ARM 在欧盟和其他国家和地区的注册商标。
所有其它商标均是其各自所有者的财产。
摘要近来涌现的技术挑战迫使业界跳出传统的通用 (one-size-fits-all) 型 CPU 标量处理解决方案,进而探索新的发展方向。
大型的矢量处理 (DSP-GPU) 技术能够解决一些问题,但由于其灵活性欠佳及低效率存储器带宽的使用,导致再次陷入了传统的扩展挑战。
传统 FPGA 解决方案提供可编程存储器层级,但传统的硬件开发流程一直是阻碍数据中心市场等应用领域广泛、大规模采用FPGA 的障碍。
该解决方案将所有这三大要素与一个新的工具流相结合,通过单个自适应计算加速平台 (ACAP),提供了从框架到 C 到 RTL 级编码的各种不同抽象。
赛灵思 Versal ™ ACAP 作为一大新器件门类,支持用户利用三大可编程要素定制自己的特定领域专用架构 (DSA)。
基于FPGA的卷积神经网络并行加速器设计

0引言随着人工智能的快速发展,卷积神经网络越来越受到人们的关注。
由于它的高适应性和出色的识别能力,它已被广泛应用于分类和识别、目标检测、目标跟踪等领域[1]。
与传统算法相比,CNN 的计算复杂度要高得多,并且通用CPU 不再能够满足计算需求。
目前,主要解决方案是使用GPU 进行CNN 计算。
尽管GPU 在并行计算中具有自然优势,但在成本和功耗方面存在很大的缺点。
卷积神经网络推理过程的实现占用空间大,计算能耗大[2],无法满足终端系统的CNN 计算要求。
FPGA 具有强大的并行处理功能,灵活的可配置功能以及超低功耗,使其成为CNN 实现平台的理想选择。
FPGA 的可重配置特性适合于变化的神经网络网络结构。
因此,许多研究人员已经研究了使用FPGA 实现CNN 加速的方法[3]。
本文参考了Google 提出的轻量级网络MobileNet 结构[4],并通过并行处理和流水线结构在FPGA 上设计了高速CNN 系统,并将其与CPU 和GPU 的实现进行了比较。
1卷积神经网络加速器的设计研究1.1卷积神经网络的介绍在深度学习领域中,卷积神经网络占有着非常重要的地位,它的图像识别准确率接近甚至高于人类的识别水平。
卷积神经网络是同时具有层次结构性和局部连通性的人工神经网络[5]。
卷积神经网络的结构都是类似的,它们采用前向网络模型结构,节点使用神经元来实现分层连接。
并且,相邻层之间的节点是在局部区域内相连接,同一层中的一些神经元节点之间是共享连接权基于FPGA 的卷积神经网络并行加速器设计王婷,陈斌岳,张福海(南开大学电子信息与光学工程学院,天津300350)摘要:近年来,卷积神经网络在许多领域中发挥着越来越重要的作用,然而功耗和速度是限制其应用的主要因素。
为了克服其限制因素,设计一种基于FPGA 平台的卷积神经网络并行加速器,以Ultra96-V2为实验开发平台,而且卷积神经网络计算IP 核的设计实现采用了高级设计综合工具,使用Vivado 开发工具完成了基于FPGA 的卷积神经网络加速器系统设计实现。
赛灵思推出最新Virtex-6/Spartan-6 FPGA连接开发套件
嵌 入式 处 理 、 P, 及 构 建 要 求 高 速 串 行 连 接 功 能 的 系 DS 以
统, 为设 计 团 队提 供 了专 门 针 对设 计 流程 而 精 心 优 化 的 T 具套 件 、 功 能 I 以及 适 合 设 计 人 员 专 业 技 术 领 域 的 通 全 P, 用 的 目标 参 考 设计 。
需 的硬 件 和 软 件 。
客 户提 供 可 在真 实 的 系统 条 件 下实 现 的 高带 宽 运 营支 持 。
S rt V P tai I E F GA 开 发 套 件 基 于 高 性 能 、 密 度 的 x 高
S rt V P S 5 0 F GA。 该 F GA 具 有 5 0 逻 辑 tai I E 4 E 3 P x P 3K 单 元 ( E 。S rt V 4 E 3 P L ) tai I EP S 5 0F GA 所 具 有 的 性 能 和 x 密度优势 , 让使 用 S rtxI E F GA 开 发 套 件 的 广 大 用 tai V P
合 其 符 合 I EE 8 2 1 . E 0 . 5 4的 2 4 GHzMRF 4 4 . 2 J 0收 发 器 和 经 机 构 认 证 的 收 发 器 模 块 , co hp还 提 供 了一 个 高 Mi c i r
效 、 具 成 本 效 益 的 平 台 , 于在 R 极 便 F遥 控 器 和 设 备 中 实
( o ) 发 阶段 的 低 功 耗 水 平 。这 些 最 新 套 件 主 要 针 对 SC 开
布 , 符 合 Z B eR 4 E 的 平 台 已经 获 得 认 证 , 够 实 其 i e FC g 能
现新 一 代 RF 遥 控 器 和 消 费 电 子 产 品 。 该 平 台 包 括 Mir c i co hp的 n n W at ao t XL 超 低 功 耗 P C 单 片 机 、 P I
VIVADO设计工具使用流程
VIVADO设计工具使用流程Vivado是赛灵思(Xilinx)公司推出的一款集成电路设计工具套件,用于设计、仿真和综合FPGA和SoC。
它提供了一种全面的设计工作流程,以帮助电子工程师开发复杂的硬件系统。
下面将详细介绍Vivado的使用流程。
1.项目设置:首先,打开Vivado并选择“Create Project”选项,然后选择一个文件夹用于存储项目文件。
在项目设置向导中,设置项目名称、存储位置和目标设备等信息。
还可以选择添加已有的设计文件,并选择一个默认的综合目标以及仿真目标。
2.创建设计:在项目设置完成后,可以开始创建设计。
设计可以通过各种方式创建,包括使用Vivado IP(Intellectual Property)库、设计向导、手动编写代码等。
根据设计需求,选择适当的方式创建设计。
3.添加制约条件:在设计中,制约条件(Constraints)对于硬件系统的正确功能起着至关重要的作用。
制约条件定义了信号的时序要求、引脚约束、时钟频率等。
通过添加约束文件,可以为设计添加相关的制约条件。
4.IP集成:在设计中,可以使用IP核来简化设计和提高效率。
Vivado提供了广泛的IP核库,可以选择合适的IP核并集成到设计中。
通过IP集成,可以重用现有的功能模块,并快速构建复杂的硬件系统。
5.综合:在设计完成后,需要对设计进行综合,将设计转换为逻辑门级网表表示。
选择“Run Synthesis”选项,Vivado将自动综合设计,并生成综合结果报告。
综合报告可以用于评估设计的资源利用率、时序要求是否满足等。
6.时序分析:在综合完成后,可以进行时序分析,以确保设计满足时序要求。
通过选择“Run Implementation”选项,Vivado将自动进行时序分析,并生成时序报告。
时序报告可以用于评估设计的时序性能,发现和解决时序约束的问题。
7.实现:8.仿真:在设计生成位文件后,可以进行仿真验证,以确保设计的正确性和功能性。
vivado block design vcs方针
Vivado是赛灵思公司(Xilinx)开发的一款集成电路设计软件,其Block Design功能是一种用于图形化设计和综合可编程逻辑的工具。
而VCS(Verification Computing System)则是Cadence公司推出的一款高级综合(HLS)工具,用于对硬件描述语言(HDL)代码进行验证和仿真。
1. Vivado Block Design框图Vivado Block Design允许用户在图形化界面中组合各种IP核和逻辑模块,以及自定义的硬件设计。
通过简单的拖拽和连接操作,用户可以快速构建复杂的数字电路。
Vivado还提供了一系列的分析工具,可以对设计进行时序分析、资源利用率分析等,帮助用户优化设计。
2. VCS的功能与特点VCS作为一款综合性的HLS工具,具有强大的仿真、验证和综合能力。
它支持Verilog、SystemVerilog和VHDL等多种硬件描述语言,可以对设计进行准确的仿真,帮助用户发现和修复潜在的逻辑错误。
VCS还提供了丰富的调试和优化工具,帮助用户提高设计的性能和可靠性。
3. Vivado Block Design与VCS的集成Vivado和VCS可以通过一些桥接工具实现集成,实现从图形化设计到验证和综合的一体化流程。
用户可以在Vivado中设计好硬件逻辑,并将设计导出到VCS进行仿真和验证。
通过集成,用户可以更加高效地完成硬件设计和验证的整个流程,提高工作效率。
4. Vivado Block Design和VCS的优势Vivado Block Design和VCS的集成可以带来诸多优势,首先可以提高设计的可靠性和稳定性,通过图形化设计和准确的仿真,可以减少设计中的潜在错误。
集成也可以提高工作效率,减少反复导入导出的操作,简化设计流程。
Vivado和VCS作为两大主流工具的集成,也可以带来更多的技术和资源支持,帮助用户解决各种设计和验证中的问题。
5. Vivado Block Design和VCS的应用领域Vivado Block Design和VCS集成的方案,可以广泛应用于各种数字电路设计和验证领域。
virtex4性能
注: 采用-11速率级别的Virtex-4器件。
工具设置
为了获得尽可能最佳的性能,按照工具厂商的指导进行配置是非常重要 的。例如,综合工具厂商推荐当穿过时钟域的时序不重要时,针对不同的 时钟组单独约束时钟。而最重要的是要确保足够的时钟约束。
“Retiming” (a.k.a. 寄存器均衡)是一个可选项,通过移动逻辑层次间的 寄存器来增大设计的性能。针对不同的设计,它能够充分改善时序。尽管
内置改善性能的技术
除了具备最高性能的逻辑、嵌入式模块和设计工具,您所获得的有效实际 性能还取决于时钟/数据信号完整性、电源完善性、功率预算等。Virtex-4 FPGA提供的内置技术能为您提供以下最高有效性能:
·低延迟、低抖动的500MHz差分时钟结构,大大扩展了其灵活性。 ·先进封装技术和倒装芯片组装技术,专利的ASMBL技术以及众多的电源 和地线引脚,最大限度地降低了封装和PCB电感,从而提高了信号完整性。 ·XCITE™技术提供了具有数控阻抗的片上信号终端。 ·更低的的功耗意味着在功率预算范围内,你能够实现更多的性能。Virtex-4 FPGA采用90nm技术减少了动态功耗,同时采用三重氧化层技术降低了静 态功耗。与上一代FPGA相比,净功耗降低到50%,而与其它采用90nm技 术的竞争产品相比,更具有显著的优势。
许会大大改善性能。这一优化应该开启。 • 当运行一个小型测试例子作为基准,并且只有内部性能需要考虑时(无
需考虑I/O性能),建议不使用I/O内部的触发器。 约束 尽管采用了适当的工具设置以及代码风格,综合、布局和布线仅能依据时 序约束来提供最佳的结果。采用时序驱动综合工具,只有当得到一个负 Slack值时,才表明设计的约束是足够的。 一般来讲,只要约束条件还合理,过度约束综合是一个好方法。此外还推 荐对特别关注的某个时钟(或多个时钟)进行约束。全局的性能约束往往对 设计中速度最慢的时钟起作用,这并不是设计所要求的。 综合之后,一旦采用约束,Xilinx ISE布局和布线可大大改善性能。 “Effort”级别也将对结果产生影响,因此推荐使用“High Effort”的约 束以达到最佳的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
赛灵思高层次综合工具加速FPGA设计382顶作者:Sharad Sinha博士生新加坡南洋理工大学sharad_sinha@.sgVivado HLS配合C语言等高级语言能帮助您在FPGA上快速实现算法。
高层次综合(HLS)是指自动综合最初用C、C++或SystemC语言描述的数字设计。
工程师之所以对高层次综合如此感兴趣,不仅是因为它能让工程师在较高的抽象层面上工作,而且还因为它能方便地生成多种设计解决方案。
利用HLS,您能探索各种可能性,分析面积和性能特点,最终确定一个方案在FPGA芯片上实现算法。
举例来说,您能探索将存储器映射到Block RAM(BRAM)或分布式RAM上有什么不同的影响,或者分析回路展开以及其它回路相关优化有什么效果,而且不必手动生成不同的寄存器传输级(RTL)设计。
您所要做的仅仅是在C/C++/SystemC设计中设置相关指令而已。
赛灵思在其最新发布的Vivado™工具套件中推出了HLS工具。
Vivado HLS是AutoESL工具的品牌转型重塑,可提供众多技术帮助您优化C/C++/SystemC代码以实现目标性能。
这样的HLS工具就能帮助您在FPGA上快速实现算法,无需借助基于Verilog和VHDL等硬件描述语言的非常耗时的RTL设计方法。
为了帮助用户了解Vivado HLS如何工作,我们不妨以矩阵乘法设计为例逐步剖析从设计描述(C/C++/SystemC)到FPGA实现整个端对端综合流程。
矩阵乘法在许多应用中都很常见,并广泛用于图像和视频处理、科学计算和数字通信。
本项目中的所有结果均使用Vivado HLS 2012.4生成,搭配使用赛灵思ISE®软件(14.4版)进行物理综合和布局布线。
此外,这一流程还采用了ModelSim和GCC-4.2.1-mingw32vc9进行RTL协同仿真。
图1显示了简单的综合流程,从C/C++/SystemC设计开始。
C/C++/SystemCtestbench用于验证设计功能的正确性,同时还可用于RTL和C的协同仿真。
协同仿真包括验证生成的RTL设计(.v或.vhd)功能,这要使用C/C++/SystemC测试平台而不是RTL测试平台或者采用e或Vera验证语言编写的测试平台。
时钟周期约束设置了设计应该运行的目标时钟周期。
设计将被映射到目标FPGA器件——赛灵思FPGA上。
C语言的矩阵乘法为了充分利用我们的矩阵乘法实例,我们将探索矩阵乘法C语言实现方案的各种修订版本,从而展示它们对综合设计的影响。
这一过程将凸显您在使用HLS进行原型设计和实际设计时需要注意的重要问题。
我们将跳过创建工程的有关步骤,因为您能很方便地在工具文档中找到相关参考材料。
我们将重点介绍设计和实现等方面。
在典型的Vivado HLS流程中,我们需要三个C/C++文件:源文件(包括待综合的C函数)、头文件和通过main()函数调用描述testbench的文件。
头文件不仅包括源文件中使用的函数的声明,也包括支持具有特定位宽的用户定义数据类型的指令。
这也使得设计人员能够采用与C/C++所定义标准位宽不同的位宽。
举例来说,整形数据类型(int)在C语言中通常为32位长,但是在Vivado HLS中您可指定用户定义的数据类型,例如只使用16位的“data”。
图2显示了用于矩阵乘法的简单C函数。
两个矩阵mat1和mat2进行乘法。
为了简单起见,两个矩阵大小一样,都是两行两列。
在HLS流程中执行的步骤如下:•第一步:创建工程•第二步:测试功能•第三步:综合•第四步:RTL协同仿真•第五步:导出RTL / RTL实现第一步编译工程并在不同的设计文件中测试语法错误等。
第二步测试待实现的函数(在源文件中)功能是否正确。
在这一步骤中您将使用testbench执行函数调用,验证其功能是否正确。
如果功能验证失败,您就需要返回来修改设计文件。
第三步进行综合,Vivado HLS综合源文件中定义的函数。
这一步的输出包括C函数的Verilog和VHDL代码(RTL设计),也包括目标FPGA的资源利用率估算和时钟周期估算。
此外,Vivado HLS还可生成latency估算和回路相关的度量指标等。
第四步是使用C testbench仿真生成的RTL。
这一步叫做RTL协同仿真,因为工具采用的就是之前用于验证C源代码的testbench,现在则测试RTL的功能正确性。
要成功完成这一步,您系统(Windows或Linux)中的PATH环境变量应包含ModelSim安装的路径。
此外,您还应在ModelSim安装文件夹中包含GCC-4.2.1-mingw32vc9套件。
最后,第五步就要将RTL导出为IP模块,用于更大的设计中,并由其它赛灵思工具进行处理。
您可将RTL导出为IP-XACT格式的IP模块,也可导出为System Generator IP模块或pcore格式的IP模块,进而用于赛灵思嵌入式设计套件。
导出Vivado生成的RTL时,您可以选择工具的“评估”选项来评估布局布线后的性能并且运行RTL实现。
在此情况下,Vivado HLS工具会调用赛灵思ISE工具。
要实现这一目的,您的系统PATH环境变量需包括ISE安装路径,Vivado HLS将会搜索ISE安装。
当然,您也不一定非要将Vivado生成的RTL导出为以上三种格式之一的IP模块不可。
导出的格式文件可放在三个不同路径下://impl/或project_directory>//impl/或//impl/。
此外,您也可在较大设计中使用Vivado生成的RTL,或者将其本身用作顶层设计。
当较大设计中例化导出的RTL时,您应注意相关接口要求。
当综合图2中的C函数时,您将获得如图3所示的RTL级实现方案。
您会发现,实现方案中的矩阵1和矩阵2的元素被读取到函数,并且积矩阵的元素被写出。
这样,实现方案假定“矩阵乘法”实体以外的存储器能用来存储矩阵1、矩阵2和乘积矩阵的元素。
表1介绍了信号描述,表2则介绍了设计度量指标。
表2:用于图3所示设计的设计度量指标设计度量指标器件:XC6VCX75TFF784-2DSP48E 1查找表44触发器61 实现的最佳时钟周期(ns) 2.856 时延69 吞吐量(初始间隔)69 表1:面向图3中设计的信号描述信号描述matleft_ce0 矩阵1存储器的芯片使能matleft_q0[15:0] 矩阵1的16位元素matleft_address[1:0] 矩阵1存储器的读地址matright_ce0 矩阵2存储器的芯片使能matright_q0[15:0] 矩阵2的16位元素matright_address[1:0] 矩阵2存储器的读地址product_ce0 积矩阵的存储器的芯片使能product_we0 积矩阵的存储器的写使能product_d0[15:0] 积矩阵存储器的写数据product_q0[15:0] 积矩阵存储器的读数据product_address0[1:0] 积矩阵要读写数据的地址ap_clk 设计的时钟信号ap_rst 设计的高有效同步复位信号ap_start 开始计算的开始信号ap_done 计算结束和输出就绪的完成信号ap_idle 表示实体(设计)空闲的空闲信号ap_ready 表示设计为新输入数据做好准备,与ap_idle配合使用在表1中,start、done和idle信号与设计中控制数据路径的有限状态机(FSM)有关。
您会发现,Vivado HLS生成的Verilog假定运算始于start信号,并且输出数据在ap_done信号从低变高开始有效。
Vivado HLS生成的Verilog/VHDL将始终保持至少三个基本信号:ap_start、ap_done和ap_idle,此外还有ap_clk信号。
这意味着不管您使用Vivado HLS实现什么设计,设计latency都会限制您的流吞吐量。
图2中的设计latency为69个时钟周期,目标时钟周期为3纳秒。
这意味着在此特定案例中,所有积矩阵元素需要69个时钟周期可输出。
这样,您在至少69个时钟周期前不能为设计提供新一组的输入矩阵。
图3中所示的实现方案现在可能并不是您在FPGA上实现矩阵乘法时所预想的结果。
您或许希望一款实现方案能让您输入矩阵,并在内部进行存储和计算,随后读取积矩阵元素。
这显然是图2所示实现方案无法做到的。
该实现方案需要外部存储器提供矩阵数据的输入和输出。
调整代码图4中的代码能够满足您的需求,它是源文件的一部分,应该属于C++文件而非此前的C文件。
您应在头文件matrixmultiply.h中包含另外两个相关头文件:hls_stream.h和ap_int.h。
请注意,在图2中,当源文件为C文件时,头文件包含了ap_cint.h。
头文件ap_int.h和ap_cint.h有助于分别为C++和C源文件定义用户定义的任意位宽的数据类型。
需要头文件hls_stream.h来充分利用流接口,并且只有在源文件为C++语言时才能使用。
图4:用于矩阵乘法的重组源代码为了让设计只接收输入矩阵流,并输出积矩阵流,您应在代码中实现读和写数据流。
流接口就像FIFO。
默认情况下这个FIFO的深度为1。
表3 - 图5中设计的信号描述信号描述d_mat1_V_read 设计为矩阵1(左侧矩阵)输入做好准备时的信号d_mat1_V_dout[15:0]矩阵1的16位流元素d_mat1_V_empty 通知设计矩阵1没有更多元素的信号d_mat2_V_read 设计为矩阵2(右侧矩阵)输入做好准备时的信号d_mat2_V_dout[15:0]矩阵2的16位流元素d_mat2_V_empty 通知设计矩阵2没有更多元素的信号d_product_V_din[15:0]积矩阵的16位输出元素d_product_V_full_n 通知设计积矩阵应该被写入的信号d_product_V_write 显示积矩阵正在被写入数据的信号ap_clk 设计的时钟信号ap_rst 设计的高有效同步复位信号ap_start 开始计算的开始信号ap_done 计算结束和准备好信号输出的表4:图5所示设计的设计度量指标器件:XC6VCX75TFF784-2 设计参数无BRAM或无分布式RAM 存储矩阵 单端口BRAM 存储矩阵 分布式RAM (LUT 实现)存储矩阵 DSP48E 1 1 1 查询表 185 109 179 触发器 331 102 190 BRAM 0 3 0 实现的最佳时钟周期(纳秒) 2.886 3.216 2.952 时延84 116 104 吞吐量(初始间隔)84116104为了让设计只接受输入矩阵流,并输出积矩阵流,您应在代码中实现读和写数据流。