我有一个实现 DRAM 测试序列的 VHDL 组件。它包含一个子实体,即 DRAM 控制器。
我想模拟(调试)DRAM 测试序列,但对 DRAM 控制器使用一个简单的假存根,而不是真正的、复杂的东西。
有没有办法可以设置它,也许使用 VHDL 配置来使用控制器实体的简单版本进行仿真?我对仿真很陌生,一般来说对 VHDL 的经验并不丰富。
这是使用面向 Spartan-6 的 Xilinx ISE 和 ISim,如果这有所作为的话。
我有一个实现 DRAM 测试序列的 VHDL 组件。它包含一个子实体,即 DRAM 控制器。
我想模拟(调试)DRAM 测试序列,但对 DRAM 控制器使用一个简单的假存根,而不是真正的、复杂的东西。
有没有办法可以设置它,也许使用 VHDL 配置来使用控制器实体的简单版本进行仿真?我对仿真很陌生,一般来说对 VHDL 的经验并不丰富。
这是使用面向 Spartan-6 的 Xilinx ISE 和 ISim,如果这有所作为的话。
一种不使用配置的方法:
请记住,您可以为每个实体创建多个架构。
因此,您可以在测试台中将一个单元实例化为
Controller_1 : entity work.DRAM_controller(simple)
port map ( ...
或者
Controller_2 : entity work.DRAM_controller(rtl)
port map ( ...
其中“simple”和“rtl”是两种架构。为此,您可能必须将实体和两种架构放在不同的文件中;Xilinx 工具不太擅长处理不常见的情况(有一次他们告诉我配置不是设计单元!)
然后,您可以在测试平台中使用任一架构实例化 DRAM 控制器。
正如vermaete 所说,您还必须测试简化的架构。一种方法是通过在另一个测试平台中实例化两个控制器来在其上运行单元测试,每个架构一个,并比较每个操作的输出。
有趣的是,Ashenden 的直接实体实例化示例(Designer's Guide to VHDL ch 5.4, p.136 in my 1996 edition)是一个 DRAM 控制器!
编辑:(这是一条评论,但太长了)
对于单元测试,两个控制器都可以在测试平台中实例化,一切都很好。
对于系统测试,我不明白 DRAM 控制器在 UUT(顶层设计)内部——您需要一个实例化(真实的)用于合成器和简单的 DRAM 测试,而另一个(简单)用于完整的 DRAM 测试。是的,配置是正确和最干净的方法。在顶层设计 (UUT) 中实例化控制器实体,并在配置中选择架构。
但是,有一个不太干净的替代方案,作为一种备用计划,以防配置不起作用。为顶级实体创建 2 个架构;仅在他们为控制器选择的拱门上有所不同。当您在测试台中实例化顶级实体时,您可以选择任一架构。不过这很痛苦,因为您必须使两个版本保持同步。
另一种免配置的方式是使用generate
来实现这一点:
sim:if in_simulation generate
Controller_1 : entity work.DRAM_controller(simple)
port map ...
else
Controller_1 : entity work.DRAM_controller(rtl)
port map ...
end generate;
您可以使用此答案创建一个in_simulation
常量。
(如果您没有符合 VHDL2008 的工具,则不能执行 anif...else..end generate
并且您必须执行if in_simulation
/ if not in_simulation
pair 代替。提出错误报告 :)