Process 合成和模拟(VHDL)之间的区别是什么

Process 合成和模拟(VHDL)之间的区别是什么,process,simulation,vhdl,synthesis,Process,Simulation,Vhdl,Synthesis,我正在从事一个VHDL项目,其中包括一个fsm。 有些状态根据计数器而改变。除了当前状态和输入之外,直到我将“clk”放在灵敏度列表中,它才起作用。 我知道在合成过程中,灵敏度没有被使用,或者被丢弃。但这怎么会对模拟结果产生如此大的影响呢?如果a离开这个“clk”,fsm会像我希望的那样运行FPGA吗 谢谢 David这是一个简单的解释: 模拟器使用灵敏度列表来确定何时需要运行流程。模拟器需要提示以确定何时运行进程的原因是,计算机处理器一次只能做一件事(或在多核系统中只能做几件事),处理器必须轮

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

谢谢


David这是一个简单的解释:

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

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

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


另外,试着校对你的问题。

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

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

另一方面,模拟器比逻辑设计有更广阔的前景。该语言定义了敏感度列表,以指示代码应在何时运行。因此模拟器以高保真的方式实现语义

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

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

打开VHDL-2008开关,并在您的合成工具中将其输出。如果它不起作用,请确保针对该工具提交一个bug

请参阅@David Kester:您应该显示相关代码,以便获得准确而具体的答案。