- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可编程逻辑器件及其应用
行为描述(一) :模块基本结构
第5章 行为描述(一) :模块基本结构
5.1 行为描述的结构
5.2 语句块
5.1 行为描述的结构
模块采用行为描述方式时的基本语法格式如下:
module 模块名(端口列表)
模块端口说明
参数定义(可选)
数据类型说明
过程块(initial过程块或always过程块,可有一个或多个)
连续赋值语句;
任务定义(task)(可选)
函数定义(function)(可选)
endmodule
其中:
端口列表中可以有单个或多个输入、输出或双向端口;这
些端口类型要在“模块端口说明”部分进行类型说明。
参数定义用关键词parameter实现,如果模块定义了参数,那
么该模块的每个实例可以对该参数进行重新定义,使得该参数值
对每一个具体实例是惟一的。
数据类型说明用来对模块中用到的各类变量类型进行说明,
如果某个变量没有进行数据类型说明,则它的类型缺省为连线类
型(wire) 。
过程块是由过程语句initial或always开头的一个语句块,根据
这两个不同的关键词,过程块可以被分为“initial过程块”和
“always过程块”两种类型。过程块中包含一条或多条行为语句,
过程块是行为描述的主要组成部分。
连续赋值语句是由关键词assign来标识的一种赋值语句,它
只能对连线型类型(net类型)变量进行驱动,它和语句块一样也是
一种行为描述语句。在下一章讨论过程赋值语句时我们将对连续
赋值语句一并进行讨论。
任务定义和函数定义部分都是可选的,它们引入的目的是为
了描述模块中被多次执行的部分以及为了增强代码的易读性。
上面列出的各个模块组成项可以以任意次序出现,但是端口
说明和数据类型说明必须出现在这些端口和数据被引用之前。
与第2章中描述的模块的一般格式定义相比,我们可以看出:
在进行行为描述时,模块内不能出现模块实例和原语实例语句(包
括用户自定义原语实例) ,模块内只能存在过程块(initial过程块和
always过程块) 、连续赋值语句、任务定义(task)和函数定义
(function)这四种结构成分。对电路进行行为描述主要是通过过程
块和连续赋值语句来进行的,任务和函数的使用也需要在过程块
或连续赋值语句中进行调用。本章以及第6、7章将对这几种结构
成分进行介绍。
一个行为描述模块中可以同时包含多个过程块和多个连续赋
值语句,这些组成成分将以并行方式各自独立地执行;行为描述
模块也可以只包含过程块或者只包含连续赋值语句。
5.1.1 过程块
每个过程块是由“过程语句(initial或always)”和语句块所组成的,
而语句块主要是由过程性赋值语句(包括“过程赋值语句”和“过程
连续赋值语句”)和高级程序语句(包括“条件分支语句”和“循环
控制语句”)这两种行为语句构成的。过程块具有如下特点:
(1) 在行为描述模块中出现的每个过程块(always过程块或initial
过程块)都代表一个独立的进程。
(2) 在进行仿真时,所有initial过程块和always过程块的执行都
是从0时刻开始并行地进行的。
(3) 每一个过程块内部的多条语句的执行方式可以是顺序执行
的(当块定义语句为begin-end时的情况) ,也可以是并行执行的(块定
义语句为fork-join 时的情况) 。
(4) always过程块和initial过程块都是不能嵌套使用的。比如下
例5-1就是错误的。
【例5-1】错例:嵌套的过程块。
module nested_procedural_block(a,b,c) ;
input a,b ;
output c ;
reg a,b,c ;
initial // initial过程块1
begin
c=a ;
initial //嵌套在initial过程块1内部的initial过程块2
begin
文档评论(0)