hls的unknown directivee视图怎么没有了

Vivado HLS是Xilinx推出的高层次综合工具,采用 C 语言进行 FPGA 设计,这次我们使用HLS工具进行3GPP LTE 加密算法中的Snow3G加密算法和ZUC加密算法的仿真和综合,由于是第一次使用,对软件不太熟悉,在使用过程中遇到了不少的问题,在查阅相关资料等基础上一一解决了。
关于HLS使用介绍的,Xilinx官方有两个重要的PDF文档,是ug871-vivado-high-level-synthesis-tutorial.pdf和ug902-vivado-high-level-synthesis.pdf,里面详细介绍了包括怎样建立HLS工程,怎么编写testbench,怎么进行优化等问题。其次,HLS提供了一些example样例,是很好的学习资料。
由于Snow3G的程序结构比较复杂,函数调用很多,导致程序运行效率会很慢,综合出来的效果不是很理想,第一次综合时,我们直接没得出clock和latency,显示了好多问号,出现这种情况,一般是程序结构比较复杂,二是程序中可能出现了不确定次数的循环结构,导致HLS软件仿真不出来,这时候要对程序结构进行优化。
关于优化,上面提到的两篇PDF文档里介绍的比较详细,在HLS软件界面,点击程序所在的文件,在右侧边栏有个Directive,里面列出了程序中所有用到的变量、函数和循环结构,点击右键可以给其配置。对循环结构,一般选择unroll(即展开循环),可以自己设定展开因子factor。为提高程序的并行化处理,可以给函数选择PIPELINE。对应数组,可以设置为ARRAY_PARTITION,数组维数可以自己设定。HLS软件其实很智能的,简单的结构,一般软件自己会优化好。每一个优化方案都保存在一个Solution里,HLS可以创建多个Solution,用于比较不用的优化效果。
关于testbench编写,主要是在main函数里调用Top层函数,将Top层函数调用的计算的数据放在.dat文件里,然后与事先保存在另一个.dat文件里的数据进行比较,若一样,测试通过,main函数返回0。部分程序如下:
fp=fopen(&encode_result.dat&,&w&);
for(i=0;i&20;i++)
&&& & ksout=GenerateKeystream(k,IV,ks);
&&& & printf(&%x\n&,ksout);
&&& & fprintf(fp, &%x\n&,ksout);
&& fclose(fp);
&&& retval = system(&diff --brief -w result.dat encode_result.dat&);
&&& if (retval != 0)
&&&&&&&&&& printf(&Test failed& !!!\n&);
&&&&&&&&&& retval=1;
&&&&&&&&&& printf(&Test passed !\n&);
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号深圳市兴天宇电子设备有限
类型:代理商
联系人:韦丽平
本网采购热线:6
联系我时,请说明是在中国智能制造网上看到的,谢谢
主营产品:安全光幕、光纤放大器、光纤线、接近开关 、光电开关、行程开关、限位开关、微动开关、计数器、计时器、温控器、固态继电器、热电偶、PT100热电阻、燃烧保护继电器、火焰检测器、步进电机及驱动器、压力开关
主营业务:安全光幕、光纤放大器、光纤线、接近开关 、光电开关、行程开关、限位开关、微动开关、计数器、计时器、温控器、固态继电器、热电偶、PT100热电阻、燃烧保护继电器、火焰检测器、步进电机及驱动器、压力开关
该商家其它产品
摘要:大工计控 温控及采集模块 DUT4000
摘要:大工计控 网络化可编程控制 TAM4000
摘要:大工计控 网络化可编程控制 TAC6000
摘要:大工计控 网络化可编程控制 TAC3000
摘要:大工计控 网络化可编程控制 PMC2000
摘要:大工计控 网络化可编程控制 PEC9000
摘要:大工计控 网络化可编程控制 PEC8000
摘要:大工计控 网络化可编程控制 PEC7000
其它商家同类产品
您是不是在找Vivado(2)
如果你对VivadoHLS中综合之后端口的ap_none之类的类型指示摸不着头脑的话,那就来一起学习一下它们是如何使用的吧。在Vivado HLS中,我们可以指定端口使用的类型,这样在对C代码进行综合的时候,就可以指定某个端口所使用的转换协议了。常见的类型有:
1. ap_none
&&&&&&&& 默认类型,该类型不适用任何I/O转换协议,它用于表示只读的输入信号,对应于HDL中的wire类型。
2. ap_stable
&&&&&&&& 只用于输入信号,其具体实现方式仍为ap_none。它用于向Vivado HLS的综合器表明该信号在两次复位之间值是不变的。
在数据端口port_name的基础上创建一个额外的数据有效信号指示& port_name &_vld。
&&&&&&&& 在数据端口port_name的基础上创建一个额外的应答信号指示& port_name &_ack。
&&&&&&&& 使用该类型,则会同时创建额外的数据有效信号和应答信号,其效果相当于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种数据端口类型的定义,我们在C代码中可以使用下面的预处理指令来声明:
#pragma HLS interface&mode& register port=&string&
其中,mode就是这里提到的数据端口类型,string则指需要指定端口类型的端口名称,例如:
#pragma HLS INTERFACE ap_noneport=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。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7484次
排名:千里之外
原创:21篇
(1)(4)(1)(1)(2)(2)(1)(2)(2)(1)(2)(3)(2)(2)(1)【原创】在Vivado HLS中如何优化程序的执行速度-paradoxfx的博客
东方欲晓,莫道君行早。踏遍青山人未老,风景这边独好。
【原创】在Vivado HLS中如何优化程序的执行速度
17:24 发表&&
系统分类:&&
自定义分类:
在前面的博文里,我们已经介绍了如何用Vivado
HLS把一个C程序快速转换为RTL并导出(请参考),但是当时,我们并没有太关心转换之后代码的效率和执行速度问题。今天我们以含有for循环的程序来说明,代码的执行速度是如何优化的。
首先新建一个Vivado工程,并输入C代码,然后进行对C代码的高层次综合,综合结果如图1所示。
图1 综合后的资源利用率
从图1中可以看出:
1.&&&&&&&& 目前我们的设计的延时是89个(latency)时钟周期,也就是说需要89个时钟周期后结果才能刷新输出结果。
2.&&&&&&&& 两次读取输入信号运行之间的间隔是90个(Interval)时钟周期,说明在上一次运算输出写操作完成之后,需要等待一个时钟周期,表明目前我们的设计没有进行流水线优化。
3.&&&&&&&& 在C程序中,我们使用了循环,这段逻辑被执行了11次(Trip Count),每次需要8个时钟周期(Iteration Latency)。
显然89个时钟周期对一个FIR滤波器来说不算快,所以我们要分析一下程序中的性能瓶颈,然后才好对症下药。点击Vivado HLS菜单栏上的Analysis视图(或者点击Window---Analysis Perspective),打开详细的性能分析和资源利用率报告,分别如图2、图3所示。
图2 详细的性能分析视图
图3 资源利用率的详细视图
&&&&&&&& 从图2中可以看出,源程序中for循环需要多个时钟周期才能完成,造成了我们的设计存在较大的延时,这是因为目前的综合结果是把for循环编译为一个对象,然后多次调用,这样虽然节省了硬件资源,但是因为串行执行,减小了执行速度;如果我们以设计的运行速度为指标,则可以把for循环改为并行执行的。从图3中可以看出,源程序中的数组被综合为移位然后寄存的逻辑,并且用BRAM实现的,如果把它改为用移位寄存器SRL来实现,则效率会更高。因此,我们对程序性能的优化就从这两个方面考虑。
&&&&&&&& 在Vivado HLS中再新建一个solution,并点击菜单栏的Project---Close
Inactive Solution Tabs,关闭其它已打开的解决方案。然后双击打开源程序,并在Directive视图中for循环上点右键,插入新的设计规则,如图4所示。
图4 为代码制定设计规则
&&&&&&&& 然后为for循环指定Unroll的规则,为shift_reg指定Array_Partition的规则,如图5所示。
图5 程序优化使用的规则
&&&&&&&& 然后再运行C代码的综合。接下来就要比较几个solution下的结果了。点击Vivado HLS工具栏Project下面的compare results,选择要对比的几个solution的报告,然后对比结果就生成了,如图6所示。
图6 优化之后的结果
&&&&&&&& 由图6可见,把for循环从串行改为并行,并且把移位逻辑用SRL实现之后,程序的延迟减小到原来的1/5,而资源利用率有上升,这也是FPGA设计中“空间换时间”的典型体现。
更多的优化规则请参考ug902 HLS的用户指南,谢谢支持。
发表于 22:19
很好的方法,是一个不错的学习教程,正在苦于不知道怎么学习呢
共1页&1条记录&&&首页 上一页&1 下一页 末页
自定义分类
点击图10中的tmp.xpr,Vivado启动了。但是目前没有电路板,怎么能测试下呢
这个软件,像个小厂出的,山寨厂那种。
典型延时时间配置,SYSCLKOUT=150MHz。 应该是100MHz才对吧。?!
国内Vivado用得少,难得的资料
把gateway模块的输出和x_V配置成一样的类型
棒棒哒,谢谢分享!
第一次摸索花点时间,很快就熟悉了
ADI热线电话:
ADI技术支持邮箱:china.2013年2月 移动平台大版内专家分月排行榜第三
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 hlsplayermp4怎么下载 的文章

 

随机推荐