参考学习资料 单片机 第七章从算法设计到硬线逻辑的实现.docVIP

参考学习资料 单片机 第七章从算法设计到硬线逻辑的实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第七章有限状态机和可综合风格的VerilogHDL

PAGE

PAGE150

第七章有限状态机和可综合风格的VerilogHDL

前言

由于VerilogHDL和VHDL行为描述用于综合的历史还只有短短的几年,可综合风格的VerilogHDL和VHDL的语法只是它们各自语言的一个子集。又由于HDL的可综合性研究近年来非常活跃,可综合子集的国际标准目前尚未最后形成,因此各厂商的综合器所支持的HDL子集也略有所不同。本教材中有关可综合风格的VerilogHDL的内容,我们只着重介绍RTL级、算法级和门级逻辑结构的描述,而系统级(数据流级)的综合由于还不太成熟,暂不作介绍。由于寄存器传输级(RTL)描述是以时序逻辑抽象所得到的有限状态机为依据的,所以把一个时序逻辑抽象成一个同步有限状态机是设计可综合风格的VerilogHDL模块的关键。在本章中我们将通过各种实例由浅入深地来介绍各种可综合风格的VerilogHDL模块,并把重点放在时序逻辑的可综合有限状态机的VerilogHDL设计要点。至于组合逻辑,因为比较简单,只需阅读典型的用VerilogHDL描述的可综合的组合逻辑的例子就可以掌握。为了更好地掌握可综合风格,还需要较深入地了解阻塞和非阻塞赋值的差别和在不同的情况下正确使用这两种赋值的方法。只有深入地理解阻塞和非阻塞赋值语句的细微不同,才有可能写出不仅可以仿真也可以综合的VerilogHDL模块。只要按照一定的原则来编写代码就可以保证Verilog模块综合前和综合后仿真的一致性。符合这样条件的可综合模块是我们设计的目标,因为这种代码是可移植的,可综合到不同的FPGA和不同工艺的ASIC中,是具有知识产权价值的软核。

7.1.有限状态机

有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入值,还取决于当前所在状态。(这里指的是米里Mealy型有限状态机,而莫尔Moore型有限状态机究竟转向哪一状态只决于当前状态。)

IdleStartStopClearA/G=0!AA/F=1!Reset/F=0G=0

Idle

Start

Stop

Clear

A/G=0

!A

A/F=1

!Reset/F=0G=0

!Reset/F=0G=0

!Reset|!A/F=0G=1

图7.1状态转移图

!Reset/F=0G=0

上面的状态转移图表示了一个四状态的有限状态机,它的同步时钟是Clock,输入信号是A和Reset,输出信号是F和G。状态的转移只能在同步时钟(Clock)的上升沿时发生,往哪个状态的转移则取决于目前所在的状态和输入的信号(Reset和A)。下面的例子是该有限状态机的VerilogHDL模型之一:

[例1]:

modulefsm(Clock,Reset,A,F,G);

inputClock,Reset,A;

outputF,G;

regF,G;

reg[1:0]state;

parameterIdle=2’b00,Start=2’b01,

Stop=2’b10,Clear=2’b11;

always@(posedgeClock)

if(!Reset)

begin

state=Idle;F=0;G=0;

end

else

case(state)

idle:begin

if(A)begin

state=Start;

G=0;

End

elsestate=idle;

end

start:if(!A)state=Stop;

elsestate=start;

Stop:begin

if(A)begin

state=Clear;

F=1;

end

elsestate=Stop;

end

Clear:begin

if(!A)begin

state=Idle;

F=0;G=1;

End

elsestate=Clear;

end

endcase

endmodule

我们还可以用另一个V

文档评论(0)

工地殿小二 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档