SystemVerilog から SystemC にコードを移植しています。SV は、ビット/ロジックのパックされた構造体を単一のビット/ロジック ベクトルとして簡単に解釈できます。例えば:
typedef struct logic {
logic [31:0] blk1; //63:32
logic [4:0] blk2; //31:27
logic [2:0] blk3; //26:24
logic [4:0] blk4; //23:19
logic [2:0] blk5; //18:16
logic [7:0] blk6; //15:8
logic [7:0] blk7; //7:0
} typ_block;
...
typ_block blockA;
logic[63:0] blockB;
blockB = blockA; // no problem here
ただし、SystemC で sc_lv<> テンプレートを使用すると、型の不一致が原因でコンパイラ エラーが発生します。
struct typ_block {
sc_lv<32> blk1; //63:32
sc_lv<5> blk2; //31:27
sc_lv<3> blk3; //26:24
sc_lv<5> blk4; //23:19
sc_lv<3> blk5; //18:16
sc_lv<8> blk6; //15:8
sc_lv<8> blk7; //7:0
};
...
typ_block blockA;
sc_lv<64> blockB;
blockB = blockA; // compiler error
これと同等のことを行うための SystemC でサポートされている適切な方法はありますか? 私は潜在的な解決策を考えることができますが、それらはエレガントでも簡潔でもありません.Cスタイルのポインターキャストが安全/正しいかどうかはわかりません。