我已经编写了一些包含RTC组件的代码。要对代码进行适当的仿真有点困难,因为时钟速度被设置为50 the,所以要想看到任何“实时”事件的发生将是永远的事情。我确实试着在modelsim中做了2秒钟的模拟,但它最终崩溃了。
如果我没有一个可以烧录和测试使用范围的评估板,那会有什么更好的方法呢?
发布于 2014-06-03 04:47:16
如果您可以提供一个更具体的示例,说明您正在尝试测试的是什么,以及什么正在消耗您的模拟周期,这将是有帮助的。
通常,如果您有很多代码需要在模拟中进行测试,如果您可以创建子模块的测试平台并首先对其进行测试,这将非常有用。
如果您正在尝试测试具有非常深的fifos的逻辑,您正在尝试填充或正在尝试命中的大型计数器的特定计数,您可以在代码中添加逻辑以帮助在较少的周期内创建这些条件(如计数器上的加载指令),或者您可以从测试台本身强制您的设计的内部信号值。
这些只是几个大概的想法。再说一次,如果你提供了更多关于你正在模拟的东西的细节,这个论坛上可能会有一些人可以提供更具体的帮助。
发布于 2014-06-13 03:37:04
正如Ciano已经提到的,如果您提供更多关于您的设计的信息,我们将能够给出更准确的答案。然而,硬件设计人员应该遵循一些技巧,特别是对于复杂的系统仿真。下面列出了其中一些(我最常用的):
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;
https://stackoverflow.com/questions/24002380
复制相似问题