第5讲VerilogHDL行为建模方法试卷.pptx

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;第5讲 Verilog HDL行为建模方法;学习目标;5.1 结构化过程语句;initial语句;;在变量声明的同时进行初始化 同时进行端口/数据声明和初始化;always语句;5.2 过程赋值语句;阻塞赋值语句;非阻塞赋值使用“=”作为赋值符。;非阻塞赋值语句的应用 对程序: 有如下的特点: 1.在每个时钟上升沿到来时读取in1,in2,in3和reg1,计算右侧表达式的值; 2.对左值的赋值由仿真器调度到相应的仿真时刻,延迟时间由语句中内嵌的延迟值确定。在本例中,对reg1的赋值需要等一个时间单位,对reg2的赋值需要等到时钟信号下降沿到来的时刻,对reg3的赋值需要等一个时间单位; 3.每个赋值操作在被调度的仿真时刻完成。注意,对左侧变量的赋值使用的是由仿真器保存的表达式“旧值”。在本例中,对reg3赋值使用的是reg1的“旧值”,而不是在此之前对reg1赋予的新值,reg1的“旧值”是在赋值事件调度时由仿真器保存的。;使用非阻塞赋值来避免竞争 采用阻塞赋值完成;5.3 基于延迟的时序控制;常规延迟控制 常规延迟控制位于赋值语句的左边,用于指定一个非零延迟值。;内嵌赋值延迟控制 除了可以将延迟控制置于赋值语句之前,还可以将它嵌入到赋值语句中,放在赋值符的右边。这种延迟方式的效果与常规延迟赋值是完全不同的。;零延迟控制 在同一仿真时刻,位于不同always和initial块中的过程语句有可能被同时计算,但是执行(赋值)顺序是不确定的,与使用的仿真器类型有关。在这种情况下,零延迟控制可以保证带零延迟控制的语句将在执行时刻相同的多条语句中最后执行,从而避免发生竞争。但需要注意的是,如果存在多条带有零延迟的语句,则它们之间的执行顺序也将是不确定的。;5.4 基于事件的时序控制;命名事件控制 Verilog语言提供了命名事件控制机制。用户可以在程序中声明event(事件)类型的变量,触发该变量,并且识别该事件是否已经发生。命名事件由关键字event声明,它不能保存任何值。事件的触发用符号- 表示;判断事件是否发生使用符号@来识别。 ;OR事件控制 有时,多个信号或者事件中发生的任意一个变化都能够触发语句或语句块的执行。在Verilog语言中,可以使用“或”表达式来表示这种情况。由关键词“or”连接的多个事件名或者信号名组成的列表称为敏感列表。 在跳变沿敏感的触发器中,也可以使用关键词“,” 来代替“or” 。;如果组合逻辑块语句的输入变量很多,那么编写敏感列表会很繁琐并且容易出错。针对这种情况,Verilog提供了另外两个特殊的符号:@*和@(*),它们都表示对其后语句块中的所有输入变量的变化是敏感的。;5.5 电平敏感时序控制;5.6 条件语句;5.7 多路分支语句— —case;case语句类似于多路选择器,下面使用case语句实现四选一多路选择器。;case语句逐位比较表达式的值和候选项的值,每一位的值可能是0,1,x或z。上例中只考虑0和1的情况,将x和z的情况归结为default。我们也可以将这部分进行单独的说明,如下:;casex/casez;5.7 循环语句;for循环;repeat循环;forever循环;5.8 顺序块和并行块;块语句的类型— —顺序块;块语句的类型— —并行块;并行块为我们提供了并行执行语句的机制。但是,在使用并行块时需要注意,如果两条语句在同一时刻对同一个变量产生影响,那么将会引起隐含的竞争。竞争结果取决于仿真器的具体实现方法。无法正确地处理竞争是目前所使用的仿真器的一个缺陷,这一缺陷并不是并行块所引起的。;块语句的特点;命名块 块可以具有自己的名字,我们称之为命名块。它的特点: 1.命名块中可以声明局部变量。 2.命名块是设计层次的一部分,命名块中声明的变量可以通过层次名引用进行访问。 3.命名块可以被禁用,例如停止其执行。 ;命名块的禁用 使用关键字disable可以终止命名块执行。disable可以用来从循环中退出、处理错误条件以及根据控制信号来控制某些代码段是否被执行。对块语句的禁用导致紧接在块后面的那条语句被执行。 ;生成块;循环生成语句;在仿真开始前,仿真器会对生成块中的代码进行确立(展平),将生成块转换为展开的代码,然后对展开的代码进行仿真。因此,生成块的本质是使用循环内的一条语句来代替多条重复的Verilog语句,简化用户的编程; 关键词genvar用于声明生成变量,生成变量只能用在生成块中;在确立后的仿真代码中,生成变量是不存在的; 一个生成变量的值只能由循环生成语句来改变; 循环生成语句可以嵌套使用。但是使用同一个生成变量作为索引的循环生成语句不能相互嵌套; xor_loop是赋予循环生成语句的名字,目的在

文档评论(0)

1112111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档