gpt4 book ai didi

c++ - 连接位 C++

转载 作者:太空宇宙 更新时间:2023-11-04 16:01:52 25 4
gpt4 key购买 nike

我正在寻找使用 SystemC 连接位的优雅 C++。

一个漂亮的 System Verilog 示例:

bool my_variable;
uint bits_combination = {8'b0, {8{my_variable}}, 8'b1, 4'b0, 2'b1, 2'b0};

我的 C++ 最佳解决方案:

bool my_variable;
sc_uint<32> bits_combination;
bits_combination.range(31,24) = 0;
bits_combination.range(23,16) = my_variable ? (1 << 8)-1 : 0;
bits_combination.range(15,8) = (1 << 8)-1;
bits_combination.range(7,4) = 0;
bits_combination.range(3,2) = (1 << 2)-1;
bits_combination.range(1,0) = 0;

将此行改进为非三元运算符也将有所帮助:

my_variable ? (1 << 8)-1  : 0

最佳答案

在 SystemC 中,逗号运算符被重载用于连接。但是没有像 {8{my_variable}} 这样的复制运算符。

但是,您可以编写一个函数来进行复制。例如:

template <int N, int M>
sc_uint<N*M> replicate( sc_uint<M> val) {
sc_uint<N*M> res = 0;
for (int i = 0; i < N; ++i)
res = (res << M) | val;
return res;
};

因此您的 SystemVerilog 示例的 SystemC 版本可能如下所示:

sc_uint<1> my_variable = 1;
sc_uint<32> bits_concatenation = (sc_uint<8>(0), replicate<8>(my_variable), sc_uint<8>(1), sc_uint<4>(0), sc_uint<2>(1), sc_uint<4>(0) );

关于c++ - 连接位 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42392133/

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