软件:Quartus
语言:VHDL
代码功能:
用VHDL语言编写一个序列检测器,该序列检测器用于检测一组由二进制码组成的脉冲序列信号,当序列检测器连续收到这组串行二进制码后与检测器中预先设置的码(11100101)相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,在检测过程中,任何一位不相等都将导致回到初始状态重新开始检测。
端口信息为:
clk:时钟输入端;din:待检测的数据输入端;clr:清零端
dout:数据输出端,输出’1’表示接收到了正确序列,输出’0’表示没接收到正确序列。
设计具体要求:
(1)各模块采用文本方法编辑该序列检测器,语言采用VHDL语言,检查编辑并编译,仿真验证。
(2)采用层次化文件设计该序列检测器,检查编辑并编译进行波形仿真,观察输出波形,验证是否满足设计要求。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. 状态图
5. 仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; --序列检测 ENTITY?Sequence_detect?IS ???PORT?( ??????clk??????????:?IN?STD_LOGIC;--时钟输入端 ??????din??????????:?IN?STD_LOGIC;--待检测的数据输入端 ??????clr??????????:?IN?STD_LOGIC;--清零端 ??????dout?????????:?OUT?STD_LOGIC--数据输出端 ???); END?Sequence_detect; ARCHITECTURE?trans?OF?Sequence_detect?IS ???type?state_type?is ??????( ??????s_idel???????, ??????s_d1?????????, ??????s_d11????????, ??????s_d111???????, ??????s_d1110??????, ??????s_d11100?????, ??????s_d111001????, ??????s_d1110010???, ??????s_d11100101?? ???); ???SIGNAL?state?:state_type; BEGIN ??? ???PROCESS?(clk,?clr) ???BEGIN ??????IF?(clr?=?'1')?THEN ?????????state?<=?s_idel; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????CASE?state?IS ????????????WHEN?s_idel?=>--初始状态 ???????????????IF?(din?=?'1')?THEN ??????????????????state?<=?s_d1; ???????????????END?IF; ????????????WHEN?s_d1?=>--检测1 ???????????????IF?(din?=?'1')?THEN ??????????????????state?<=?s_d11; ???????????????ELSE ??????????????????state?<=?s_idel; ???????????????END?IF; ????????????WHEN?s_d11?=>--检测11 ???????????????IF?(din?=?'1')?THEN ??????????????????state?<=?s_d111; ???????????????ELSE ??????????????????state?<=?s_idel; ???????????????END?IF; ????????????WHEN?s_d111?=>--检测111 ???????????????IF?(din?=?'1')?THEN ??????????????????state?<=?s_d111; ???????????????ELSE ??????????????????state?<=?s_d1110; ???????????????END?IF;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=604
427