gpt4 book ai didi

verilog - 将位/逻辑向量的 SystemC 结构安全地转换/转换为单个位/逻辑向量

转载 作者:行者123 更新时间:2023-12-02 17:11:19 24 4
gpt4 key购买 nike

我正在将代码从 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 风格的指针转换是否安全/正确。

最佳答案

这是对您自己的答案的轻微改进。您不需要转换为字符串,因为 sc_lv 类型可以与 () 运算符连接。

所以你可以像这样简化你的功能:

sc_lv<64> to64bit() { return (blk1, blk2, blk3, blk4, blk5, blk6, blk7); };

我想有一种方法可以通过重载 typ_block 的某些运算符来进行简单的赋值,但我不确定它是什么。

关于verilog - 将位/逻辑向量的 SystemC 结构安全地转换/转换为单个位/逻辑向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13364464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com