首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于仿真的VHDL替代子模块体系结构

用于仿真的VHDL替代子模块体系结构
EN

Stack Overflow用户
提问于 2013-02-11 20:14:31
回答 2查看 2.9K关注 0票数 5

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

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

有没有一种方法可以设置它,也许可以使用VHDL配置来使用简单版本的控制器实体进行模拟?我对模拟还是个新手,总体上对VHDL的使用经验不是很丰富。

这是使用Xilinx ISE和ISim瞄准斯巴达-6,如果这有区别的话。

EN

回答 2

Stack Overflow用户

发布于 2013-02-11 23:37:58

一种不使用配置的方法:

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

因此,您可以在testbench中将一个单元实例化为

代码语言:javascript
复制
Controller_1 : entity work.DRAM_controller(simple)
               port map ( ...

代码语言:javascript
复制
Controller_2 : entity work.DRAM_controller(rtl)
               port map ( ...

其中"simple“和”rtl“是两种架构。为此,您可能必须将实体和两个架构放在不同的文件中;Xilinx工具不太擅长处理不常见的情况(他们曾经告诉我,配置不是设计单元!)

然后,您可以在testbench中使用任一体系结构实例化DRAM控制器。

正如vermaete所说,您还必须测试简化的架构。一种方法是通过在另一个测试平台中实例化两个控制器来在其上运行单元测试,每个测试平台都有一个控制器,并比较每个操作的输出。

有趣的是,Ashenden的直接实体实例化的例子( VHDL 5.4的设计者指南,在我1996年的版本中是第136页)是一个DRAM控制器!

编辑:(这是一条评论,但太长了)

对于单元测试,两个控制器都可以在testbench中实例化,一切都很好。

对于系统测试,我不明白DRAM控制器在UUT (顶层设计)中-您需要一个实例化(真实的)用于synth和简单DRAM测试,而另一个实例化( simple )用于完整的DRAM测试。是的,配置是实现这一目标的正确且最干净的方法。在顶层设计(UUT)中实例化控制器实体,并在配置中选择架构。

然而,还有一个不太干净的替代方案,作为配置不起作用的备用方案。为顶层实体创建2个架构;不同之处仅在于它们为控制器选择的拱门。当您在testbench中实例化顶级实体时,您可以选择任一架构。但是这很痛苦,因为你必须保持两个版本的同步。

票数 5
EN

Stack Overflow用户

发布于 2013-02-12 19:28:21

另一种无需配置的方法是使用generate来实现这一点:

代码语言:javascript
复制
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对。提交错误报告:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14811646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档