verilog/VHDL 状态机到底可否只写在一个process当中
从道理上讲因为没有process间的延迟所以无法保证信号的保持时间,但从modelsim模拟来看好像问题不大?是不是编译器自动优化成2个process了?请大神讲解?...
从道理上讲因为没有process间的延迟所以无法保证信号的保持时间,但从modelsim模拟来看好像问题不大?是不是编译器自动优化成2个process了?请大神讲解?
展开
1个回答
展开全部
没有规定描述状态机一定要写成两个进程,完全可以在一个进程中实现状态机。只不过从教学的方便出发,将状态机中的时序逻辑和组合逻辑分开分析,概念上比较明确,容易学懂而已。因此出现教材上总是将时序逻辑描述放在一个进程,组合逻辑描述放到另一个进程中的现象。因为进程之间是并行的,所以在一个进程中既描述时序逻辑也描述组合逻辑是没有问题的,当然也可以一个进程描述时序逻辑、另一个进程描述组合逻辑,其效果是一样的。编译器不会把一个进程再分成多个进程,反而是无论几个进程,综合器都会将其综合成并行的电路模块,进程反而被综合器综合掉了(因为进程是行为描述,而综合器在综合时会将行为描述转换成RTL描述和结构描述)。
更多追问追答
追问
但是写在一个进程中的话,时序逻辑部分(状态跳转)和组合逻辑部分(根据状态的输出)都是用时钟上下沿在触发,无法理解在一个时钟上下沿处既改变状态又根据状态输出变量。不过听了你的讲解貌似有所理解了,不知可不可以这样理解:这个单进程被综合器用了2级级联的时序逻辑实现,从而保证了状态量的保持时间,使得可以正确读取状态量确定输出量。
追答
组合逻辑电路是与时钟边沿无关的电路,它的输出只取决于它的输入信号(也就是状态输出)。所以实际上,只有状态机中的时序逻辑电路部分才是根据时钟边沿来触发的。
如果你写成两个进程就会发现,第一个进程的敏感信号是时钟信号,而第二个进程的敏感信号与时钟信号无关,只与当前状态和除时钟信号之外的输入信号有关。第一个进程是时序逻辑电路,第二个进程是组合逻辑电路。
所以即使写到一个进程当中,也只有状态机的时序逻辑部分与时钟信号的边沿相关。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询