hls 类型

如果你对Vivado HLS中综合之后端口的ap_none之类的类型指示摸不着头脑的话,那就来一起学习一下它们是如何使用的吧。在Vivado HLS中,我们可以指定端口使用的类型,这样在对C代码进行综合的时候,就可以指定某个端口所使用的转换协议了。常见的类型有:

1. ap_none

         默认类型,该类型不适用任何I/O转换协议,它用于表示只读的输入信号,对应于HDL中的wire类型。

2. ap_stable

         只用于输入信号,其具体实现方式仍为ap_none。它用于向Vivado HLS的综合器表明该信号在两次复位之间值是不变的。

3. ap_vld

在数据端口port_name的基础上创建一个额外的数据有效信号指示< port_name >_vld。

4. ap_ack

         在数据端口port_name的基础上创建一个额外的应答信号指示< port_name >_ack。

5. ap_hs

         使用该类型,则会同时创建额外的数据有效信号和应答信号,其效果相当于ap_vld与ap_ack之和。

6. ap_ovld

         对于输入信号,其效果与ap_none是一样的。

         对于输出信号,其效果与ap_vld是一样的。

         对于双向(inout)类型的信号,输入使用ap_none,输出使用ap_vld进行处理。

7. ap_memory

         把对数组的读写等效为对外部RAM的引用。

8. ap_fifo

         把对数组、指针和参数引用的读写用FIFO的方式来实现。

9. ap_bus

         把对指针和参数引用的读写用总线接口的方式来实现。

 

         对上述9种数据端口类型的定义,我们在C代码中可以使用下面的预处理指令来声明:

#pragma HLS interface <mode> register port=<string>

其中,mode就是这里提到的数据端口类型,string则指需要指定端口类型的端口名称,例如:

#pragma HLS INTERFACE ap_none port=in1

在TCL脚本中,我们也可以对接口类型进行更改。在图形化的开发界面中,可以直接在directives.tcl中进行规则的编辑,如图1所示。

 

图1 通过TCL配置改变端口类型

此外,我们还可以通过在Vivado HLS中的Directive视图中选择INTERFACE来进行更改,如图1所示。

 

图2 接口的类型选择

接下来以一个简单的例子来看看改变接口类型对综合结果的影响。首先,创建一个工程,它的源代码就是简单的三个输入相加:

void adders_io(int in1, int in2, int *in_out1)

{

    *in_out1 = in1 + in2 + *in_out1;

}

         这里我们使用了指针。从其本质上来说,指针是一个“双向”的类型,即它即可以做为输入,同时也可以用来输出。在默认的情况下,端口的综合结果如图3所示。

 

图3 默认情况下的端口综合结果

         如果按照图1中的示例对端口类型进行指定,则C综合之后的结果如图4所示。

 

图4 自定义端口类型之后的端口综合结果

         在图1的示例中,我们指定了端口的类型,所以对比图3与图4,可以看出,端口in1和in2的类型从默认的ap_none变为自定义的ap_vld,并且分别具有了对应的数据有效指示位in1_ap_vld和in2ap_vld。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值