如何在SystemVerilog中将可合成字符串分配给字节数组?

如何在SystemVerilog中将可合成字符串分配给字节数组?,verilog,system-verilog,hdl,Verilog,System Verilog,Hdl,我想将字节数组(或任何其他可能的类型)初始化为长字符串。例如定义:string str=“abcdefg”。我读了这两个链接(&),但找不到简单的方法。以下是我发现的两种硬编码方式: 字节str[0:7];='{“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”} 这不是一种合适的方式,因为在我的实际应用程序中字符串很长,我不能一个字母一个字母地写它们 2.使用字符串类型:string str=“abcdefg”。但它只能模拟,不能合成。Quartus只允许在函数或任务中定义字符串。

我想将字节数组(或任何其他可能的类型)初始化为长字符串。例如定义:
string str=“abcdefg”
。我读了这两个链接(&),但找不到简单的方法。以下是我发现的两种硬编码方式:

字节str[0:7];='{“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”} 这不是一种合适的方式,因为在我的实际应用程序中字符串很长,我不能一个字母一个字母地写它们

2.使用字符串类型:
string str=“abcdefg”
。但它只能模拟,不能合成。Quartus只允许在函数或任务中定义字符串。因此,我使用函数
getStr()
初始化字符串:

typedef byte string_t[0:7];

function string_t getStr();
    int i;
    string tmp_str = "abcdefgh";            
    string_t str;

    for(i=0; i<8; i=i+1)
        str[i]=tmp_str[i];

    return str;
endfunction

我认为在SystemVerilog中初始化字符串肯定有更好更简单的方法。如果你知道的话,帮帮我。谢谢。

您可以使用字符串初始化压缩数组:

bit [0:87] BIT_ARRAY = "Hello world";

够近了吗?如果您真的需要它是一个未打包的字节数组,那么您必须转换它

是的,我需要使用未打包的字节数组,因为在初始化之后,我必须逐字读取字符串中的每个字母。使用字节数组可以简单地读取例如第四个字母:
字节第四=字节数组[3]
。虽然读取位数组的字母并不容易(要读取第4位,我们必须读取24到31位)。你能描述一下如何将位数组转换成字节数组来完成你的解决方案吗?我找到了一种将位数组转换成字节数组的方法,但它不能在Quartus中合成,只能在Modelsim中模拟<代码>位[63:0]位数组=“abcdefgh”
字节str[0:7]={>{bit_array}@saman samani是的,我想到了那些流媒体操作器,但没想到它们会是合成的。我本以为按照@sharvill111的建议,在
for
循环中进行转换会达到目的,并且是可合成的(我手头没有一个syntehsiser可供检查)。我相信,流式操作符是可合成的。您可以阅读以下有关可合成SV结构的链接-answare位于。。。
bit [0:87] BIT_ARRAY = "Hello world";