【问题标题】:what is the difference between synthesis and simulation (VHDL)综合和仿真(VHDL)有什么区别
【发布时间】:2013-12-08 00:41:49
【问题描述】:

我正在开发一个包含 fsm 的 VHDL 项目。 一些状态根据计数器而改变。除了当前状态和输入之外,在我将“clk”放入灵敏度列表之前,它不起作用。 我知道在合成过程中,灵敏度没有被使用,或者被丢弃。但这怎么会对模拟结果产生如此大的影响呢?如果离开这个'clk',fsm会按照我想要的那样运行FPGA吗?

谢谢,

大卫

【问题讨论】:

标签: process simulation vhdl synthesis


【解决方案1】:

这是简单的解释:

模拟器使用敏感度列表来确定何时需要运行进程。模拟器需要提示来确定何时运行进程的原因是因为计算机处理器一次只能做一件(或在多核系统中只能做几件)事情,并且处理器必须轮流运行设计的每个部分.敏感度列表允许模拟在合理的时间范围内运行。

当您将代码合成到 ASIC 或 FPGA 中时,该过程始终“运行”,因为它具有专用硬件。

当您模拟灵敏度列表中没有时钟的状态机时,该过程将永远不会在时钟边沿上运行,而只会在您的输入发生变化时运行。如果您将状态转换实现为触发器(如果 clk'event 和 clk = '1'),则永远不会模拟您的状态转换,除非您碰巧在时钟上升沿同时更改输入。 假设 FSM 在时钟边沿发生变化,您可能应该将时钟留在灵敏度列表中。

另外,请尝试校对您的问题。

【讨论】:

    【解决方案2】:

    综合工具专注于逻辑设计(FPGA、ASIC)并忽略敏感度列表,因为只有三种基本类型的逻辑:组合逻辑、边缘敏感存储(触发器和一些 RAM)和电平敏感存储(锁存器和一些内存)。

    组合逻辑要求所有输入信号都在灵敏度列表中。从综合工具的角度来看,如果缺少一个,他们可以忽略敏感性列表并将其视为所有输入都在敏感性列表中,或者产生一些触发器和组合逻辑的复杂组合,这些组合可能不会做用户无论如何都想要。这两者对供应商都有实施成本,因此,为什么要投入资金(开发时间)来创建无用的东西。因此,唯一好的投资是简化和忽略敏感度列表。

    另一方面,模拟器具有比逻辑设计更大的视角。该语言将敏感度列表定义为指示代码何时运行。因此,模拟器以高保真度实现了该语义。

    长期来看,您可能会很高兴知道 VHDL-2008 允许在灵敏度列表中使用关键字“all”来替换那里的信号输入。这是为了简化组合逻辑的建模。语法如下:

    MyStateMachine : process(all) 
    begin
      -- my statemachine logic 
    end process MyStateMachine ; 
    

    打开 VHDL-2008 开关,然后在您的综合工具中输出。如果它不起作用,请务必提交针对该工具的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 2012-11-17
      • 2012-08-09
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多