【问题标题】:VHDL alternative submodule architecture for simulation用于仿真的 VHDL 替代子模块架构
【发布时间】:2013-01-26 12:36:42
【问题描述】:

我有一个实现 DRAM 测试序列的 VHDL 组件。它包含一个子实体,即 DRAM 控制器。

我想模拟(调试)DRAM 测试序列,但对 DRAM 控制器使用一个简单的假存根,而不是真正的、复杂的东西。

有没有办法设置它,也许使用 VHDL 配置来使用控制器实体的简单版本进行模拟?我对仿真还很陌生,对 VHDL 的一般经验并不丰富。

这是使用面向 Spartan-6 的 Xilinx ISE 和 ISim,如果这有影响的话。

【问题讨论】:

  • 是否有需要拥有更小/更快的 DRAM 控制器?模拟器或计算能力湖是否有限制?如果没有,我就不会努力和/或冒险。
  • 有趣的问题:这正是配置的用途!然而,以这种方式使用它们——甚至根本不使用它们——是非常罕见的,因此容易出现奇怪的工具错误。不管我回答不回答,我都在饶有兴趣地看着这个!
  • @Vermaete:如果 DDR 控制器是 Xilinx MIG:它会坚持一个持续 50us 的校准序列,然后才能让您运行一个有用的仿真周期。将其与他们(疯狂地)仅在门级模拟的另一个内核相结合,每次模拟您要等待半小时。这可能不算“需要”,但很接近!
  • @Brian Drummond:好吧,这将是一个正当的理由。但是,其中一些 IP 具有通过跳过这些阶段来加速模拟的泛型。
  • 给出的时间是那些泛型!

标签: simulation vhdl fpga


【解决方案1】:

另一种免配置方式是使用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;

您可以使用this answer 创建一个in_simulation 常量。

(如果您没有符合 VHDL2008 的工具,则不能使用 if...else..end generate,而必须使用 if in_simulation/if not in_simulation 对。提交错误报告:)

【讨论】:

  • 很好,我忘记了那种方法。我倾向于使用“模拟”函数而不是常量,但想法相同。
【解决方案2】:

一种不使用配置的方式:

请记住,您可以为每个实体创建多个架构。

因此,您可以将测试台中的单元实例化为

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 个架构;仅在他们为控制器选择的拱门上有所不同。当您在测试台中实例化顶级实体时,您可以选择任一架构。不过这很痛苦,因为您必须使两个版本保持同步。

【讨论】:

  • 这看起来需要控制器和我的 UUT 成为测试台的孩子,对吗?目前,DRAM 控制器是 UUT 的子级(它将是测试台的唯一子级)。这种方法行得通吗?
猜你喜欢
  • 2015-01-24
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
相关资源
最近更新 更多