- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog HDL数字设计教程(贺敬凯)第5章
5.1 同步有限状态机引例 很多初学者不知道何时应用状态机。这里介绍一种应用思路:从状态变量入手。如果一个电路具有时序规律或者逻辑顺序,则自然而然地可对这个电路规划出状态,从这些状态入手,分析每个状态的输入、状态转移和输出,从而完成电路功能。使用状态机的目的是要控制某部分电路,完成某种具有逻辑顺序或时序规律的电路设计。 其实对于逻辑电路而言,小到一个简单的时序逻辑,大到复杂的微处理器,都适合用状态机方法进行描述。由于状态机不仅仅是一种电路描述工具,它更是一种思想方法,而且状态机的HDL表达方式比较规范,有章可循,因此很多有经验的设计者习惯用状态机思想进行逻辑设计,对各种复杂设计都套用状态机的设计理念,从而提高设计的效率和稳 定性。 下面通过一个典型时序逻辑电路的设计实例来引入有限状态机。 【例5-1】 设计一个串行数据检测器。电路的输入信号A是与时钟脉冲同步的串行数据,其时序关系如图5-1所示。输出信号为Y。要求电路在信号输入A出现110序列时,输出信号Y为1,否则为0。 这是一道典型的时序逻辑电路例题,其求解步骤如图5-2所示。 下面详细介绍逻辑电路的设计步骤。 第一步:理解题意,由给定的逻辑功能建立原始状态图,如图5-3所示。 图5-3中,S表示状态,A/Y中斜杠左面的为输入,斜杠右面的为输出。 第二步:状态化简。合并等价状态,消去多余状态的过程称为状态化简。所谓等价状态,就是指在相同的输入下有相同的输出,并转换到同一个次态去的两个状态。显然,图5-3中的a和d是等价状态,可以合并,化简后的状态图如图5-4所示。 第三步:状态编码。给每个状态赋以二进制代码的过程称为状态编码。对图5-4的状态进行某种编码的结果如图5-5所示。 图5-5所示状态图对应的状态表如表5-1所示。 第四步:选择触发器的个数和类型。 触发器个数可根据状态数确定,要求满足2n-1M≤2n,式中M为状态数,n为触发器的个数。对于本例,已知M为3,所以可求出触发器的个数为2个。 触发器可以选择D触发器、JK触发器等,本例选用D触发器。 第五步:求出电路的激励方程和输出方程。 根据表5-1,可列出状态转换真值表及激励信号,如表5-2所示。 针对输出和激励信号,采用卡诺图化简,如图5-6所示。 利用多余状态,卡诺图化简后的激励方程和输出方程为: 第六步:画出逻辑图并检查自启动能力。逻辑图如图5-7所示。 经检查,该电路具有自启动能力。 至此解题完毕。 以上六步,我们均可以采用Verilog HDL进行电路建模,下面从后向前对各个步骤进行建模,见例5-2至例5-9。 【例5-2】 对应于步骤六的层次建模方法。 module fsm_1(clk,A,Y); input clk,A; output Y; wire q0,q1; assign Y= q1 (~A); mydff_2 dff0(.D(A),.Q(q0),.clk(clk)), dff1(.D(Aq0), .Q(q1), .clk(clk)); endmodule //以下实现被调用模块mydff_2 module mydff_2(D,Q,clk); input D,clk; output reg Q; always @(posedge clk) Q=D; endmodule 程序说明: (1) 该模块使用Quartus Ⅱ软件综合的结果如图5-8所示,它同图5-7所示的电路图一致。 其仿真结果如图5-9所示。 由仿真结果可以看出,Y= q1 (~A); 是一个组合逻辑,当A或q1发生变化后,Y立即改变。 (2) 组合逻辑容易产生毛刺,可将Y通过寄存器输出的方式来消除毛刺,具体实现代码如例5-3所示。 【例5-3】 对例5-2的改进——消除毛刺。 module fsm_1(clk,A,Y); input clk,A; output reg Y; wire q0,q1; mydff_2 dff0(.D(A),.Q(q0),.clk(clk)), dff1(.D(Aq0), .Q(q1), .clk(clk)); always @(posedge clk) Y= q1 (~A); endmodule 该模块的综合结果如图5-10所示。 其仿真结果如图5-11所示。 显然,这种实现方式使得输出与时钟保持同步,并可维持一个时钟周期的时间,可有效地消除毛刺。 (3) 本模块采用模块调用的方式实现。此种实现方式要求知道模块的层次划分以及底层模块的具体电路实现。对于时序逻辑电
文档评论(0)