Vivado HLS推动协议处理系统蓬勃发展(上)_第1页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vivado hls推动协议处理系统蓬勃发展(上) 1 提高抽象层次 vivado hls能提高系统设计的抽象层次,为设计人员带来切实的协助。vivado hls通过下面两种办法提高抽象层次: 用法c/c+作为编程语言,充分利用该语言中提供的高级结构; 提供更多数据原语,便于设计人员用法基础硬件构建块(位向量、队列等)。与用法rtl相比,这两大特性有助于设计人员用法vivado hls更轻松地解决频繁的协议系统设计难题。终于简化系统汇编,简化fifo和存储器拜访,实现控制流程的抽象。hls的另一大优势是便于架构讨论和。vivado hls把c+函数视为模块,函数定义等效于模块的rtl描述,函数

2、调用等效于模块实例化。这种办法能削减需要用户编写的代码量,进而显著简化用于系统描述的结构代码,终于加速系统汇编进程。在vivado hls中,存储器或fifo可通过两种办法拜访。一种是通过合适的对象(比如对流对象的读写)。另一种是挺直拜访综合工具随后将实现为block ram或分布式ram的标准c阵列。综合工具会按照需要处理额外的信令、同步或寻址问题。从控制流的角度,vivado hls从容易的fifo接口到完整的axi4-stream均可提供整套流控制感知接口。用法这些接口,设计人员可挺直拜访数据,无需检查背压或数据可用性。vivado hls会适当地调度执行,应对一切紧张状况,同时确保正确

3、完成执行。设计人员还会感激vivado hls提供的另一项功能,即简便的架构讨论功能。用户只需在代码中插入程序命令(如用法gui或批处理模式时的tcl指令),就可以把设计所需特性传递给综合工具。这样用户可以在不修改设计代码本身的状况下讨论大量备选架构计划。讨论的范围可以是模块流水线化等根本性问题,也可以是fifo队列深度等较频繁的问题。最后,c和rtl仿真是vivado hls另一个大放异彩的地方。设计普通采纳两步流程验证:第一步是仿真。这个步骤中c/c+的编译和执行与频繁的c/c+程序相同;其次步是c/rtl协仿真。在这步骤中,vivado hls会按照c/c+测试平台自动生成rtl测试平台

4、,然后设置并执行rtl仿真,检查实现计划8的正确性。如能充分发挥这些优势,这将对于用户的系统设计大有裨益。这不仅体现在开发时光和生产力上,还因为vivado hls代码越发紧凑的特点,体现在代码可维护性和可读性上。此外通过高层次综合,用户仍能有效控制架构及其特性。正确理解和用法vivado hls程序对实现这一控制起着根本作用。高层次综合在提供的包处理解决计划的层级结构中起着承上启下、承前启后的作用。而vivado sdnet和rtl则对其起到补充作用。vivado sdnet用法特定领域语言,提供一种大为简便但相当受限的协议处理系统表达办法。rtl则可以用于vivado hls无法表达的大量

5、系统的实现工作(例如用法dcm或差分信号并需要具体时钟管理的各类系统)。虽然有种种局限,vivado hls仍然是在保证结果质量或设计人员灵便性的前提下设计大部分协议处理解决计划的有效途径。2 设置容易系统开头新设计时需要完成的最基本工作首先是确定设计的结构,然后将其实现在vivado hls中。vivado hls中的基本系统构建块是c/c+函数。构建一个由模块和子模块组成的系统意味着需要用一个顶层函数来调用底层函数。图1所示的是一个极为容易的三级流水线,我们以此为例来介绍vivado hls中系统构建的基本思路。普通采纳流水线化设计执行协议处理,由每一级负责解决处理的特定部分。1所示。构建

6、一个由模块和子模块组成的系统意味着需要用一个顶层函数来调用底层函数。例1:在vivado hls中创建容易系统1 void toplevelmodule(stream&indata,stream&outdata) 2 pragma hls dataflow interval=134 pragma interface axis port=indata5 pragma interface axis port=outdata67 static stream modone2modtwo;8 static stream modtwo2modthree;910 moduleone(indata, modo

7、ne2modtwo);11 moduletwo(modone2modtwo, modtwo2modthree);12 modulethree(modtwo2modthree, outdata);13 例1中的代码用于创建顶层模块函数,供调用全部其它子函数用法。顶层模块函数用法两个参数,均属于“流”(stream)类(vivado hls库中提供的模块类之一)。流是一种hls建模架构,代表预备以流方式交换的数据通过的接口。流可以实现为fifo队列或内存,也可以是一种能够协作任何c+架构用法的模板类。在本例中,我们定义了一种称为axiword的数据结构(struct),如例2所示。例2:定义流接口

8、用法的c+ 结构struct axiword ap_uint data;ap_uint strb;ap_uint last;该struct用于定义axi4-stream接口的部分字段。vivado hls能自动支持此类接口,用法编译命令(pragma)语句即可完成设定。编译命令是对高层次综合工具的命令,用于指导工具实现要求的结果。例1中第4行和第5行的编译命令用于告诉vivado hls这两个命令(详细是顶层模块的输入和输出端口)将用法axi4-stream接口。axi4-stream i/f包含两个必备信号,分离是有效信号和就绪信号,但它们没有包含在声明的数据结构中。这是因为vivado h

9、ls ax4 i/f会在内部处理这些信号,也就是说它们对用户规律而言是透亮的。如前文所述,在用法axi4-stream i/f时,从用户处抽象流控制彻低由vivado hls完成。固然未必一定用法axi4-stream接口。vivado hls提供有丰盛的接口。这里挑选axi4-stream作为常见标准接口的示例,供用户举行包处理。实现我们的设计的下一项工作是确保我们的三个模块彼此互联。这项工作也通过流完成,不过这次它们是位于顶层模块的内部。第7行和第8行用于声明实现这一目标的两个流。这两个流用法了另一种vivado hls结构ap_uint。这是一种无符号一维位阵列,随后将按此对其操作。同时

10、这也是又一种模板类,因此必需设定这个阵列的宽度。在本例中用法64位,与顶层模块输入输出i/f的数据成员宽带匹配。还有一点需要具体解释的是这些流所有声明为静态变量。静态变量是指其值不随函数调用变幻的一种变量。因为在作为挨次c/c+程序执行时顶层模块(以及所有的子模块)每个时钟周期会被调用一次,所以任何需要保持其值不随时钟周期变幻的变量都需要声明为静态变量。3 创建流水线设计将要研究的最后也是最重要的一个是编译命令。第2行中的数据流编译命令指示vivado hls尽量以并行方式支配执行该函数的全部子函数。“internal”参数用于设置该模块的初始化间隔(ii)。初始化间隔(ii)告诉vivado hls该模块必需具备的处理新输入数据字的频次,故打算了设计的吞吐量。不过这并不阻碍模块内部的流水线化和拥有1的时延。当ii=2时,该模块将用两个周期完成数据字的处理,然后再读入新的数据字。以这种方式vivado hls可以简化模块终于的rtl。也就是说,在一个典型的协议处理应用中,设计必需具备每个时钟周期处理一个数据字的能力,故从现在起我们令ii=1。初始化间隔(ii)告诉vivado hls该模块必需具备的处理新输入数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论