在VHDL中有没有办法使用std_texio来读取.csv文件的元素并将它们存储在变量中然后使用?

时间:2015-08-25 15:14:50

标签: csv vhdl

我目前可以使用readline和read函数从文件中读取一行,并将字符存储在由变量im的大小控制的变量中,例如,如果文件的第一行是

您好,世界

我希望将这两个单词存储在不同的变量中,我会按照

的方式做一些事情
file      in_file         :  text open READ_MODE  is "hello_world.csv";
variable  in_line         :  line;
variable  first_word      :  string(1to5);
variable  second_word     :  string(1to5);

begin
readline(infile,inline);
read(inline,first_word);
read(inline,second_word);

然而,这取决于我希望能够一般性地读取逗号之前的第一个元素的元素的大小,并将其分配给变量然后查找下一个元素,直到下一个逗号并将其存储在另一个变量中如果这是有道理的。

非常感谢

1 个答案:

答案 0 :(得分:2)

开源VUnit test framework有一个包含拆分功能的独立string operations package

impure function split (
  constant s         : string;
  constant sep       : string;
  constant max_split : integer := -1)
 return lines_t;

您可以使用将字符串(s)拆分为由sep分隔的部分。例如

parts := split("hello,world",",");

partsline类型元素的向量,因此parts[0].all在这种情况下等于hello。查看软件包的testbench并查找“Test split”测试用例,以查看该函数如何处理各种正常输入和边角情况的详细信息。

由于我们使用line类型而不是string,因此我们不必知道单个元素的长度。

我是VUnit的作者之一。