差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
后一修订版 两侧同时换到之后的修订记录
序列检测器 [2016/06/07 16:58]
anran 创建
序列检测器 [2016/06/10 11:16]
anran [代码设计]
行 1: 行 1:
-=====流水灯=====+=====序列检测=====
  
 ====硬件平台==== ====硬件平台====
行 5: 行 5:
   - [[STEP-MXO2第一代]]   - [[STEP-MXO2第一代]]
   - [[STEP-Baseboard]]   - [[STEP-Baseboard]]
 +
  
 ====设计要求==== ====设计要求====
 ------ ------
-  - 掌握分频功能设计 +  - 掌握序列检测原理 
-  - 掌握时序逻辑的设计 +  - 掌握状态机的设计 
-  - 掌握case的基本语法 +  - 基于[[STEP-Baseboard]]平台实现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: 行 29:
 ====硬件连接==== ====硬件连接====
 ------ ------
-结合实验平台[[STEP-Baseboard]]的硬件配置,我们使8个LED灯作为流水灯的输出+为了方便我们在硬件平台上更直观的观察,我们的序列检测的信号输入和检测时钟都采用[[STEP-Baseboard]]平台上拨码开关S2和S1实现序列检测的结果我们用[[STEP-MXO2第一代]]平台上的LED灯LD1输出指示。
  
-{{ :图10.LED模块电路连接.png |LED模块电路连接}}+{{ :图11.拨码模块电路连接.png |拨码模块电路连接}} 
 + 
 +{{ :​led电路连接.jpg |LED电路连接}}
  
  
行 37: 行 39:
 ---- ----
 ===设计文件=== ===设计文件===
 +
 +{{ :​序列检测状态转移图.jpg |序列检测状态转移图}}
 +
 +
 +
 +
  
 {{ :​流水灯程序设计.jpg |流水灯程序设计}} {{ :​流水灯程序设计.jpg |流水灯程序设计}}