自学内容网 自学内容网

【数字电路与逻辑设计】实验一 序列检测器

文章总览:YuanDaiMa2048博客文章总览


一、实验内容

设计一个序列检测器检测序列 1110010。使用波形图进行仿真(至少要有一个检测成功
的波形)。

二、设计过程

(一)作出状态图或状态表

Moore型:

在这里插入图片描述

在这里插入图片描述

(二)状态化简

在该状态表中没有输出和次态完全相同的输入序列,因此已经是最简状态。

(三)状态编码

规则1:S0-S1,S0-S2,S0-S5,S0-S7,S1-S2,S1-S5,S1-S7,S2-S5,S2-S7,S5-S7,S2-S3,S1-S6,S0-S4;S4-S7
规则2:
S0-S1,S0-S2,S0-S3,S4-S3,S5-S1,S0-S6,S7-S2
规则3:
S0-S1-S2-S3-S4-S5-S6
规则4:S0分配逻辑“0”

编码方案如下
S0=“000”,S1=“001”,S2=“010”,S3=“011”,S4=“100”,S5=“110”,S6=“101”,S7=“111”

在这里插入图片描述

三、源代码

(一)代码说明:

① clk:输入,表示时钟脉冲信号,上升沿触发。

② rst:输入,表示清零。

③ X:输入,表示输入待检测的一位信号。

④ Z:输出,表示检测结果,如果检测到该序列则输出‘1’,否则为‘0’。

⑤ 利用case语句去分别讨论不同现态,在其中运用if语句分别讨论在X输入为1和0的情况下,次态的情况以及Z输出的值,从而实现功能。主要依据状态转移图完成代码编写。

(二)代码内容:

library ieee;
use ieee.std_logic_1164.all;
entity sequence_dectectoris
  port(clk,rst,X:in std_logic;
       Z:out std_logic);
end entity sequence_dectector;
architecture behav of sequence_dectector is
    type state is(s0,s1,s2,s3,s4,s5,s6,s7);
    signal present_state,next_state:state;
    begin
    process(rst,clk)
    begin
    if(rst='1')then
        present_state<=s0;
    elsif(clk'event and clk='1')then
        present_state<=next_state;
        end if;
    end process;

    process(X,present_state)
    begin
    case present_state is
        when s0 =>Z<='0';
            if(X='1')then
                next_state<=s1;
            else
                next_state<=s0;
            end if;
        when s1 =>Z<='0';
            if(X='1')then
                next_state<=s2;
            else
                next_state<=s0;
            end if;
        when s2 =>Z<='0';
            if(X='1')then
                next_state<=s3;
            else
                next_state<=s0;
            end if;
        when s3 =>Z<='0';
            if(X='0')then
                next_state<=s4;
            else
                next_state<=s3;
            end if;
        when s4 =>Z<='0';
            if(X='0')then
                next_state<=s5;
            else
                next_state<=s1;
            end if;
        when s5 =>Z<='0';
            if(X='1')then
                next_state<=s6;
            else
                next_state<=s0;
            end if;
        when s6 =>Z<='0';
            if(X='0')then
                next_state<=s7;
            else
                next_state<=s2;
            end if;
        when s7 =>Z<='1';
            if(X='0')then
                next_state<=s0;
            else
                next_state<=s1;
            end if;
        end case;
    end process;
end behav;

四、仿真验证与实验结果

(一)波形图

在这里插入图片描述

(二)波形图说明

图中,clk代表时钟脉冲(上升沿有效),rst表示复位(高电平有效),在X连续输入“1110010”时,在clk上升沿到来时,Z输出为1。

(三)实验结果

如图,证明该段程序可以实现序列“1110010”检测功能。

五、全部实验

第一部分 组合逻辑

第二部分 时序逻辑


原文地址:https://blog.csdn.net/2301_79288416/article/details/144268076

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!