名称:序列检测器的设计VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
用VHDL语言编写一个序列检测器,该序列检测器用于检测一组由二进制码组成的脉冲序列信号,当序列检测器连续收到这组串行二进制码后与检测器中预先设置的码(11100101)相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,在检测过程中,任何一位不相等都将导致回到初始状态重新开始检测。
端口信息为:
clk:时钟输入端;din:待检测的数据输入端;clr:清零端
dout:数据输出端,输出’1’表示接收到了正确序列,输出’0’表示没接收到正确序列。
设计具体要求:
(1)各模块采用文本方法编辑该序列检测器,语言采用VHDL语言,检查编辑并编译,仿真验证。
(2)采用层次化文件设计该序列检测器,检查编辑并编译进行波形仿真,观察输出波形,验证是否满足设计要求。
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;
源代码
扫描文章末尾的公众号二维码