将文件从VHDL进程打开到实例化两次的实体时出现问题:名称冲突

时间:2013-01-11 08:43:37

标签: vhdl hdl

我有一个VHDL实体,它具有以下结构:

-- Imports...
entity myentity is
  port (..specifying in and out signals..);
end myentity;

architecture beh_myentity of myentity is
  begin
    process(..sensitivity list..)
      -- Some variables
      file myfile : text open write_mode 
                    is "myentlog.txt";  -- <== My problem is here!!!
        begin
          -- ..The process body..
    end process;
end beh_myentity;

打开文件没问题,一切正常!我有个问题。当我创建一个测试平台并运行它时,我通常会创建一个实体的单个实例。但在我的情况下,我现在需要放两个实例。我的问题是我将与文件名冲突,并且一个进程将不可避免地无法打开和写入(相同)日志文件。

我想解决这个问题,所以问题在这里:

  1. 在我的端口我有信号,是否可以将信号值附加到文件名?我担心这不是最好的事情(甚至不知道这样的事情是否有效)。

  2. 有没有办法在测试平台中获取表示实体实例名称的变量?

  3. 有没有办法将字符串传递给实体,以便我可以将它附加到文件名的末尾?

  4. 三江源

2 个答案:

答案 0 :(得分:3)

尝试将文件名作为通用名称而不是端口传递。

http://www.ics.uci.edu/~jmoorkan/vhdlref/generics.html

答案 1 :(得分:3)

包含文件名的字符串类型的信号;或者通用的(再次,类型字符串)。

该信号允许您在测试平台的不同时间为同一实体分配不同的文件名 - 使用VHDL-1993或更高版本,架构可以使用新文件名调用file_open()

泛型为每个不同的实体提供固定的文件名。

使用最简单的应用程序。

您的具体问题: 1)是的,如果信号是一个字符串,你可以将整个文件名作为字符串传入或传入后缀。因为您在运行时生成字符串,所以需要VHDL-93(或更高版本)语法

process (...) is
file my_file;
begin
   file_open(my_file, base_name & suffix & ".txt", read_mode);
   ...
   file_close(my_file);
end process;

2)最好的方法是在测试平台中生成文件名并将其传入。但是实体的输出端口可以工作!当然,你无法合成这个实体......

3)当然......

entity myentity is
  generic ( base_name : string := "testfile");
  port    (suffix : in string);
end myentity;

将传入(2)中所需的字符串。

如果必须使用VHDL-87语法(如示例所示),请将整个名称作为通用名称传递:

file myfile : text open write_mode is base_name;