第4讲 Verilog HDL高级编程技术.pptVIP

  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文档。上传文档
查看更多
下例就是实现的一个分频系数为8.1的小数分频器,通过计数器先做9次8分频,再做一次9分频,这样总的分频值(10次分频的平均值)为: N=(8*9+9*1)/(9+1)=8.1 module fdiv8_1(clkin,rst,clkout); input clkin,rst; output clkout; reg clkout; reg[3:0] cnt1,cnt2; always @(posedge clkin or negedge rst) begin if(!rst) begin cnt1=0; cnt2=0; clkout=0; end else if(cnt19) //9次8分频 begin if(cnt27) begin cnt2=cnt2+1; clkout=0; end else begin cnt2=0; cnt1=cnt1+1; clkout=1; end end else begin //1次9分频 if(cnt28) begin cnt2=cnt2+1; clkout=0; end else begin cnt2=0; cnt1=0; clkout=1; end end end endmodule 8.1小数分频功能仿真波形 思考:如果分频系数为 7.2 应该怎么做? 有限状态机设计 有限状态机(Finite State Machine, FSM)是一种很重要的时序逻辑电路,尤其适合设计数字系统的控制模块,是许多数字电路的核心部件。有限状态机的标准模型主要由三部分组成:一是次态组合逻辑电路,二是由状态触发器构成的现态时序逻辑电路,三是输出组合逻辑电路。 根据电路的输出信号是否与电路的输入有关,有限状态机可分为两种类型:一类是Mealy(米莉)型状态机,其输出信号不仅与电路的当前状态有关,还与电路的输入有关;另一类是Moore(摩尔)型状态机,其输出状态仅与电路的当前状态有关,与电路的输入无关。 状态机一般都应设计为同步方式,并由一个时钟信号来触发。实用的状态机都应该设计为由唯一时钟边沿触发的同步运行方式。 状态转移图的绘制(检测序列110) s0:0 s1:1 s2:11 s3:110 状态转移图的绘制(检测序列0101) s0:0 s1:01 s2:010 s3:1(无效状态) s4:0101 如何进行状态机编程 对于Mealy型FSM电路来说,由于电路的输出除了与电路的现态有关外,还与电路的输入信号有关,如果输入信号的变化不能及时被检测,而要等待时钟有效沿到来时才进行检测的话,则电路的输出很可能是错误的(例如在上次时钟有效沿和本次时钟有效沿之间往自动售货机里快速投入一枚硬币)。所以在设计FSM电路时,建议采用两个always块或者三个always块的方法进行描述。也就是说,若时钟周期相对过长,则会漏掉输入信号。即与输入信号有关的硬件描述语言采用组合逻辑形式。 状态编码的定义:parameter方式(一般采用该方式)和`define方式。 状态转换的描述:一般使用case、casez和casex语句来描述状态之间的转换,用case语句表述比用if-else语句更清晰明了。此外在case语句的最后,不要忘了加上default分支语句,以避免锁存器的产生。 用两个always块描述电路(检测序列110) module pusle(data,clk,nclr,out); input data,clk,nclr; output out; reg out; reg[2:0] current_state,next_state; parameter[1:0] s0=0,s1=1,s2=2,s3=3; always @(posedge clk) //the state register begin if(!nclr) current_state=s0; else current_state=next_state; end //the combination logic,assign the next_state always @(current_state or data) begin case(current_state) s0: begin out=0; next_state=(data==1)?s1:s0; end s1: begin out=0; next_state=(da

文档评论(0)

20010520 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档