差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
序列检测器 [2016/06/07 17:01] anran [流水灯] |
序列检测器 [2016/06/08 11:26] anran [硬件连接] |
||
---|---|---|---|
行 4: | 行 4: | ||
------ | ------ | ||
- [[STEP-MXO2第一代]] | - [[STEP-MXO2第一代]] | ||
- | - [[STEP-Baseboard]] | ||
====设计要求==== | ====设计要求==== | ||
------ | ------ | ||
- | - 掌握分频功能的设计 | + | - 掌握序列检测的原理 |
- | - 掌握时序逻辑的设计 | + | - 掌握状态机的设计 |
- | - 掌握case的基本语法 | + | - 基于[[STEP-MXO2第一代]]平台实现101序列的检测 |
- | - 基于小脚丫STEP FPGA Base Board开发平台LED实现流水灯的功能,每个LED点亮时间为1秒 | + | |
====工作原理==== | ====工作原理==== | ||
------ | ------ | ||
+ | 序列检测就是将一个指定的序列从数字码流中识别出来,是时序数字电路中非常常见的设计之一。 | ||
- | 本设计为流水灯实验,我们需要结合使用的硬件平台实现[[STEP-Baseboard]]平台上的8个LED循环闪烁,每个LED灯点亮时间为1秒。 | + | FPGA做序列检测的方法有很多,可以使用以为寄存器实现,也可以使用状态机实现。使用移位寄存器实现设计非常简单,利用移位寄存器将输入信号循环锁存,然后通过将移位寄存器中的数据与指定的序列比对,输出序列检测的结果,这里我们不在详细介绍,重点介绍使用状态机实现序列检测。 |
- | LED也叫发光二极管,属于二极管的一种,具有二极管的单项导电性,使用时需要给LED上施加正向压差,产生电流(一般在20mA以内,具体参考设计中使用的LED的参数),点亮LED。 | + | 考虑到检测出的相邻序列可能是重叠的,使用状态机实现序列检测的复杂度与指定序列的长度及重复度相关,但是方法都是一样的,首先我们要将需要设计的逻辑功能使用状态转换图实现,然后再将状态转换图转换为设计代码。 |
- | 为了使每个LED点亮1秒的时间,我们需要一个1Hz的信号,因为硬件平台[[STEP-MXO2第一代]]上使用的晶振为25MHz,2^25 = 33554432 > 25000000,所以我们需要做一个位宽为25的计数器。计数器初值为0,当计数到24999999时,总共计数25000000,也就是1秒时间。 | + | 本设计的功能是在输入信号中检测101的序列,使用状态机至少需要三个状态,分别对指定序列101的三位逻辑状态。 |
- | 为了实现流水的效果,我们需要一个寄存器,寄存器的值不同控制着不同的LED点亮,而寄存器的值在每次计数器计数到24999999时改变,这样每隔1秒时间,寄存器的值改变,对应控制8个LED按照同一方向循环闪烁,就实现了流水灯的功能。 | ||
行 29: | 行 26: | ||
====硬件连接==== | ====硬件连接==== | ||
------ | ------ | ||
- | 结合实验平台[[STEP-Baseboard]]的硬件配置,我们使用8个LED灯作为流水灯的输出 | + | 为了方便我们在硬件平台上更直观的观察,我们的序列检测的信号输入和检测时钟都采用[[STEP-Baseboard]]平台上的拨码开关S2和S1实现,序列检测的结果我们用[[STEP-MXO2第一代]]平台上的LED灯LD1输出指示。 |
+ | |||
+ | {{ :图11.拨码模块电路连接.png |拨码模块电路连接}} | ||
- | {{ :图10.LED模块电路连接.png |LED模块电路连接}} | + | {{ :led电路连接.jpg |LED电路连接}} |