嗨,
去抖对你的项目非常重要。
我们先来看看时钟。
通常,您的电路板上有一个时钟振荡器,它将为FPGA提供几MHz的时钟信号。
现在,如果您要从交换机输入数据,您将如何在纳秒内切换?
您的FSM期望每个上升时钟边沿有一个新位。
虽然辩手可以帮助你缩短冲动,但它无法处理两次按钮推动之间的暂停。
您无法以这种方式创建有用的数据流。
通过设置一些综合和实现选项,可以使用按钮来提供时钟脉冲。
但问题出现了:由于弹跳按钮,每按一次/释放循环不会产生一个时钟脉冲,但脉冲数量不明。
因此,您的FSM总是向前推进许多州。
如果您实现计数器并使用手动按钮提供时钟,则可以看到最佳效果。
每次按下和释放时,计数器将向前移动3到10个++步(取决于按钮的机械属性)。
所以有必要使用时钟振荡器并有一些去抖动电路,确保每次按键按下都会导致一次转换。
这样您就可以提供干净的手动时钟和数据信号来测试您的FSM。
然而,这仅适用于小电路,因为时钟信号将通过正常的路由资源而不是全局时钟网络进行路由。
对于较大的电路,您可以使用振荡器时钟进行设计,并在每次按下按钮时以1个时钟周期的脉冲输入FF的CE输入。
如果你在论坛上搜索“debouncing”,你会发现很多关于这个主题和一些代码示例的讨论。
有一个很好的综合
Eilert
嗨,
去抖对你的项目非常重要。
我们先来看看时钟。
通常,您的电路板上有一个时钟振荡器,它将为FPGA提供几MHz的时钟信号。
现在,如果您要从交换机输入数据,您将如何在纳秒内切换?
您的FSM期望每个上升时钟边沿有一个新位。
虽然辩手可以帮助你缩短冲动,但它无法处理两次按钮推动之间的暂停。
您无法以这种方式创建有用的数据流。
通过设置一些综合和实现选项,可以使用按钮来提供时钟脉冲。
但问题出现了:由于弹跳按钮,每按一次/释放循环不会产生一个时钟脉冲,但脉冲数量不明。
因此,您的FSM总是向前推进许多州。
如果您实现计数器并使用手动按钮提供时钟,则可以看到最佳效果。
每次按下和释放时,计数器将向前移动3到10个++步(取决于按钮的机械属性)。
所以有必要使用时钟振荡器并有一些去抖动电路,确保每次按键按下都会导致一次转换。
这样您就可以提供干净的手动时钟和数据信号来测试您的FSM。
然而,这仅适用于小电路,因为时钟信号将通过正常的路由资源而不是全局时钟网络进行路由。
对于较大的电路,您可以使用振荡器时钟进行设计,并在每次按下按钮时以1个时钟周期的脉冲输入FF的CE输入。
如果你在论坛上搜索“debouncing”,你会发现很多关于这个主题和一些代码示例的讨论。
有一个很好的综合
Eilert
举报