原创 状态机学习笔记——状态机样板

2011-8-19 21:27 1388 2 2 分类: FPGA/CPLD

状态机学习笔记——样板<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 &nbspe="Times New Roman">Uart的接收端程序,但状态机总是有很多自己无法解决的警告,想想自己也没正经学过状态机,不如就此机会深入的学习一下状态机。以下是我在学习《Verilog数字系统设计教程》时做的总结。

对于一般的综合工具而言,可以借助于工具自动综合成电路结构的 Verilog模块风格非常有限(怪不得,我以前写的很多程序都调不通)。

对于状态机来说,较为经典的样板如下:

 always @ (posedge Clock)

if(!Reset)

 begin

state <= Idle;;

/*组合逻辑输出*/

 end

else

 begin

case(state)

Idle:

if(A)

 begin

state <= Start;

/*组合逻辑输出*/

 end

else

 begin

state <= Idle;

/*组合逻辑输出*/

 end

Start:

if(!A)

state <= Stop;

else

state <= Start;

Stop:

if(A)

 begin

state <= Clear;

/*组合逻辑输出*/

 end

else

 begin

state <= Stop;

/*组合逻辑输出*/

 end

Clear:

if(!A)

 begin

state <= Idle;

/*组合逻辑输出*/

     end

    else

 begin

state <= Clear;

/*组合逻辑输出*/

 end

default: state <= 4'bxxxx;

endcase

 end

 

endmodule

在《Verilog数字系统设计教程》这本书中,还介绍了状态机的其他写法,感兴趣的朋友可以去读读有关章节。

在我们为状态编码时,有两种编码方式:①Gray(格雷)码;②独热码。

比如上述的几个状态,用Gray码表示如下:

parameter   Idle   =  2'b00,

Start   =  2'b01,

Stop   = 2'b10,

Clear    2'b11;

用独热码表示如下:

parameter  Idle   = 4'b1000,

Start  = 4'b0100,

Stop   = 4'b0010,

Clear  = 4'b0001;

虽然使用独热码多了两个触发器,但所用的组合电路可以省一些,因而使电路的速度和可靠性上有明显的提高(组合逻辑电路存在竞争冒险现象),而总的单元数并无显著的增加。

顺便说一件生活中的事,今天吃午饭时,一位60多岁的老人坐到我的旁边,并和我拉起了家常。我们谈了很多有关学校制度上的事,也问了我一些学校的考研情况。我尝试的问了一下他的身份,他只说自己刚来这所学校,是来为大家服务的。但我感觉这位老人不是普通人,下午到学校网站一查发现这位老人竟是我们学校新来的副校长!大热天,60多岁的老人,天天去学生食堂趁着吃饭的功夫和学生交流情感,这样的校长哪里去找。如果将来能碰到这样的老板,那真是三生有幸。

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /2 下一条