博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mealy状态机的一点理解
阅读量:5317 次
发布时间:2019-06-14

本文共 1024 字,大约阅读时间需要 3 分钟。

      在Mealy状态机中,输出是由输入和现态决定的。而状态机的次态是由输入的变化和现态决定的。这个特点决定了再verilog中实现的方式。建议简单的状态机就使用两段式always结构。

       一个always中进行状态的转换,一个always中进行输出状态的变化。

       刚刚已经说过,状态的变化是有输入时钟和输入信号的状态决定的。这里输入信号不属于敏感信号变量,因为状态的转换只是在输入时钟信号的边沿发生变化。但是在always内部中会使用输入信号的状态,依据输入信号的状态进行转换。

       状态机的输出是输入信号和现态决定的。此时输入信号和现态均属于这个always的敏感信号。因为这个时候输出并不是只有在输入时钟信号的边沿发生变化,而是随着现态和输入信号的变化而变化。

       在书写always结构的时候,理解这点还是很重要的。下面就看看具体的代码吧。

module mealy_state_machine(IN,CP,Y,CR);

input IN,CP,CR;

output Y;

reg [1:0]state;

parameter S0=2'b00,S1=2'b10,S2=2'b11;

reg Y;

always @(posedge CP or negedge CR)

begin

if(~CR)begin state<=0;end

else

begin

case(state)

S0:state<=S0;

S1:

begin

if(IN)state<=S2;

else state<=S0;

end

S2:begin

if(IN)state<=S2;

else state<=S0;

end

endcase

end

end

always @(state or IN)

begin

case(state)

S0:Y<=0;

S1:Y<=0;

S2:begin

if(IN)Y<=0;

else Y<=1;

end

endcase

end

endmodule

下面是状态转移图,状态转移图和预定的状态转移图是一样的。这也说明代码描述的功能没错。

      上面的状态转移图是对应 康华光电子技术基础 数字部分(第五版)中P267。但是后面P307中代码描述这个电路图好像有点问题。最后综合出来的状态机和要求的状态机不一样。但是我一直没看出错误来,所以还请大家多多指导。

 

转载于:https://www.cnblogs.com/farbeyond/p/5204573.html

你可能感兴趣的文章
英特尔 QSV 在 FFMPEG 中的使用(Linux)
查看>>
爱上OpenCL的十个理由
查看>>
时序分析/约束(三)——Xilinx时钟资源 & ISE时序分析器
查看>>
从Git和SVN看版本控制
查看>>
Linux system log avahi-daemon[3733]: Invalid query packet
查看>>
python学习第十三节(sys,logging,logger,json)
查看>>
201303014001 张敏 计科高职13-1 github使用心得
查看>>
《面向对象程序设计》c++第四次作业___calculator plus
查看>>
adb Monkey用法
查看>>
Java EE 运用DBHelper连接数据库做一个简单的登录测试
查看>>
QTP零基础实战(二)
查看>>
python sys.argv[ ]
查看>>
DS博客作业01-日期抽象数据类型设计和实现
查看>>
HTML Jquery
查看>>
2018/2/20 Springretry,Feign,以及用通俗的语言(自认为)教会你关于Hystrix的复杂概念...
查看>>
数据结构实验8
查看>>
字体精讲
查看>>
SPSS-SPSS Modeler
查看>>
自己项目使用了ARC,项目中使用第三方库继续引用ARC
查看>>
Xshell评估过期处理方法
查看>>