新闻中心

EEPW首页 > 网络与存储 > 设计应用 > Vivado HLS推动协议处理系统蓬勃发展(上)

Vivado HLS推动协议处理系统蓬勃发展(上)

作者:KimonKarras JamesHrica时间:2015-04-28来源:电子产品世界收藏

  4 #pragma INTERFACE axis port=inData

本文引用地址:http://www.eepw.com.cn/article/273294.htm

  5 #pragma INTERFACE axis port=outData

  6

  7 static stream> modOne2modTwo;

  8 static stream> modTwo2modThree;

  9

  10 moduleOne(inData, modOne2modTwo);

  11 moduleTwo(modOne2modTwo, modTwo2modThree);

  12 moduleThree(modTwo2modThree, outData);

  13 }

  例1中的代码用于创建顶层模块函数,供调用所有其它子函数使用。顶层模块函数使用两个参数,均属于“流”(stream)类( HLS库中提供的模块类之一)。流是一种HLS建模架构,代表准备以流方式交换的数据通过的接口。流可以实现为队列或内存,也可以是一种能够配合任何C++架构使用的模板类。在本例中,我们定义了一种称为axiWord的数据结构(Struct),如例2所示。

  例2:定义流接口使用的C++ 结构

  struct axiWord {
  ap_uint<64> data;
  ap_uint<8> strb;
  ap_uint<1> last;
  };

  该struct用于定义AXI4-Stream接口的部分字段。 HLS能自动支持此类接口,使用编译指令(pragma)语句即可完成设定。编译指令是对高层次综合工具的指令,用于指导工具实现要求的结果。例1中第4行和第5行的编译指令用于告知 HLS这两个指令(具体是顶层模块的输入和输出端口)将使用AXI4-Stream接口。AXI4-Stream I/F包含两个必备信号,分别是有效信号和就绪信号,但它们没有包含在声明的数据结构中。这是由于Vivado HLS AX4 I/F会在内部处理这些信号,也就是说它们对用户逻辑而言是透明的。如前文所述,在使用AXI4-Stream I/F时,从用户处抽象流控制完全由Vivado HLS完成。

  当然未必一定使用AXI4-Stream接口。Vivado HLS提供有丰富的总线接口。这里选择AXI4-Stream作为常见标准接口的示例,供用户进行包处理。

  实现我们的设计的下一项工作是确保我们的三个模块彼此互联。这项工作也通过流完成,不过这次它们是位于顶层模块的内部。第7行和第8行用于声明实现这一目标的两个流。这两个流使用了另一种Vivado HLS结构ap_uint。这是一种无符号一维位阵列,随后将按此对其操作。同时这也是又一种模板类,因此必须设定这个阵列的宽度。在本例中使用64位,与顶层模块输入输出I/F的数据成员宽带匹配。还有一点需要详细说明的是这些流全部声明为静态变量。静态变量是指其值不随函数调用变化的一种变量。由于在作为顺序程序执行时顶层模块(以及全部的子模块)每个时钟周期会被调用一次,所以任何需要保持其值不随时钟周期变化的变量都需要声明为静态变量。

  3 创建流水线设计

  将要讨论的最后也是最重要的一个是编译指令。第2行中的数据流编译指令指示Vivado HLS尽量以并行方式安排执行该函数的所有子函数。“internal”参数用于设置该模块的初始化间隔(II)。初始化间隔(II)告知Vivado HLS该模块必须具备的处理新输入数据字的频次,故决定了设计的吞吐量。不过这并不妨碍模块内部的流水线化和拥有>1的时延。当II=2时,该模块将用两个周期完成数据字的处理,然后再读入新的数据字。以这种方式Vivado HLS可以简化模块最终的RTL。也就是说,在一个典型的协议处理应用中,设计必须具备每个时钟周期处理一个数据字的能力,故从现在起我们令II=1。

  初始化间隔(II)告知Vivado HLS该模块必须具备的处理新输入数据字的频次,故决定了设计的吞吐量。

  最后要解决的问题是函数调用本身。在Vivado HLS中,这个过程对应的是模块的实例化。传递给每个模块的参数实质上定义了模块的通信端口。在本例中,通过将输入连接到第一个模块,然后用 modOne2modTwo流把第一个模块连接到第二个模块,依次类推,将三个模块链接起来。(未完待续)

c语言相关文章:c语言教程


c++相关文章:c++教程



上一页 1 2 下一页

关键词: Vivado FIFO 存储器 RAM C/C++

评论


相关推荐

技术专区

关闭