如何在 C++ 中进行 SystemVerilog 风格的位向量切片分配?

Ric*_*ich 4 c++ system-verilog bitset

我正在将一些 SystemVerilog 代码移植到 SystemC/C++。我使用 std::bitset 来表示位向量,但我已经看到它无法提供访问切片的方法。

例如,如果我想使用 SystemVerilog 代码将 reg1 设置为 reg2 的位 4-8:

bit [3:0] reg1;
bit [15:0] reg2;
reg1 = reg2[7:4];
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 std::bitset 做到这一点?

bitset<4> reg1;
bitset<16> reg2;
reg1[0] = reg2[4];
reg1[1] = reg2[5];
reg1[2] = reg2[6];
reg1[3] = reg2[7];
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

jcl*_*lin 5

现在你使用SystemC,为什么不使用sc_bv<>来原生表示HDL信号呢?由于 SystemC 有一组数据类型来表示 HDL 位/逻辑和字逻辑运算符,因此将 SystemVerilog/Verilog 数据类型映射到 C/C++ 代码应该更容易。

sc_bv<4> reg1;
sc_bv<16> reg2;
reg1 = reg2.range(7,4);
Run Code Online (Sandbox Code Playgroud)