第五章 进程、任务与函数.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文档。上传文档
查看更多
芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 * * 第5章 进程、任务与函数 进程 进程间通信 任务 函数 任务与函数的区别 代码书写规范 本章介绍verilog进程的概念、任务和函数的使用方法,并对语句顺序执行和并行执行等进行必要的讨论。 5.1 进程 在verilog硬件设计中,进程是一个很重要的概念。 1. 进程 行为模型的本质是进程。一个进程可以被看做是一个独立的运行单元,它可能很简单,也可能很复杂,我们可以将数字系统的行为看作很多有机结合的进程的集合。 在Verilog HDL中,描述进程的基本语句是always和initial。always过程反复执行其中的块语句,而initial过程中的语句块只执行一次。除了always和initial过程块外,一个assign赋值语句、一个实例元件的调用都可以看作是一个进程。所以,一个Verilog模块中有如下表示进程的方式。 always过程块 initial过程 assign赋值语句 元件例化, 如and a1(out,a,b); 进程只有两种状态,即执行态和等待状态。进程是否进入执行态,取决于是否满足特定的条件,如敏感变量是否发生变化。一旦满足条件,进程即进入执行状态。当该进程执行完毕或遇到停止语句后,即停止执行,自动返回到起始语句,进入等待状态。 进程一般由敏感信号的变化来启动 各个进程之间通过信号线进行通信。多个进程之所以能同步并发运行,一个很重要的原因就是有进程之间的信号线的通信和协议。 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。 进程之间是并发执行的。两个或更多个“always”过程块、“assign”持续赋值语句、实例元件调用等操作都是同时执行的。 2. 进程的特点 3. 进程间的通信 在进行数字系统设计时,设计进程时应该注意以下几 点: 将硬件电路的行为以合理的方式映射为一些进程,对每个进程,以最有效的方式进行设计,以最合理的方式描述并实现。 将组合逻辑实现的电路和用时序逻辑实现的电路应尽量分配到不同的进程中 多个进程之间通过信号线进行通信。在设计中,为了使多个进程协调运行,我们可以设置一些握手信号,在进程中检测这些握手信号的状态,以决定是否进行必要的操作。在有的设计中,这种握手信号的协议是必不可少的。 当一个系统中包含有几个进程时,我们必须使它们同步,尤其是当不同的进程有共享数据的时候,这一点显得尤其重要。原因是进程A并不知道进程B当前处于什么状态,其数据是否已处理完毕,因此进程B最好能给出一个信号来指明状态的信息,在进程A中检测该信号的状态,以进行合适的操作。由此可考虑采用一种通信机模型,用握手信号来实现两个进程间的通信与协调。 用握手信号实现两个进程间的通信与协调 5.2 任务 任务和函数的关键字分别是task和function,利用任务和函数可以把一个大的程序模块分解成许多小的任务和函数,以方便调试,并且能使写出的程序结构更清晰。 任务的定义与调用格式分别如下: 定义: task任务名; //注意无端口列表 端口及数据类型声明语句; 其他语句; endtask 任务调用的格式为: 任务名 (端口1,端口2,……); 注:任务调用变量和定义时说明的I/O变量时一一对应的。比如下面是一个定义任务的例子。 当调用该任务时,可使用如下语句:test(data1,data2,code1,code2) 调用任务test时,变量data1和data2的值赋给in1和in2,而任务执行完后,out1和out2的值则赋给了code1和code2. 任务调用注意事项: 任务的定义与调用须在一个module模块内 定义任务时,没有端口名列表,但需要紧接着进行输入、输出端口和数据类型的说明 当任务被调用时,任务被激活。任务的调用与模块调用一样通过任务名调用来实现。调用时,需列出端口名列表,端口的排序和类型必须与任务定义中的一致 一个任

文档评论(0)

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

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

1亿VIP精品文档

相关文档