我将SystemVerilog中的代码移植到SystemC。 SV很容易将位/逻辑的压缩结构解释为单个位/逻辑向量。例如:安全地将位/逻辑向量的SystemC结构转换/转换为单个位/逻辑向量
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-style指针是否安全/正确。
谢谢这有助于清理它很多 – Rich
dwikle,那个return语句是如何工作的?什么是C++构造的名称来描述'(blk1,blk2,blk3 [...])'? –
罗斯,如果我理解正确,这是因为重载逗号运算符定义为串联sc_lv和类似的类。在[本页]上查看一下(http://www.ht-lab.com/howto/vh2sc_tut/vh2sc_tut2.html)。 – Rich