序列检测器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if din='1' then
state<=s1;
else
state<=s0;
end if;
when s1=>
if din='1' then
state<=s2;
else
state<=s0;
end if;
when s2=>
if din='1' then
state<=s3;
else
state<=s0;
end if;
end if;
when s6=>
if din='0' then
state<=s0;
else
state<=s2;
end if;
end case;
end if;
end process;
process(state,din) ---输出设置
begin
case state is
when s6=>
if din='0' then
when s3=>
if din='0' then
state<=s4;
else
state<=s3;
end if;
when s4=>
if din='0' then
state<=s5;
else
state<=s1;
end if;
when s5=>
if din='1' then
state<=s6;
else
state<=s0;
(1)Mealy型状态机,次态和输出均取决于现态和当前输入;
(2)Moore型状态机,下一状取决于当前状态和当前输入,但其输出仅取决于当前状态。
序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。接受的序列信号与检测器预设值变焦,相同则输出为1,否则输出为 0。
二、设计方法
(1)VHDL枚举类型数据,格式如下:
type 数据类型名 is (元素列表)
(2)设计步骤
①根据设计要求确定状态机类型。
②列出状态机的状态和输出,分析状态转移关系并化简。
③依据选定状态机类型,绘制状态图。
④编写VHDL定义状态,并建立状态机进程。
⑤编写VHDL描述状态的转移及输出,从而完成状态机设计。
三、实验设计
1、1110010序列检测器的VHDL设计
五、下载设计
串行输入din,设置移位寄存器S1S0为01,补的数为din输入的值,数据不断右移补值,将每个时钟脉冲序列检测器读入的值,输出显示到数码管上,若din输入为1110010,则z输出为1。
(1)counter8(LPM定制)
(2)7选1多路选择器(LPM定制)
(3)消抖电路(xiaodou0 LPM定制)
signal s1,s2,s3:std_logic;
component xiaodou0 is
port(clock:in std_logic;
data:in std_logic;
q:out std_logic);
end component xiaodou0;
begin
g1:xiaodou0 port map(clk,d_in,s1);
答:1、状态图转化成状态表;
2、化简等效状态;
3、采用最小化状态表中的状态数目。
七、实验心得
本次实验了解到了序列检测器的工作原理和功能,并且对于数字设计状态机的学习有了更深的理解。同时掌握了状态图输入法,这一方法相比普通的VHDL定制简单许多,而且输出的状态图也有助于对实验本身的理解。
前者次态和输出均取决于现态和当前输入,后者下一状态取决于当前状态和当前输入,但其输出仅取决于当前状态。
(2)type 语句如何定义状态机状态?注意事项有什么?
答:type 语句可以定义新的数据类型格式:
type 数据类型名 is (元素列表)。
例:
type state_type is (s0, s1, s2, s3, s4);
(1)状态机选用Mealy型状态机。
(2)状态转换表
现态
输入0时次态/输出
输入1时次态/输出
S0
S0/0
S1/0
S1
S0/0
S2/0
S2
S0/0
S3/0
S3
S4/0
S3/0
S4
S5/0
S1/0
S5
S0Βιβλιοθήκη Baidu0
S6/0
S6
S0/1
S2/0
(3)VHDL代码
library ieee;
use ieee.std_logic_1164.all;
signal present_state, next_state: state_type;
注意事项:s0, s1, s2, s3, s4属于用户自定义的 state_type 类型,代表了状态机的状态,默认第一项为初始状态,一般将表征状态的二进制数用文字符号来代替,具体编码可由综合器自动完成。
(3)状态图常用的化简方法有哪些?
signal state:state_type; ---状态寄存器
begin
process(clk,rst) ---次态设置
begin
if rst='1' then ---异步重启
state<=s0;
elsif (clk'event and clk='1')then
case state is
when s0=> ---判断状态转移
library ieee;
use ieee.std_logic_1164.all;
entity xiaodou is
port(d_in,clk:in std_logic;
clk_out:out std_logic);
end xiaodou;
architecture bhv of xiaodou is
g2:xiaodou0 port map(clk,s1,s2);
s3<=not s2;
clk_out<=s1 and s3;
end bhv;
(4)3-8译码器(74138)
(5)移位寄存器(74198)
(6)七段译码器(7449)
(7)序列检测器(exp_detect1)
顶层图
管脚设置
管脚说明:clock2为位选信号,高频采用管脚PIN_55;clock1为序列检测器读入信号,采用管脚PIN_125;clk_din为din作用输入信号,采用管脚PIN_128;clk为序列检测器输出信号,不用设置管脚。
下载现象
数码管均显示为0,设置合适的din输入频率clk_din后。用din输入1110010,数码管左移补din,输入过后从左向右显示1110010的序列,并且指示灯亮;当输入其他数码流时,数码管显示所输入的数码流,指示灯不亮。
六、思考题
(1)状态机的两种基本类型是什么?主要区别是什么?
答:Mealy型状态机、Moore型状态机。
实 验 报 告
实验日期:
学 号:
姓 名:
实验名称:
序列检测器
总 分:
一、实验原理
状态机是由一组状态、一个初始状态、输入输出和状态转换函数组成的时序电路。状态机主要用来控制电路的状态转移,针对不同类型的状态机,输出可以由现态确定,也可以由现态及次态共同确定。按状态机的信号输出方式分类,可分为Mealy型状态机和Moore型状态机。
entity exp_detect1 is
port(clk,rst,din:in std_logic;
z:out std_logic);
end exp_detect1;
architecture bhv of exp_detect1 is
type state_type is(s0,s1,s2,s3,s4,s5,s6); ---状态定义
z<='1'; ---1110010检测成功
else
z<='0';
end if;
when others=>
z<='0';
end case;
end process;
end bhv;
2、用状态图输入法实现序列检测器
(1)主要流程
选择复位reset信号为异步,高电平有效,输出端无寄存器。
如图所示,填入名称和控制信号。
如图所示,设置状态。
(2)状态机设计图
(3)VHDL
四、仿真分析
参数设置:Grid Size:100 ns
End Time: 2 us
仿真说明:clk-----时钟信号
rst-----状态重置
din----输入
z-----输出
仿真分析:clk=50ns,rst=1,异步重启。
clk=150ns时,din=1;clk=250ns时,din=1;clk=350ns时,din=1;clk=450ns时, din=0;clk=550ns时,din=0;clk=650ns时,din=1; clk=750ns时,state检查s6,且din=0,z=1。
相关文档
最新文档