[信息与通信]Verilog HDL数字系统设计及其应用袁俊泉第5章.ppt
《[信息与通信]Verilog HDL数字系统设计及其应用袁俊泉第5章.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]Verilog HDL数字系统设计及其应用袁俊泉第5章.ppt(60页珍藏版)》请在三一文库上搜索。
1、第5章 行为描述(一):模块基本结构,5.1 行为描述的结构 5.2 语句块,5.1 行为描述的结构 模块采用行为描述方式时的基本语法格式如下: module () 模块端口说明 参数定义(可选) 数据类型说明 过程块(initial过程块或always过程块,可有一个或多个) 连续赋值语句; 任务定义(task)(可选) 函数定义(function)(可选) endmodule 其中: 端口列表中可以有单个或多个输入、输出或双向端口;这些端口类型要在“模块端口说明”部分进行类型说明。,参数定义用关键词parameter实现,如果模块定义了参数,那么该模块的每个实例可以对该参数进行重新定义,使
2、得该参数值对每一个具体实例是惟一的。 数据类型说明用来对模块中用到的各类变量类型进行说明,如果某个变量没有进行数据类型说明,则它的类型缺省为连线类型(wire)。 过程块是由过程语句initial或always开头的一个语句块,根据这两个不同的关键词,过程块可以被分为“initial过程块”和“always过程块”两种类型。过程块中包含一条或多条行为语句,过程块是行为描述的主要组成部分。 连续赋值语句是由关键词assign来标识的一种赋值语句,它只能对连线型类型(net类型)变量进行驱动,它和语句块一样也是一种行为描述语句。在下一章讨论过程赋值语句时我们将对连续赋值语句一并进行讨论。,任务定义
3、和函数定义部分都是可选的,它们引入的目的是为了描述模块中被多次执行的部分以及为了增强代码的易读性。 上面列出的各个模块组成项可以以任意次序出现,但是端口说明和数据类型说明必须出现在这些端口和数据被引用之前。 与第2章中描述的模块的一般格式定义相比,我们可以看出:在进行行为描述时,模块内不能出现模块实例和原语实例语句(包括用户自定义原语实例),模块内只能存在过程块(initial过程块和always过程块)、连续赋值语句、任务定义(task)和函数定义(function)这四种结构成分。对电路进行行为描述主要是通过过程块和连续赋值语句来进行的,任务和函数的使用也需要在过程块或连续赋值语句中进行调
4、用。本章以及第6、7章将对这几种结构成分进行介绍。,一个行为描述模块中可以同时包含多个过程块和多个连续赋值语句,这些组成成分将以并行方式各自独立地执行;行为描述模块也可以只包含过程块或者只包含连续赋值语句。,5.1.1 过程块 每个过程块是由“过程语句(initial或always)”和语句块所组成的,而语句块主要是由过程性赋值语句(包括“过程赋值语句”和“过程连续赋值语句”)和高级程序语句(包括“条件分支语句”和“循环控制语句”)这两种行为语句构成的。过程块具有如下特点: (1) 在行为描述模块中出现的每个过程块(always过程块或initial过程块)都代表一个独立的进程。 (2) 在进
5、行仿真时,所有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;
6、initial /嵌套在initial过程块1内部的initial过程块2 begin c=b; end end endmodule,5.1.2 intial过程块 initial过程块是由过程语句“initial”和语句块组成的,它的格式为: initial 语句块 而“语句块”的格式为: : 块内局部变量说明; 时间控制1 行为语句1; 时间控制n 行为语句n; ,在如上所示的格式中: (1) 过程语句关键词initial表明了该过程块是一个“initial过程块”。 (2) 块定义语句1和块定义语句2构成了一组块定义语句,它们可以是“begin,end”语句组或“fork,join”语句
7、组。这两条块定义语句将它们之间的多条行为语句组合在一起,使之构成一个语句块,并使其在格式上更像一条语句。当语句块中只包含一条行为语句并且不需要定义块名和块内局部变量时,这两条块定义语句可以缺省。 (3) 为可选项,块名可以为语句块创建一个局部作用域。定义了块名的过程块称为“有名块”,在有名块中可以定义局部变量,有名块内部语句的执行可以被disable语句中断。,(4) 块内局部变量说明也是可选项,只有在有名块中才能定义局部变量,并且块内局部变量只能是寄存器类数据类型。 (5) 时间控制用来对过程块内各条语句的执行时间进行控制。它可以是任何一种时间控制方式。关于时间控制我们将在第6章进行详细讨论
8、。,(6) 行为语句可以是如下语句中的一种: 过程赋值语句(阻塞型或非阻塞型过程赋值语句)。 过程连续赋值语句(assign/deassign或force/release语句组)。 if条件分支语句。 case条件分支语句。 循环控制语句(forever,repeat,while,for循环控制语句)。 wait等待语句。 disable中断语句。 事件触发语句(event_trigger)。 任务调用语句(用户自定义的任务或系统任务),我们可以将上面的这些行为语句分成三类:过程性赋值语句、高级程序语句和时间控制语句。其中过程性赋值语句和高级程序语句是过程块的基本组成部分。要注意上面列出的行为
9、语句只能对寄存器类数据变量进行赋值(除force/release过程连续赋值语句以外)。 在进行仿真时,一个initial过程块从模拟0时刻开始执行,它在仿真过程中只执行一次,在执行完一次后该initial过程块就被挂起,不再执行。如果一个模块中存在多个initial过程块,则每个initial过程块都是同时从0时刻开始并行执行的。initial过程块内的多条行为语句可以是顺序执行(语句块是begin-end串行块时)的,也可以是并行执行(语句块是fork-join并行块时)的。,initial过程块的使用主要是面向功能模拟的,它通常不具有可综合性。initial过程块通常用来描述测试模块的初
10、始化、监视、波形生成等功能行为;而在对硬件功能模块的行为描述中,initial过程块常常用来对只需执行一次的进程进行描述,例如它可以用来为寄存器变量赋初值。,【例5-2】initial过程块用于对变量和存储器进行初始化。 module register_initialize (memory); inout areg; inout memory; parameter SIZE=1024; parameter BYTESIZE=8; regBYTESIZE-1:0 memory SIZE-1:0 ; initial /initial过程语句 begin :SEQ_BLK_A /块定义语句,SEQ_
11、BLK_A为块名 integer:index ; /计数变量,为块中的一个局部变量 for(index=0;indexSIZE;index=index+1) memoryindex=0; /对存储器memory进行初始化 areg=0; /对寄存器areg进行初始化 end /块结束标志 endmodule,这个例子的作用是用initial语句在仿真的开始时刻对寄存器变量和存储器进行赋零值操作,从而实现各个变量的初始化。例5-2中的串行块被定义了一个块名“SEQ_ BLK_A”,这是由于为了循环计数需要定义局部变量index,而只有当串行语句块为有名块时才能在块中定义局部变量,所以上例中的块名
12、定义不能缺省。initial过程块中包含了一个begin-end串行语句块。所以对存储器的赋值操作将先于对寄存器的赋值操作进行。这个initial过程块在0 ns时开始执行,并且由于串行块中for循环控制语句和过程赋值语句都没有指定时延,所以对存储器和寄存器的赋值操作都是在0时刻开始和完成的。在完成对寄存器的赋值操作后,initial过程块中所有的语句都已执行完毕,所以initial过程块将结束执行,并且将被永远挂起不再重新执行。,【例5-3】initial过程块用于为电路仿真生成激励波形。 initial begin inputs=b000000; / 初始时刻为0 #10 inputs=b
13、011001; / 10个时间单位后取值改变 #20 inputs=b011011; / 20个时间单位后取值改变 #5 inputs=b011000; / 5个时间单位后取值改变 #10 inputs=b001000; / 20个时间单位后取值改变 end,在例5-3中,我们用initial过程块来生成特定的电路仿真激励信号,和例5-2中的情况一样,initial语句包含了一个串行块。但是在此例中begin-end串行块内的语句是带有时延的,假定initial语句从t=0时刻开始执行,那么首先执行第一条赋值语句,在t=0时刻input的值变为b000000;由于第二条赋值语句带有延时控制,所
14、以第二条语句的执行是在第一条语句执行结束10个单位时间后(即在t=10时刻)开始的,在t=10时刻input的值变为b011001;然后再等待20个单位时间后开始第三条赋值语句的执行,依次类推可以知道input取值的变化情况将如表5.1所示。当第五条赋值语句执行完毕后(t=45时刻),initial过程块中所有语句已全部执行完,仿真进程跳出initial过程块,initial语句被永远挂起。,5.1.3 always过程块 always过程块是由“always”过程语句和语句块组成的,它的格式为: always (敏感事件列表) 语句块 其中“语句块”的格式为: : 块内局部变量说明; 时间控
15、制1 行为语句1; 时间控制n 行为语句n; ,(1) 关键词always表明了该过程块是一个“always过程块”。 (2) (敏感事件列表) 是可选项,带有敏感事件列表的语句块被称为“由事件控制的语句块”,它的执行要受敏感事件的控制。(敏感事件列表)的形式为: ( event-expression or event-expression* ) 敏感事件列表是由一个或多个事件表达式(event-expression)构成的,当存在多个事件表达式时要用or将它们组合起来。or用来说明:只要发生了敏感事件列表所列出的多个事件中的任何一个,就将启动后面语句块的执行。敏感事件列表实际上代表了一个事件
16、控制类型的时间控制。我们将在第6章进一步讨论时间控制、事件控制和敏感事件列表。,(3) always过程块中关于 的规定和initial过程块中的情况一样,它们可以是“begin-end”语句组或“fork-join”语句组,由这两组语句组组合成的语句块分别称为串行块和并行块。当过程块中只包含一条语句且不需定义块名与块内局部变量时,块定义语句可以缺省。 (4) 为可选项,对它的规定与initial过程块中的情况一样。定义了块名的过程块称为有名块。 (5) 块内局部变量是可选项,对它的规定与initial过程块中的情况一样。只有在有名块中才能定义局部变量,块内局部变量只能是寄存器类数据类型; (
17、6) 时间控制用来对过程块内各条语句的执行时间进行控制。其作用与initial过程块中的“时间控制”部分的作用是相同的。,(7) 对“行为语句”的规定与上一小节中initial过程块中的情况相同。 从上面的格式定义可以看出,always过程块和initial过程块在格式上的区别主要在于:always过程语句后面可以有一个敏感事件列表,该敏感事件列表的作用是用来激活always过程语句的执行,而initial过程语句的后面则不允许有敏感事件列表。 在进行仿真时,和initial过程块一样,always过程块是从模拟0时刻开始执行的。但是always语句在仿真过程中是不断重复执行的,而不像init
18、ial过程块中的语句那样在执行一次后就被挂起,不会再次被执行。并且always过程块内各条语句的真正执行必须由敏感事件列表中列出的事件进行触发才能启动。如果always过程块中的敏感事件列表缺省,则认为触发条件始终被满足,always过程块将无条件地循环执行下去,直到遇到$finish或$stop系统任务为止。,敏感事件列表由一个或多个“事件表达式(event-expression)”构成,事件表达式说明了启动块内语句执行时的触发条件。当存在多个事件表达式时要用关键词or将多个触发条件组合起来。Verilog规定:只要这些事件表达式所代表的多个触发条件中有一个成立,就启动块内语句的执行。例如,
19、在语句: always (a or b or c); begin end,中,always过程块的多个事件表达式分别是信号a,b和c,它们代表的触发条件分别是信号a,b,c发生变化,这三个事件表达式之间以关键词or分隔,这时只要其中一个触发条件被满足,也就是只要信号a,b,c中有一个的值发生变化,begin-end语句块的执行就被触发。而如果信号a,b,c的值都没有发生变化,则任何一个触发条件都没有被满足,begin-end语句块中的语句不被执行;此时由于always过程语句的重复执行的特点,仿真进程将不断地对触发条件进行监测,等待a,b,c信号发生变化。,always过程块的使用主要是对硬件
20、功能模块的行为进行描述,它也可以在测试模块中用来对时钟进行描述。利用always过程块可以实现锁存器和触发器,它也可以用来实现组合逻辑。 在用always过程块实现组合逻辑时要注意将所有的输入信号都列入敏感事件列表中,而在用always过程块实现时序逻辑时却不一定要将所有的输入信号都列入敏感事件列表。敏感事件列表中未包含所有输入信号的情况称为“不完整事件说明(Incomplete Event Specification)”。“不完整事件说明”情况在仿真时可能会引起模拟器的误解。我们可以通过如下两个例子来说明这个问题。,【例5-4】敏感事件列表中未包含所有输入信号的情况。 module thre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息与通信 信息与通信Verilog HDL数字系统设计及其应用袁俊泉第5章 信息 通信 Verilog HDL 数字 系统 设计 及其 应用 袁俊泉第
链接地址:https://www.31doc.com/p-2000676.html