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

时间:2016-04-16 08:11:22

标签: verilog system-verilog hdl

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

1_ byte 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

并在我的代码中使用它:

byte str [0:7];
always @(posedge clk) begin 
     str = getStr(); // str will be "abcdefg" after getStr() return it.
     //The rest of the code...
end

我认为必须有一种更好更简单的方法来初始化SystemVerilog中的字符串。如果你知道它对我有帮助。感谢。

1 个答案:

答案 0 :(得分:0)

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

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

那足够接近吗?如果你真的需要它是一个解压缩的字节数组,那么你将不得不转换它。