我正在尝试将模拟输出文件夹作为testbench的通用文件夹。测试平台首先将泛型设置为某个全局可用变量,然后不同的块可以访问此变量以确定输出文件夹。
原因是现在do文件可以启动多个模拟,其中结果将被放入不同的文件夹而无需重新编译VHDL。
以下是我迄今为止所取得的成就并且有效,但看起来非常笨重。
有更好的方法吗?
.do文件:
设置dirname ./SimsetSmall/
exec mkdir -p $ dirname
vsim -G tb / gFolder = $ dirname tb_opt;跑1我们
MyPackage正文:
type tProtectedFileName is protected
body
variable vF : tFileName := new string'("./");
impure function Get return string is
begin
return vF.all;
end function Get;
procedure Set (constant fIn : in string) is
begin
deallocate(vF);
vF := new string'(fIN);
end procedure Set;
end protected body tProtectedFileName;
shared variable svSimFolder : tProtectedFileName;
impure function ifGetSimFolder return string is
begin
return svSimFolder.Get;
end function ifGetSimFolder;
procedure pSetSimFolder (constant fIn : in string) is
begin
svSimFolder.Set(fIn);
end procedure pSetSimFolder;
最后,VHDL文件:
library ieee;
use ieee.std_logic_1164.all;
use std.textio.all;
use ieee.std_logic_textio.all;
use work.MyPackage.all;
entity tb is
generic (gFolder : string);
end entity tb;
architecture sim of tb is
begin
process
begin
pSetSimFolder(gFolder);
wait;
end process;
-- in some other entity without gFolder:
process
file f : text;
begin
wait for 1 ns;
file_open(f, ifGetSimFolder & "thissim.txt", write_mode);
file_close(f);
wait;
end process;
end architecture sim;
具体来说:
我知道我可以将顶级通用传播到所有块,但这是我试图避免的。