我有一个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;
打开文件没问题,一切正常!我有个问题。当我创建一个测试平台并运行它时,我通常会创建一个实体的单个实例。但在我的情况下,我现在需要放两个实例。我的问题是我将与文件名冲突,并且一个进程将不可避免地无法打开和写入(相同)日志文件。
我想解决这个问题,所以问题在这里:
在我的端口我有信号,是否可以将信号值附加到文件名?我担心这不是最好的事情(甚至不知道这样的事情是否有效)。
有没有办法在测试平台中获取表示实体实例名称的变量?
有没有办法将字符串传递给实体,以便我可以将它附加到文件名的末尾?
三江源
答案 0 :(得分:3)
尝试将文件名作为通用名称而不是端口传递。
答案 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;