我有一个VHDL组件,它实现了一个DRAM测试序列。它包含一个子实体,它是DRAM控制器。
我想模拟(调试)DRAM测试序列,但是为DRAM控制器使用一个简单的假存根而不是真正复杂的东西。
有没有办法我可以设置它,也许使用VHDL配置来使用简单版本的控制器实体进行模拟?我对模拟很陌生,而且对VHDL没有太多的经验。
这是使用针对Spartan-6的Xilinx ISE和ISim,如果这有所不同。
答案 0 :(得分:5)
一种不使用配置的方法:
请记住,您可以为每个实体创建多个体系结构。
因此,您可以将测试平台中的单元实例化为
Controller_1 : entity work.DRAM_controller(simple)
port map ( ...
或
Controller_2 : entity work.DRAM_controller(rtl)
port map ( ...
其中“simple”和“rtl”是两种架构。为此,您可能必须将实体和两个体系结构放在不同的文件中; Xilinx工具在处理不常见的情况方面不是很擅长(有一次他们告诉我配置不是设计单位!)
然后,您可以在测试平台中使用任一架构实例化DRAM控制器。
正如vermaete所说,您还必须测试简化的架构。一种方法是在其上运行单元测试,方法是在另一个测试平台中实例化两个控制器,每个架构一个,并比较每个操作的输出。
有趣的是Ashenden的直接实体实例化示例(VHDL ch 5.4的Designer指南,1996年版的p.136)是一个DRAM控制器!
编辑:(这是一个评论,但它太长了)
对于单元测试,两个控制器都可以在测试平台中实例化,一切都很好。
对于系统测试,我不明白DRAM控制器在UUT内部(顶层设计) - 你想要一个实例(真实的)用于合成和简单的DRAM测试,另一个(简单的)用于完整的DRAM测试。是的,配置是正确和最干净的方法。在顶层设计(UUT)中实例化控制器ENTITY,并在配置中选择体系结构。
然而,如果配置不起作用的后备计划,则有一个不太干净的替代方案。为顶级实体创建2个体系结构;只在他们为控制器选择的拱门中有所不同。在实例化测试平台中的顶级实体时,可以选择任一架构。但这很痛苦,因为你必须让这两个版本保持同步。
答案 1 :(得分:4)
另一种免配置方式是使用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
对。错误报告:)