VHDL-2008测试台:从不同设计层次调用过程的最佳方法?

VHDL-2008测试台:从不同设计层次调用过程的最佳方法?,vhdl,Vhdl,假设我有一个VHDL体系结构,它模拟一个块Ram,这个体系结构有两个存储过程,一个用于写入内存,另一个用于读取内存。我在testbench中实例化了3个块ram模型,如下所示: entity bram; ... end entity; architecture behavioral of bram is... begin end architecture; ":testbench:testcase" 从设计的不同层次调用过程的最佳方法是什么 比方

假设我有一个VHDL体系结构,它模拟一个块Ram,这个体系结构有两个存储过程,一个用于写入内存,另一个用于读取内存。我在testbench中实例化了3个块ram模型,如下所示:

     entity bram;  ... end entity;  
     architecture behavioral of bram is... begin end architecture;
":testbench:testcase"
从设计的不同层次调用过程的最佳方法是什么

比方说,我在测试台的另一个级别,称为testcase,例如:

":testbench:bram_1"    
":testbench:bram_2"    
":testbench:bram_3"
按等级划分:

     entity testcase;  ... end entity;  
     architecture behavioral of testcase is... begin end architecture;
现在,在testcase架构中,我想调用存储在bram 1、2和3的3个实例中的这些过程,如下所示:

     entity bram;  ... end entity;  
     architecture behavioral of bram is... begin end architecture;
":testbench:testcase"
我可以在VHDL中以任何现代风格做类似的事情吗?例如,在VHDL-2008中,是否有可能实现与此类似的效果

我问这个问题的原因是因为Verilog-95已经允许你这么做超过25年了。。。我想转换一个Verilog-95测试台,它可以实现这一点,以刺激设计,而无需为VHDL大规模重组测试台

考虑下面这个简单的Verilog-2001示例,我希望能够在VHDL-2008中实现:

:testbench:bram_1:write (X"FFFF", X"FFFF");
:testbench:bram_2:read  (X"FFFF", X"FFFF");    
:testbench:bram_3:write (X"FFFF", X"FFFF");

关于如何在VHDL中实现类似效果以调用不同层次结构级别的过程,您有什么想法吗?

VHDL 2008只能使用对象的外部名称。您不能访问内部过程等,但可能需要考虑受保护类型。它们可以有自己的方法,您可以通过外部名称访问对象并调用它们的方法。。我可以将一个受保护的对象传递到一个具有读写功能的体系结构中,该功能将命令写入某种类型的队列。。。然后在体系结构中,使用传递到体系结构中的受保护对象读取此队列?我以前从未见过这样的事。。。也许有人举个例子?也许你不需要排队。因为我想要我想要的是方法阻塞,直到内部过程完成,而不是架构。。。。我需要的是在对象的外部暴露方法和体系结构的内部过程之间建立一个明显的机制…一些好消息和坏消息。好消息是,我所做的与您在我的内部axi验证ip中描述的几乎完全相同。坏消息是,在受保护类型中等待和阻止是非法的。因此,我在一个实体中有一个受保护的类型,其中一个进程从中提取事务。我通过一个外部名称别名从测试台上传它们。Osvvm记分板可以用作通用队列。注意,在vhdl2019中,受保护类型中的等待和阻塞仍然是非法的。我已经要求在将来的版本中使用该功能。OSVVM有一个内存建模包。您可以从GitHub获取这些信息,网址:。文档位于文档存储库中。使用受保护类型,您可以作为外部名称访问受保护类型。SynthWorks在我们的培训课程中涵盖了相当基本的VHDL-2008内容。内存型号支持FileReadH和FileReadB,它们以与Verilog向上兼容的格式读取文件。