標準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。
-
C++
+關注
關注
22文章
2108瀏覽量
73623 -
代碼
+關注
關注
30文章
4779瀏覽量
68525 -
HLS
+關注
關注
1文章
129瀏覽量
24097
原文標題:HLS中的位操作可以這么做
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論