Verilog 实现111序列检测器——Moore和Mealy型状态机实现
111序列检测器
- 有限状态机简介
- 电路结构
- '111'序列检测器
- Moore状态机
- 代码实现
- Mealy状态机
- 代码实现
- 有关三段式和两段式的对比
- 有关可重叠和不可重叠序列的对比
有限状态机简介
电路结构
由组合逻辑电路和存储电路组成。组合逻辑可以分为C1和C2部分。
经典状态机结构示意图
'111’序列检测器
设计一个“111”序列检测器,当输入三个或三个以上的“1”时,电路输出为1,否则为0。
Moore状态机
Moore状态机的输出仅依赖于当前状态而与输入无关。
有限状态机的结构
状态转移图
代码实现
功能模块:
三段式
// seqdata_moore
module seqdata_moore (output reg dout,input wire clk,input wire rst,input wire din
);reg [1:0] curr_state;reg [1:0] next_state;parameter IDLE = 2'b 00;parameter S1 = 2'b 01;parameter S2 = 2'b 10;parameter S3 = 2'b 11;always @ (posedge clk or negedge rst) beginif (!rst)curr_state <= IDLE;elsecurr_state <= next_state;endalways @ (*) begincase (curr_state)IDLE: if (din == 1) next_state <= S1;else next_state <= IDLE;S1:if (din == 1) next_state <= S2;else next_state <= IDLE;S2:if (din == 1) next_state <= S3;else next_state <= IDLE;S3: if (din == 1) next_state <= S3;else next_state <= IDLE;default:next_state <= IDLE;endcaseend// 体现了Moore机的特点:输出由当前状态决定always @ (*) beginif (curr_state == S3) dout <= 1;else dout <= 0;endendmodule
两段式
// seqdata_moore
module seqdata_moore (output reg dout,input wire clk,input wire rst,input wire din
);reg [1:0] curr_state;reg [1:0] next_state;parameter IDLE = 2'b 00;parameter S1 = 2'b 01;parameter S2 = 2'b 10;parameter S3 = 2'b 11;always @ (posedge clk or negedge rst) beginif (!rst)curr_state <= IDLE;elsecurr_state <= next_state;end// 将组合逻辑合成一段always @ (*) begincase (curr_state)IDLE: if (din == 1) begin next_state <= S1; dout <= 0; endelse begin next_state <= IDLE; dout <= 0; endS1:if (din == 1) begin next_state <= S2; dout <= 0; endelse begin next_state <= IDLE; dout <= 0; endS2:if (din == 1) begin next_state <= S3; dout <= 0; endelse begin next_state <= IDLE; dout <= 0; endS3: if (din == 1) begin next_state <= S3; dout <= 1; endelse begin next_state <= IDLE; dout <= 1; enddefault: begin next_state <= IDLE; dout <= 0; endendcaseendendmodule
测试模块:
// testbench of 'seqdata_moore'
module seqdata_tb ();wire dout;reg clk;reg rst;reg din;seqdata_moore seqdata_moore0 (.dout(dout), .clk(clk), .rst(rst), .din(din));always #10 clk = ~clk;initial beginclk = 0;rst = 0;din = 0;#50 rst = 1;#20 din = 1;#20 din = 0;#20 din = 1;#40 din = 0;#20 din = 1;#60 din = 0;#20 din = 1;endendmodule
仿真波形:
Mealy状态机
Mealy状态机的输出与当前状态和输入有关。
有限状态机的结构
状态转移图
代码实现
功能代码:
module seqdata_mealy (output reg dout,input wire clk,input wire rst,input wire din
);reg [1:0] curr_state;reg [1:0] next_state;parameter IDLE = 2'b 00;parameter S1 = 2'b 01;parameter S2 = 2'b 11;always @ (posedge clk or negedge rst) beginif (!rst)curr_state <= IDLE;elsecurr_state <= next_state;endalways @ (*) begincase (curr_state)IDLE:if (din == 1) begin next_state <= S1; dout <= 0; end else begin next_state <= IDLE; dout <= 0; endS1:if (din == 1) begin next_state <= S2; dout <= 0; end else begin next_state <= IDLE; dout <= 0; endS2:if (din == 1) begin next_state <= S2; dout <= 1; end else begin next_state <= IDLE; dout <= 0; end default: begin next_state <= IDLE; dout <= 0; endendcase end
endmodule
测试代码同Moore
有关三段式和两段式的对比
- 三段式:状态转移由一个always块实现,根据当前状态来确定输出有另一个always块实现
- 两段式:状态转移和输出在一个always块中实现
- 三段式并不是一定要写三个always块。如果状态机更为复杂,always块也会相应增加
(例如交通灯状态机:交通灯状态机)
有关可重叠和不可重叠序列的对比
- 该处"111"序列检测的摩尔机和米利机都是可重叠序列检测
(有关不可重叠和可重叠的举例:链接: 101序列检测器.)
Verilog 实现111序列检测器——Moore和Mealy型状态机实现相关推荐
- 【 FPGA 】状态机的模型之Mealy型状态机
上篇博文讲了:Moore型状态机,这篇博文和上篇博文思路一致,如果读懂了上篇博文,这篇博文就很容易理解了. 如果一个状态机的输出是由现态和输入共同决定的,那么它就是一个Mealy型的状态机.而按照驱动 ...
- FSM mealy型状态机实现
FSM mealy型状态机实现 FSM 状态机的概念 FSM 状态 FSM 状态机 FSM 输入信号处理&状态切换 FSM 状态的行为 FSM(finite-state machine) 有限 ...
- 序列检测器(moore、mealy、独热码三种写法)
序列检测器:检测110101 目的:检测一个序列中是不是有序列110101 Moore型状态机实现 Moore型状态机:输出只由当前状态决定,即次态=f(现状,输入),输出=f(现状): 状态转移图: ...
- 【状态机设计】Moore、Mealy状态机、三段式、二段式、一段式状态机书写规范
目录 状态机介绍 状态机类型 Moore 型状态机 Mealy 型状态机 状态机设计流程 自动售卖机 状态机设计:3 段式(推荐) 实例 实例 状态机修改:2 段式 实例 状态机修改:1 段式(慎用) ...
- 【 FPGA 】状态机的模型之Moore型状态机
上篇博文:状态机,FPGA的灵魂,说到了状态机的基础知识,讲到了状态机的组成六要素,工作四要素. 这篇博文来讲状态机的模型之Moore状态机,从标题也能看出,状态机的知识并没有结束,后面还会提到Mea ...
- 【 FPGA 】序列检测器的Mealy状态机实现
上篇博文讲了使用Moore状态机来设计一个序列检测器:序列检测器的Moore状态机实现 原理一致,这里只不过采用了Mealy状态机实现,快速给出: 状态转移图如下:被检测序列为1101,也就是说,如果 ...
- Verilog实现状态机与状态机经典示例——序列检测器、自动饮料售卖机
原文链接:https://blog.csdn.net/qq_34070723/article/details/100737225 作者:King阿金 目录 1.状态机原理与三段式状态机 2.状态机示例 ...
- 【 FPGA 】序列检测器的Moore状态机实现
设计一个序列检测器,检测序列1101,检测到输出1,否则输出0. 用状态机来实现序列检测器是非常合适的,下面先给出状态转移图,之后用Moore状态机来实现这个序列检测器: (注:此处所画为无重叠检测, ...
- [FPGA入门笔记](九):序列检测实验,Moore和Mealy状态机对比
简介 今天购买了AXLINX AX7020的开发板,从今天开始每一个例程都要做文档记录,为自己加油. 本实验,基于ALINX AX7020开发板,芯片为xc7z020clg400-2.开发板输入时钟为 ...
最新文章
- 如何提升科研能力?以下这点最重要!
- MyEclipse中jsp编码设置
- 简单的js文本框提示语
- SAP 主生产计划(MPS)
- EasyUI中放置Droppable的使用以及实现拖拽排序
- Insider Dev Tour 2019 全球巡演 苏州站
- 超详细图解!【MySQL进阶篇】MySQL事务和锁
- 【kali】kali设置burpsuite抓包dvwa
- 数据结构实验之二叉树五:层序遍历
- 一个简单的Java EEDocker示例
- 免費工具 - PDF转换成Flipbook, 并把它放在漂亮的书架上
- php 拉丁文转中文,拉丁文在线翻译_拉丁语在线翻译
- 百度富文本ueditor实现导入word并将内容显示到编辑器中
- 项目管理-----整合项目资源
- 计算机前沿的英语词汇,计算机行业常用英语词汇
- 鲤鱼鱼竿豆荚 - 建议做出正确的选择
- Ubuntu18修改系统语言为英文
- Java二维码的一些简介、功能
- 【数据结构与算法分析】第一章、第二章总结
- 【tensorflow学习之路】如何使用gpu进行运算