我正在將一些SystemVerilog代碼移植到SystemC/C++。我使用std :: bitset來表示位向量,但我可以看到它已經不能提供訪問切片的方法。如何在C++中執行SystemVerilog風格的位矢量切片分配?
例如,如果我想設置REG1至位REG2的4-8 SystemVerilog的代碼:
bit [3:0] reg1;
bit [15:0] reg2;
reg1 = reg2[7:4];
我怎麼能做到這一點用的std :: bitset的?
bitset<4> reg1;
bitset<16> reg2;
reg1[0] = reg2[4];
reg1[1] = reg2[5];
reg1[2] = reg2[6];
reg1[3] = reg2[7];
有沒有更好的方法?
我會寫一個函數'subbit(常量的std :: bitset的&位,SIZE_T開始,爲size_t結束)'掩蓋了你想要的位,他們轉移到右側,'begin'是位0等,然後返回該值。它取決於你。 –
GManNickG
注意這裏有一個根本的不一致:範圍可以在運行時指定,但bitset大小在編譯時指定。除非你保證範圍用積分常數表達式表示,否則你不能肯定地說(沒有運行時檢查)結果範圍足夠小以適應目標比特集。也就是說,你必須在運行時檢查'end - begin <= N'。您可以提供一個備用函數'subbit_c (std :: bitset) - > std :: bitset '以確保匹配類型。 –
GManNickG