HLS中的位操作可以这么做

电子说

1.2w人已加入

描述

标准C++中已经提供了位运算符,包括位求反、左移、右移、位与、位异或以及位或。在此基础上,HLS考虑到硬件的一个特性,那就是获取数据中的某一位或者某几位,同时,可能对数据本身进行位缩减运算,因此,HLS在这方面做了扩展,提供了一些特有的操作和方法(Method)。当然,这些操作只针对定点数。

代码初始化与赋值代码

对于任意进度整型数据的初始化可以采用如下三种方式,如图1所示。三种方式输出的结果均为11,如图2所示。

图1

代码

图2

代码

代码位选取与位赋值代码

HLS允许选取数据中的某一位,同时还可对指定位重新复制,这些操作均可通过[]完成,如图3所示代码片段。相应的输出结果如图4所示。

图3

代码

图4

代码

此外,通过()或range()还可选取指定范围的某几位。代码片段如图5所示,相应的输出结果图6所示。相比较,直接使用()操作会更快捷。同时,该操作还可实现位反转。当()中的数据一致时,则获取指定位的内容。

图5

代码

图6

代码

代码位缩减代码

就位缩减运算而言,HLS提供了6种位缩减方法:and_reduce()、or_reduce()、xor_reduce()、nand_reduce()、nor_reduce()和xnor_reduce()。如图7所示,相应的输出结果如图8所示。

图7

代码

图8

代码

代码二进制显示代码

有时在调试时,需要把数据以二进制形式打印出来,这时需要用到to_string和c_str(),如图9所示,相应的输出结果如图10所示。

图9

代码

图10

代码

结论

HLS对C++的位操作进行了扩展,可快捷地执行获取某一位或某几位的操作,还可方便地完成位缩减运算。对于C语言,HLS也有相应的扩展,具体可参考ug902。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分