首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时的VHDL仿真?

实时的VHDL仿真?
EN

Stack Overflow用户
提问于 2014-06-03 04:06:45
回答 2查看 626关注 0票数 0

我已经编写了一些包含RTC组件的代码。要对代码进行适当的仿真有点困难,因为时钟速度被设置为50 the,所以要想看到任何“实时”事件的发生将是永远的事情。我确实试着在modelsim中做了2秒钟的模拟,但它最终崩溃了。

如果我没有一个可以烧录和测试使用范围的评估板,那会有什么更好的方法呢?

EN

回答 2

Stack Overflow用户

发布于 2014-06-03 04:47:16

如果您可以提供一个更具体的示例,说明您正在尝试测试的是什么,以及什么正在消耗您的模拟周期,这将是有帮助的。

通常,如果您有很多代码需要在模拟中进行测试,如果您可以创建子模块的测试平台并首先对其进行测试,这将非常有用。

如果您正在尝试测试具有非常深的fifos的逻辑,您正在尝试填充或正在尝试命中的大型计数器的特定计数,您可以在代码中添加逻辑以帮助在较少的周期内创建这些条件(如计数器上的加载指令),或者您可以从测试台本身强制您的设计的内部信号值。

这些只是几个大概的想法。再说一次,如果你提供了更多关于你正在模拟的东西的细节,这个论坛上可能会有一些人可以提供更具体的帮助。

票数 0
EN

Stack Overflow用户

发布于 2014-06-13 03:37:04

正如Ciano已经提到的,如果您提供更多关于您的设计的信息,我们将能够给出更准确的答案。然而,硬件设计人员应该遵循一些技巧,特别是对于复杂的系统仿真。下面列出了其中一些(我最常用的):

  • Hierarchical模拟(正如Ciano已经发布的):与其模拟整个系统,不如尝试模拟较小的模块集。
  • Selective configuration:大多数系统都需要一些初始化过程,如重置初始化时间、外部芯片寄存器初始化等。通常,出于模拟目的,其中一些是不需要的,并且您可以在模拟时使用全局常量来跳过这些阶段,例如:

constant SIMULATION_ENABLE : STD_LOGIC := '1'; ...; -- in reset condition: if SIMULATION_ENABLE = '1' then currentState <= state_executeSystem; -- jump the initialization procedures else currentState <= state_initializeSystem; end if;

小心,不要直接修改你的代码(硬编码)。随着系统的增加,不可能记住您修改了它的哪些部分以进行模拟。如上例所示,使用常量将模块配置为模拟配置文件。当然,规模的选择取决于您的系统。在我的设计中,我使用了两个全局配置文件。其中一个用于模拟,另一个用于合成。大多数常量值都被缩小,以实现较低的抽象模拟:对于较大的模块,创建一个简化和更抽象的模块,作为模块的模型可能是有用的。例如,如果您的处理器具有此RTC (您提到的)作为外围设备,则可以创建此RTC的简化模块。假设您只需要its中断,您可以创建一个简化的模型,例如:

constant INTERRUPT_EVENTS array(1 to 2) of time := ( 32 ns, 100 ms ); process for i in 1 to INTERRUPT_EVENTS'length loop rtcInterrupt <= '0'; wait for INTERRUPT_EVENTS(i); rtcInterrupt <= '1'; wait for clk = '1' and clk'event end for wait; end process;

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

https://stackoverflow.com/questions/24002380

复制
相关文章

相似问题

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