VHDL const字符串数组,长度不同

时间:2018-01-12 08:55:13

标签: arrays string const vhdl string-length

我想在Testbench中创建一个字符串列表来加载不同的文件,例如。

我试过了:

type tastring ARRAY(iADCCount_C-1 downto 0) of string;
constant Filenames     : tastring := ("file.txt",
                                      "anotherfile.txt",
                                      "jetanotherfile.txt");

数组中不可能有可变长度的字符串。

此外:

type tpstring is access string;
type tpastring is ARRAY(iADCCount_C-1 downto 0) of tpstring;
constant Filenames     : tpastring := (new string'("file.txt"),
                                       new string'(anotherfile.txt"),
                                       new string'(jetanotherfile.txt"));

不起作用!您无法使访问类型保持不变。我错过了什么吗?有没有办法制作一个字符串列表而不将它们填充到相同的大小?

2 个答案:

答案 0 :(得分:1)

this answer。 AFAIK不可能有可变长度字符串数组。

如果您按照答案中的建议实现自定义修剪功能,请尝试使用文件名中不存在的固定间距字符(例如?for windows),因为它还可以确保NUL字符或其他非打印字符没有问题这可能会导致使用不同综合工具的打嗝。

答案 1 :(得分:1)

你几乎是正确的:)

第二个代码段必须使用变量,因为访问类型只能用于kind变量的对象。

type line_vector is array(iADCCount_C-1 downto 0) of line;
variable Filenames : line_vector := (
  new string'("file.txt"),
  new string'("anotherfile.txt"),
  new string'("jetanotherfile.txt")
);

注1:添加了缺失的"个字符 注2:类型line已在VHDL中定义 注3:类型line_vector将由VHDL-2017定义。

作为替代方案,您可以使用字符NUL填充所有字符串。您可能希望实现两个函数,用于将字符串的大小调整为常量的大小并修剪字符串(删除尾随的NUL个字符。