第四次verlogHDL课演示文稿.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文档。上传文档
查看更多
第 五讲 行为建模 内容: 行为建模 过程块语句 过程赋值 过程中的块语句 过程的时序控制 阻塞与非阻塞过程赋值 条件语句 行为建模(描述) 行为建模(描述) 行为级描述是对系统的高抽象级描述。在这个抽象级,注重的是整个系统的功能而不是描述具体实现。 Verilog有高级编程语言结构用于行为描述,包括:initial, always,@, wait, for, while, if else, case 和 forever 等。 Verilog的行为建模是用一系列以高级编程语言编写的并行的、动态的过程块来描述系统的工作。 过程块(procedural) 过程块是行为模型的基础。一个模块中可以有多个过程块,过程块有两种: initial块,只能执行一次 always块,循环执行 过程块中有下列部件 过程赋值语句:描述过程块中的数据流 时序控制:控制块的执行及块中的语句时序 高级结构(循环,条件语句等):描述块的功能 过程块initial和always 都从0时刻开始执行; initial无触发条件,只执行一次; Always按触发条件执行,或无触发条件时一直执行; 一个module的行为描述中可以有多个initial和always语句,即有多个过程块存在,且相互独立,并行运行。 过程赋值(procedural assignment) 在过程块中的赋值称为过程赋值。 在过程赋值语句中表达式左边的信号必须是寄存器类型(如reg类型) 在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。 如果一个信号没有声明则缺省为wire类型。使用过程赋值语句给wire赋值会产生错误。 过程中的块语句 块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。块语句分为两类。 顺序块:语句置于关键字begin和end之间,块中的语句以顺序方式执行。 并行块:关键字fork和join之间的是并行块语句,块中的语句并行执行。 Fork和join语句常用于testbench描述。这是因为可以一起给出矢量及其绝对时间,而不必描述所有先前事件的时间(不可综合)。 过程的时序控制 在过程块中可以说明过程时序。过程时序控制有三类: 延时执行:#delay, 延迟指定时间步后执行语句 边沿敏感事件的时序控制:@(signal) 在信号发生翻转后执行语句。 可以说明信号有效沿是上升沿(posedge)还是下降沿(negedge)。 可以用关键字or指定多个参数。 电平敏感事件的时序控制:wait(expr)(不可综合) 直至expr值为真时(非零)才执行语句。 若expr已经为真则立即执行语句。 延时执行 语法:定时控制 寄存器变量=表达式; 执行过程:定时控制 - 求表达式 -?赋值 举例: #10 reg_a=reg_b; //延时10个单位后,执行赋值。 # 2 q= a b; //延时2个单位后,求表达式,赋 //值。 与assign语句延时相似,为惯性延时。 延时执行 在testbench中使用延时执行(#延时)施加激励,或在行为模型中模拟实际延时。 延时执行例 module clk_gen_demo(clock1,clock2); output clock1,clock2; reg clock1,clock2; initial begin clock1=0; clock2=1; end always begin #50 clock1=~clock1; end always begin #100 clock2=~clock2; end endmodule 边沿敏感事件的时序控制 事件控制:@(事件控制敏感表),等待直到事件发生后执行。 @(信号名) – 信号名有变化就触发事件,例:@(clock) a=b; @(posedge 信号名) – 信号名有上升沿就触发事件, 例:@(posedge clock) a=b; @(negedge 信号名) – 信号名有下降沿就触发事件 例:@(negedge clock) a=b; @(敏感事件1 or 敏感事件2 or … ) – 敏感事件之一触发事件 例:@(posedge reset or posedge clear) reg_out=0; @( a or b) c = a b; 边沿敏感事件的时序控制例 电平敏感事件的时序控制 事件控制:wait(变量或表达式事件),等待直到事件为真(1)执行后续语句。例

文档评论(0)

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

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

1亿VIP精品文档

相关文档