Moore型状态机设计代码分析

举报
吴梦青 发表于 2022/05/27 11:06:10 2022/05/27
【摘要】 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK ISPORT(DIN,CLK,RST:IN STD_LOGIC;SOUT:OUT STD_LOGIC);END SCHK;ARCHITECTURE BEHAV OF SCHK ISTYPE SATES IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);SIGNAL ST,NS...

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SCHK IS

PORT(DIN,CLK,RST:IN STD_LOGIC;

SOUT:OUT STD_LOGIC);

END SCHK;

ARCHITECTURE BEHAV OF SCHK IS

TYPE SATES IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);

SIGNAL ST,NST:STATES :=0;

BEGIN

COM: PROCESS(ST,DIN) BEGIN

CASE ST IS --11010011

WHEN S0=>IF DIN='1' THEN NST<=S1;ELSE NST<=S0;END IF;

WHEN S1=>IF DIN='1' THEN NST<=S2;ELSE NST<=S0;END IF;

WHEN S2=>IF DIN='0' THEN NST<=S3;ELSE NST<=S0;END IF;

WHEN S3=>IF DIN='1' THEN NST<=S4;ELSE NST<=S0;END IF;

WHEN S4=>IF DIN='0' THEN NST<=S5;ELSE NST<=S0;END IF;

WHEN S5=>IF DIN='0' THEN NST<=S6;ELSE NST<=S0;END IF;

WHEN S6=>IF DIN='1' THEN NST<=S7;ELSE NST<=S0;END IF;

WHEN S7=>IF DIN='1' THEN NST<=S8;ELSE NST<=S0;END IF;

WHEN S8=>IF DIN='0' THEN NST<=S3;ELSE NST<=S0;END IF;

WHEN OTHERS=>NST<=S0;

END CASES;

REG:PROCESS(CLK,RST) BEGIN

IF RST='1'THEN ST<=S0;

ELSIF CLK'EVENT AND CLK='1 THEN ST<=NST; END IF;

END PROCESS REG;

SOUT<='1'WHEN ST=S8 ELSE '0';

END BEHAV;

这个代码的工作是对8位序列数“11010011”序列的检测,当着一串序列数高位在前(左移)串行进入检测器后,若此数与预置的“密码”数相同,则输出1,否则输出0。

实验步骤:

  1. 画状态图

  2. 编辑SCHK.VHD文件

  3. 创建工程FILe->New Project Wizard

  4. 全程综合和编译Processing -> Start Complication

  5. 仿真测试Processing -> Start Simulation,给出仿真波形

  6. 使用状态机观察器观察序列检测状态机的状态图

分析代码:

代码分为两部分:实体和结构体。

实体的 port map 定义端口:DIN,CLK,RST 串行输入数据位 / 工作时钟 / 复位信号

SOUT 检测结果输出

结构体,首先用户自定义枚举型数据类型,8位序列数一共定义了9个状态,因为Moore型是异步输出状态机。

结构体内包含组合进程和时序进程。

组合进程:

9种情况:

当S0的输出值是1时,S1赋给次态,否则,S0赋给次态

当S1的输出值是1时,S2赋给次态,否则,S0赋给次态

当S1的输出值是0时,S3赋给次态,否则,S0赋给次态

当S1的输出值是1时,S4赋给次态,否则,S0赋给次态

当S1的输出值是0时,S5赋给次态,否则,S0赋给次态

当S1的输出值是0时,S6赋给次态,否则,S0赋给次态

当S1的输出值是1时,S7赋给次态,否则,S0赋给次态

当S1的输出值是1时,S8赋给次态,否则,S0赋给次态

当S1的输出值是0时,S3赋给次态,否则,S0赋给次态

其他情况:次态变成S0

时序进程:

当RST=‘1’时,复位

当RST=‘0’时,在上升沿时刻,次态的值赋给现态

当现态为S8时,SOUT输出8否则输出0。

主要内容还是状态图,根据状态图编辑VHD文件。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。